Initial commit
This commit is contained in:
@@ -0,0 +1,142 @@
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <vcl.h>
|
||||
#include <Vcl.Imaging.pngimage.hpp>
|
||||
#include <System.NetEncoding.hpp>
|
||||
#include "GlobalUnit.h"
|
||||
#pragma hdrstop
|
||||
|
||||
#include "VerifyCodeFormUnit.h"
|
||||
#include "MessageFormUnit.h"
|
||||
//---------------------------------------------------------------------------
|
||||
#pragma package(smart_init)
|
||||
#pragma link "PNGButton"
|
||||
#pragma resource "*.dfm"
|
||||
TVerifyCodeForm *VerifyCodeForm;
|
||||
//---------------------------------------------------------------------------
|
||||
__fastcall TVerifyCodeForm::TVerifyCodeForm(TComponent* Owner, String baseUrl)
|
||||
: TForm(Owner)
|
||||
{
|
||||
for( int i=0; i<ComponentCount; i++ ){
|
||||
if(Components[i]->ClassNameIs( TLabel::ClassName() ) )
|
||||
((TLabel*)Components[i])->ControlStyle>>csOpaque;
|
||||
}
|
||||
|
||||
RESTClient->BaseURL = String(baseUrl);
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
void __fastcall TVerifyCodeForm::FormCreate(TObject *Sender)
|
||||
{
|
||||
Font->Color = RGB(60,43,23);
|
||||
//绘制圆角窗体
|
||||
HRGN hRgn = CreateRoundRectRgn( 0, 0, Width+1, Height+2, 10, 10 );
|
||||
SetWindowRgn( Handle, hRgn, false );
|
||||
DeleteObject( hRgn );
|
||||
SetTransparent( this );
|
||||
|
||||
RefreshCode();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TVerifyCodeForm::WMNCHitTest(TWMNCHitTest &Msg)
|
||||
{
|
||||
TForm::Dispatch(&Msg);
|
||||
|
||||
if( Msg.Result==HTCLIENT && Msg.YPos<Top+24 && Msg.XPos<Left+275 )
|
||||
Msg.Result = HTCAPTION;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TVerifyCodeForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
|
||||
{
|
||||
switch( Key ){
|
||||
case VK_RETURN:
|
||||
OkClick(NULL);
|
||||
break;
|
||||
|
||||
case VK_ESCAPE:
|
||||
ModalResult = mrCancel;
|
||||
break;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TVerifyCodeForm::RefreshCode()
|
||||
{
|
||||
this->Enabled = false;
|
||||
Screen->Cursor = crHourGlass;
|
||||
|
||||
RESTRequest->Resource = "captcha";
|
||||
RESTRequest->Params->Clear();
|
||||
|
||||
try{
|
||||
RESTRequest->Execute();
|
||||
}
|
||||
catch (Exception &exception){
|
||||
DebugPrint("exception: %s", exception.Message );
|
||||
}
|
||||
|
||||
Screen->Cursor = crDefault;
|
||||
this->Enabled = true;
|
||||
|
||||
if(RESTResponse->StatusCode==200){
|
||||
TJSONValue *jValue = RESTResponse->JSONValue;
|
||||
if(jValue==NULL)
|
||||
return;
|
||||
|
||||
TJSONValue *jCode = jValue->FindValue("code");
|
||||
if( jCode==NULL )
|
||||
return;
|
||||
|
||||
String code = ((TJSONString*)jCode)->Value();
|
||||
if(code=="00000"){
|
||||
TJSONValue *jData = jValue->FindValue("data");
|
||||
|
||||
TJSONValue *jKey = jData->FindValue("captchaKey");
|
||||
m_sKey = ((TJSONString*)jKey)->Value();
|
||||
|
||||
TJSONValue *jBase64 = jData->FindValue("captchaBase64");
|
||||
String sBase64 = ((TJSONString*)jBase64)->Value();
|
||||
sBase64 = sBase64.SubString(23,sBase64.Length()-22);
|
||||
Sysutils::TBytes bytes = TNetEncoding::Base64String->DecodeStringToBytes(sBase64);
|
||||
|
||||
TPngImage * png = new TPngImage();
|
||||
png->LoadFromStream(new TBytesStream(bytes));
|
||||
m_imgCode->Picture->Assign(png);
|
||||
|
||||
delete png;
|
||||
}
|
||||
else{
|
||||
MessageForm->ShowMessage( "获取验证码图片失败,请稍后重试", MB_ICONERROR | MB_OK );
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
else{
|
||||
MessageForm->ShowMessage( "访问服务器异常,请稍后重试", MB_ICONERROR | MB_OK );
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TVerifyCodeForm::CodeImgClick(TObject *Sender)
|
||||
{
|
||||
RefreshCode();
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
void __fastcall TVerifyCodeForm::OkClick(TObject *Sender)
|
||||
{
|
||||
m_editCode->Text = m_editCode->Text.Trim();
|
||||
if(m_editCode->Text.IsEmpty()){
|
||||
m_editCode->SetFocus();
|
||||
return;
|
||||
}
|
||||
|
||||
m_sCode = m_editCode->Text;
|
||||
|
||||
ModalResult = mrOk;
|
||||
}
|
||||
//---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user