Files
AccompanyCube/MessageFormUnit.cpp
2026-06-13 00:10:11 +08:00

196 lines
4.7 KiB
C++

//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MessageFormUnit.h"
#include "GlobalUnit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "PNGButton"
#pragma resource "*.dfm"
TMessageForm *MessageForm;
//---------------------------------------------------------------------------
__fastcall TMessageForm::TMessageForm(TComponent* Owner)
: TForm(Owner)
{
m_pImgCheck = new TBitmap();
m_pImgCheck->LoadFromResourceName(int(HInstance), L"AutoLoginCheck");
m_iCheck = -1;
Font->Color = RGB(60,43,23);
SetTransparent( this );
}
//---------------------------------------------------------------------------
__fastcall TMessageForm::~TMessageForm()
{
delete m_pImgCheck;
}
//---------------------------------------------------------------------------
void __fastcall TMessageForm::WMNCHitTest(TWMNCHitTest &Msg)
{
TForm::Dispatch(&Msg);
if( Msg.Result==HTCLIENT && Msg.YPos<Top+24 )
Msg.Result = HTCAPTION;
}
//---------------------------------------------------------------------------
int __fastcall TMessageForm::ShowMessage( const String AMessage, int AType )
{
if( Visible )
return -1;
m_iconInformation->Visible = false;
m_iconError->Visible = false;
m_iconQuestion->Visible = false;
m_btnYes->Visible = false;
m_btnNo->Visible = false;
m_btnOk->Visible = false;
m_btnCancel->Visible = false;
int iIconType = AType & 0x0F0;
if( iIconType==MB_ICONERROR ){
m_iconError->Visible = true;
}
else if( iIconType==MB_ICONQUESTION ) {
m_iconQuestion->Visible = true;
}
else if( iIconType==MB_ICONINFORMATION ) {
m_iconInformation->Visible = true;
}
int iButtonType = AType & 0x0F;
if( iButtonType==MB_OK ){
m_btnOk->Visible = true;
m_btnOk->Left = (Width - m_btnOk->Width)/2 + 6;
}
else if( iButtonType==MB_OKCANCEL ){
m_btnOk->Visible = true;
m_btnCancel->Visible = true;
m_btnOk->Left = (Width - (m_btnOk->Width+6)*2 )/2 + 6;
m_btnCancel->Left = m_btnOk->Left + m_btnOk->Width + 6;
}
else if( iButtonType==MB_YESNO ){
m_btnYes->Visible = true;
m_btnNo->Visible = true;
m_btnYes->Left = (Width - (m_btnYes->Width+6)*2 )/2 + 6;
m_btnNo->Left = m_btnYes->Left + m_btnYes->Width + 6;
}
else if( iButtonType==MB_YESNOCANCEL ){
m_btnYes->Visible = true;
m_btnNo->Visible = true;
m_btnCancel->Visible = true;
m_btnYes->Left = (Width - (m_btnYes->Width+6)*3 )/2 + 6;
m_btnNo->Left = m_btnYes->Left + m_btnYes->Width + 6;
m_btnCancel->Left = m_btnNo->Left + m_btnNo->Width + 6;
}
int iCheckType = AType & 0xF00;
if( iCheckType ){
if( iCheckType==MB_CHECKED ){
m_iCheck = 1;
}
else if( iCheckType==MB_UNCHECKED ){
m_iCheck = 0;
}
m_pbCheck->Show();
m_lblCheckMessage->Show();
}
else{
m_pbCheck->Hide();
m_lblCheckMessage->Hide();
}
m_lblMessage->Caption = AMessage;
HRGN hRgn = CreateRoundRectRgn( 0, 0, Width+1, Height+2, 20, 20 );
SetWindowRgn( Handle, hRgn, false );
DeleteObject( hRgn );
return ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TMessageForm::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift)
{
switch( Key ){
case VK_RETURN:
case ' ':
if( m_btnYes->Visible )
ModalResult = mrYes;
else if( m_btnOk->Visible )
ModalResult = mrOk;
break;
case VK_ESCAPE:
if( m_btnCancel->Visible )
ModalResult = mrCancel;
break;
case 'Y':
if( m_btnYes->Visible )
ModalResult = mrYes;
break;
case 'N':
if( m_btnNo->Visible )
ModalResult = mrNo;
break;
}
}
//---------------------------------------------------------------------------
void __fastcall TMessageForm::CheckPaint(TObject *Sender)
{
//绘制Check状态
if( m_iCheck>=0 ){
int x = 0;
if( m_iCheck==0 ){
x = -m_pImgCheck->Width/2;
}
m_pbCheck->Canvas->Draw(x, 0, m_pImgCheck);
}
}
//---------------------------------------------------------------------------
void _fastcall TMessageForm::SetCheckMessage( String strMessage )
{
if( strMessage.IsEmpty() ){
m_lblCheckMessage->Caption = L"不再提示";
}
else{
m_lblCheckMessage->Caption = strMessage;
}
}
//---------------------------------------------------------------------------
void __fastcall TMessageForm::CheckClick(TObject *Sender)
{
//切换Check状态
if( m_iCheck==0 ){
m_iCheck = 1;
}
else{
m_iCheck = 0;
}
m_pbCheck->Invalidate();
}
//---------------------------------------------------------------------------
void __fastcall TMessageForm::CheckMessageClick(TObject *Sender)
{
CheckClick( NULL );
}
//---------------------------------------------------------------------------
bool TMessageForm::GetCheckState()
{
return (m_iCheck==1)?true:false;
}