Files
AC_Pro/Component/GenelralDialogPanel/GeneralDialogPanel.cpp
T
2026-06-13 00:05:19 +08:00

354 lines
16 KiB
C++

//---------------------------------------------------------------------------
#include <vcl.h>
#include <stdio.h>
#pragma hdrstop
#include "GeneralDialogPanel.h"
#pragma package(smart_init)
#include "PNGButton.cpp"
//---------------------------------------------------------------------------
// ValidCtrCheck is used to assure that the components created do not have
// any pure virtual functions.
//
//
static const char *pngImage =
"89504E470D0A1A0A0000000D49484452000000450000001208060000000D0613"\
"66000000097048597300000B1300000B1301009A9C1800000A4D694343505068"\
"6F746F73686F70204943432070726F66696C65000078DA9D53775893F7163EDF"\
"F7650F5642D8F0B1976C81002223AC08C81059A21092006184101240C585880A"\
"561415119C4855C482D50A489D88E2A028B867418A885A8B555C38EE1FDCA7B5"\
"7D7AEFEDEDFBD7FBBCE79CE7FCCE79CF0F8011122691E6A26A003952853C3AD8"\
"1F8F4F48C4C9BD80021548E0042010E6CBC26705C50000F00379787E74B03FFC"\
"01AF6F00020070D52E2412C7E1FF83BA50265700209100E02212E70B01905200"\
"C82E54C81400C81800B053B3640A009400006C797C422200AA0D00ECF4493E05"\
"00D8A993DC1700D8A21CA908008D0100992847240240BB00605581522C02C0C2"\
"00A0AC40222E04C0AE018059B632470280BD0500768E58900F4060008099422C"\
"CC0020380200431E13CD03204C03A030D2BFE0A95F7085B8480100C0CB95CD97"\
"4BD23314B895D01A77F2F0E0E221E2C26CB142611729106609E4229C979B2313"\
"48E7034CCE0C00001AF9D1C1FE383F90E7E6E4E1E666E76CEFF4C5A2FE6BF06F"\
"223E21F1DFFEBC8C020400104ECFEFDA5FE5E5D60370C701B075BF6BA95B00DA"\
"560068DFF95D33DB09A05A0AD07AF98B7938FC401E9EA150C83C1D1C0A0B0BED"\
"2562A1BD30E38B3EFF33E16FE08B7EF6FC401EFEDB7AF000719A4099ADC0A383"\
"FD71616E76AE528EE7CB0442316EF7E723FEC7857FFD8E29D1E234B15C2C158A"\
"F15889B850224DC779B952914421C995E212E97F32F11F96FD0993770D00AC86"\
"4FC04EB607B5CB6CC07EEE01028B0E58D27600407EF32D8C1A0B910010673432"\
"79F7000093BFF98F402B0100CD97A4E30000BCE8185CA894174CC608000044A0"\
"812AB041070CC114ACC00E9CC11DBCC01702610644400C24C03C104206E4801C"\
"0AA11896411954C03AD804B5B0031AA0119AE110B4C131380DE7E0125C81EB70"\
"170660189EC218BC86090441C8081361213A8811628ED822CE0817998E042261"\
"48349280A420E988145122C5C872A402A9426A915D4823F22D7214398D5C40FA"\
"90DBC820328AFC8ABC47319481B25103D4027540B9A81F1A8AC6A073D174340F"\
"5D8096A26BD11AB41E3D80B6A2A7D14BE87574007D8A8E6380D1310E668CD961"\
"5C8C87456089581A26C71663E55835568F35631D583776151BC09E61EF082402"\
"8B8013EC085E8410C26C82909047584C5843A825EC23B412BA085709838431C2"\
"272293A84FB4257A12F9C478623AB1905846AC26EE211E219E255E270E135F93"\
"48240EC992E44E0A21259032490B496B48DB482DA453A43ED210699C4C26EB90"\
"6DC9DEE408B280AC209791B7900F904F92FBC9C3E4B7143AC588E24C09A22452"\
"A494124A35653FE504A59F324299A0AA51CDA99ED408AA883A9F5A496DA07650"\
"2F5387A91334759A25CD9B1643CBA42DA3D5D09A696769F7682FE974BA09DD83"\
"1E4597D097D26BE807E9E7E983F4770C0D860D83C7486228196B197B19A718B7"\
"192F994CA605D39799C85430D7321B9967980F986F55582AF62A7C1591CA1295"\
"3A9556957E95E7AA545573553FD579AA0B54AB550FAB5E567DA64655B350E3A9"\
"09D416ABD5A91D55BBA936AECE5277528F50CF515FA3BE5FFD82FA630DB28685"\
"46A08648A35463B7C6198D2116C63265F15842D6725603EB2C6B984D625BB2F9"\
"EC4C7605FB1B762F7B4C534373AA66AC6691669DE671CD010EC6B1E0F039D99C"\
"4ACE21CE0DCE7B2D032D3F2DB1D66AAD66AD7EAD37DA7ADABEDA62ED72ED16ED"\
"EBDAEF75709D409D2C9DF53A6D3AF77509BA36BA51BA85BADB75CFEA3ED363EB"\
"79E909F5CAF50EE9DDD147F56DF4A3F517EAEFD6EFD11F373034083690196C31"\
"3863F0CC9063E86B9869B8D1F084E1A811CB68BA91C468A3D149A327B826EE87"\
"67E33578173E66AC6F1C62AC34DE65DC6B3C61626932DBA4C4A4C5E4BE29CD94"\
"6B9A66BAD1B4D374CCCCC82CDCACD8ACC9EC8E39D59C6B9E61BED9BCDBFC8D85"\
"A5459CC54A8B368BC796DA967CCB05964D96F7AC98563E567956F556D7AC49D6"\
"5CEB2CEB6DD6576C501B579B0C9B3A9BCBB6A8AD9BADC4769B6DDF14E2148F29"\
"D229F5536EDA31ECFCEC0AEC9AEC06ED39F661F625F66DF6CF1DCC1C121DD63B"\
"743B7C727475CC766C70BCEBA4E134C3A9C4A9C3E957671B67A1739DF33517A6"\
"4B90CB1297769717536DA78AA76E9F7ACB95E51AEEBAD2B5D3F5A39BBB9BDCAD"\
"D96DD4DDCC3DC57DABFB4D2E9B1BC95DC33DEF41F4F0F758E271CCE39DA79BA7"\
"C2F390E72F5E765E595EFBBD1E4FB39C269ED6306DC8DBC45BE0BDCB7B603A3E"\
"3D65FACEE9033EC63E029F7A9F87BEA6BE22DF3DBE237ED67E997E07FC9EFB3B"\
"FACBFD8FF8BFE179F216F14E056001C101E501BD811A81B3036B031F049904A5"\
"0735058D05BB062F0C3E15420C090D591F72936FC017F21BF96333DC672C9AD1"\
"15CA089D155A1BFA30CC264C1ED6118E86CF08DF107E6FA6F94CE9CCB60888E0"\
"476C88B81F69199917F97D14292A32AA2EEA51B453747174F72CD6ACE459FB67"\
"BD8EF18FA98CB93BDB6AB6727667AC6A6C526C63EC9BB880B8AAB8817887F845"\
"F1971274132409ED89E4C4D8C43D89E37302E76C9A339CE49A54967463AEE5DC"\
"A2B917E6E9CECB9E773C593559907C3885981297B23FE5832042502F184FE5A7"\
"6E4D1D13F2849B854F45BEA28DA251B1B7B84A3C92E69D5695F638DD3B7D43FA"\
"68864F4675C633094F522B79911992B923F34D5644D6DEACCFD971D92D39949C"\
"949CA3520D6996B42BD730B728B74F662B2B930DE479E66DCA1B9387CAF7E423"\
"F973F3DB156C854CD1A3B452AE500E164C2FA82B785B185B78B848BD485AD433"\
"DF66FEEAF9230B82167CBD90B050B8B0B3D8B87859F1E022BF45BB16238B5317"\
"772E315D52BA647869F0D27DCB68CBB296FD50E2585255F26A79DCF28E5283D2"\
"A5A5432B82573495A994C9CB6EAEF45AB9631561956455EF6A97D55B567F2A17"\
"955FAC70ACA8AEF8B046B8E6E2574E5FD57CF5796DDADADE4AB7CAEDEB48EBA4"\
"EB6EACF759BFAF4ABD6A41D5D086F00DAD1BF18DE51B5F6D4ADE74A17A6AF58E"\
"CDB4CDCACD03356135ED5BCCB6ACDBF2A136A3F67A9D7F5DCB56FDADABB7BED9"\
"26DAD6BFDD777BF30E831D153BDEEF94ECBCB52B78576BBD457DF56ED2EE82DD"\
"8F1A621BBABFE67EDDB847774FC59E8F7BA57B07F645EFEB6A746F6CDCAFBFBF"\
"B2096D52368D1E483A70E59B806FDA9BED9A77B5705A2A0EC241E5C127DFA67C"\
"7BE350E8A1CEC3DCC3CDDF997FB7F508EB48792BD23ABF75AC2DA36DA03DA1BD"\
"EFE88CA39D1D5E1D47BEB7FF7EEF31E36375C7358F579EA09D283DF1F9E48293"\
"E3A764A79E9D4E3F3DD499DC79F74CFC996B5D515DBD6743CF9E3F1774EE4CB7"\
"5FF7C9F3DEE78F5DF0BC70F422F762DB25B74BAD3DAE3D477E70FDE148AF5B6F"\
"EB65F7CBED573CAE74F44DEB3BD1EFD37FFA6AC0D573D7F8D72E5D9F79BDEFC6"\
"EC1BB76E26DD1CB825BAF5F876F6ED17770AEE4CDC5D7A8F78AFFCBEDAFDEA07"\
"FA0FEA7FB4FEB165C06DE0F860C060CFC3590FEF0E09879EFE94FFD387E1D247"\
"CC47D52346238D8F9D1F1F1B0D1ABDF264CE93E1A7B2A713CFCA7E56FF79EB73"\
"ABE7DFFDE2FB4BCF58FCD8F00BF98BCFBFAE79A9F372EFABA9AF3AC723C71FBC"\
"CE793DF1A6FCADCEDB7DEFB8EFBADFC7BD1F9928FC40FE50F3D1FA63C7A7D04F"\
"F73EE77CFEFC2FF784F3FB25D29F330000067F4944415478DABD58094C944714"\
"9EDD85656529085A400B495913D46A9346894DDAC4A3BA2A566CB54A8B72552C"\
"2A022D2AD178228256299472C8214D056FA86D53A807A65A4D5AABD1A6D15A95"\
"8A3D14C55A05916365D9DDBE61DFB06F87DD4093EA9FBCFCF3CF3FF3E69B6FDE"\
"BCF76614168B853D89C7643289A282881245419A5A50E4F6F4BF19C522B55738"\
"18E3BFEA96755A1494143291FFF3E124A8405C405C515CB05E8031E19B122740"\
"77811851BAB0AD994C5249C610A220933413DD322926223DC43F695204684E84"\
"1B883B881644837574E2666C4F09E3F5069036907690C7488E9828255C4D4458"\
"A323C205295C4727911EC26552B8724F102F029A21B02604C627E40D32800CC0"\
"81B6A018255254488816F5FAE07B004EC6420029B14E41087908F200DF6D488C"\
"98A8205C8DFAB4F816C4D0AD27B0084238CE0ED4D981C4181D598A666EF8DBE9"\
"D7AFD7A7D2E5562A955D5151917129EF27D7565656BD94959D73C068347AD136"\
"414141B95F1EAA5A830350525C10A857C4FCC8942B57AFA648BA4D5B32338AA7"\
"4F9BFAD7C54B977CE2172F4D34180C5ADA263838B8A0F2C0BE2C24A61D096384"\
"14F7D7C366A53434DC5E27E34E4A5CB6FCDDD898BA13274FFAAD5ABD264FC6ED"\
"EFEFBFEDE8E19AED8418879612307DC6CC838D8D8DE368673737B7FB39D9592B"\
"D7AEDBB0AAB9B97904FDE7EBEBFB53EDD1C373A178CB81A5085206720C00BE10"\
"C087D0FE1E1E1E8FCA4A4B76AE484D0D877F0112E89F01F4122836A2B5762029"\
"165CF96E5238E99326EB773535358DEF2F6E2F2FCF1F4E9D3C1149C8363A2285"\
"BF34A74E9F0E0156BF80157B962A51A954066E4DB44EA3D1DCDBBC296D9E5E3F"\
"E52C9A3B7D84C96A9094217575752F2E5C149FDDDADA3A9036747575ED845554"\
"4B643517EF284C1D3D7AD445F8BC0DD28C63C8DBA79B9433677ED4A5AC5879A0"\
"BFB83FDCBA65C1C409E37FEB0F297C22CF64E77C1CB177DFFE02B3D9ECC29C3C"\
"0A85C23C3FE29DA4D4952BF6C0E723661FFE7A3031AB4FE1663B0444575D5DA3"\
"DFB8293D0E74AB9CE906D3B7AC5FB7B66CF69B6FD4C2E70D903B085EF814C66C"\
"3E6800EA1F5C5C523AB17467D9B6BE702F8A5BB87A59C2D26FE1F31FD42B2CD0"\
"EC2CFAF0C1862E5E92B0F9ECB973B1CE94BF3C6EDCAE92E21D1BA0D8C06C61B2"\
"D7FC98D5F171D0FE9C149091EB37A64DE4E438D31D1636F33858E07750BC0A52"\
"CFACDB8783EF64F6215990C20304B79021807B5E3F705721D1F7983540F46C4B"\
"67A4F08102DF9A175E545F7F639A33E5C386E98E1DAAAAE4FBFD26593D47A4B8"\
"21686E29C340462C8A5F3CFBFCF90B639DE90E09197B01FCCC5750BC82A4DC41"\
"F08F9D90E285A4F803EEE47EE0CE27A4504B71480A9F84F772F07AE0B157B13E"\
"1EFD94C95BB3B66FCB665627285B8BC80D844F190AA2CBFD242F7C5779C59CBE"\
"7483891F4A5C96C057946F1FEA53689EC2497147FD83C117461CABAD5DDE97EE"\
"D0D0E91F6DCDCC38C8ACDB87EB1551CDE1F6D102E0D0FC82C2DDB27352ABD54D"\
"9D9D9DDEB48E3B31087B51B131D1479835E6CBA48895E4FD86D61E3FFE2A4482"\
"4CD9A96AB5EEAD6D6DED1EB48E3BDFCC8CF4B553F5FAEF91141A7DC4027247DB"\
"9D039557EC0EC9CB2F28EF2FEEE4A4C49898E8A8F3CC96033974B46ED7AED58D"\
"8C7B2FFE6B880E8154C9A0413EBF1415166C84C8912BFF832871F3D39DA5B386"\
"0F0FE6A6FE58224544079F9BB76E3DBF2032BAA2A5A5E539DA3F3030F04FD82A"\
"FBE74746C6DDBFFFC02E72787A7A36ECDD53111D1810F007B32671224A0852BA"\
"33E5CB977FF503DCD510798264DC25454519B10BE3B264DC10817E07DC61A346"\
"BD7097D932E65EA4784C0B9DB1FFEEDDBF67D2CE3CD66F4E4F9B032B760556E3"\
"15B0A27D5D5D5DEEB48D9F9F6FCDB1238723A0D84AAAEDCC1B74E7CBBAB55A6D"\
"CBEEF2CF72753ADD23708EBE49C91F24C1AA6A1CE84E62F6662EF294EE6C76C2"\
"A4D78A1F3E6C992BE3DE51989F3076CC98E6EA9A6F02D236A5E7C11CED1243C8"\
"553E875C6509B3256F26991411253C992D25B620106EBA069CA048F37BBA32AB"\
"1314D1815A0A27458326CEF7BD0FEAD7206966664BF34532A6C46F03EA7D8084"\
"B4619DBC7DD4ACF7B94A9C7D449A2FCE490A664BF3E9B94AA4F9E6A771201413"\
"D52070772C8B3CC2C46C074271B853927F1D08BA1D276164B64847F58BC3A02B"\
"B33F65D3444F29E93632DB8150E87D2AA764015C9C64C5D5015D497A925531FB"\
"53AEB83AA027590BEB7DD5E0E2A0AFD02F1E25C144C7168BF254AE0E2831F482"\
"C9D9458F7C5944FFC9174D8C3DA14BA67F0133893470B75DAFB1000000004945"\
"4E44AE426082";
//---------------------------------------------------------------------------
static const COLORREF
CLR_TXT_HOT = RGB(171, 186, 207), //d5dde8
CLR_BKG_EXTERNAL_ROUND = RGB(107, 115, 126),
CLR_BKG_EXTERNAL_FRMAE = RGB(145, 156, 170),
CLR_BKG_INTERNAL = RGB(65, 70, 77 ),
CLR_BKG_INTERNAL_LINE_HIG = RGB(118, 126, 134),
CLR_BKG_INTERNAL_LINE_BLACK = RGB(32, 36, 41 );
//---------------------------------------------------------------------------
static inline void ValidCtrCheck(TGeneralDialogPanel *)
{
new TGeneralDialogPanel(NULL);
}
//---------------------------------------------------------------------------
#define PNGCLOSE_LEFT Width - m_imgClose->Width/3 - 2
#define PNGCLOSE_TOP 3
__fastcall TGeneralDialogPanel::TGeneralDialogPanel(TComponent* Owner)
: TPanel(Owner)
{
Color = CLR_BKG_INTERNAL;
FOnCanceled = NULL;
m_imgClose = new TPngImage();
TMemoryStream *pngStream = new TMemoryStream();
String pngData = pngImage;
int length = pngData.Length();
const char *temppngImage = pngImage;
unsigned char buffer[10000];
for(int i=0;i<length;i++){
sscanf(temppngImage, "%02hhx", &buffer[i]);
temppngImage += 2;
}
pngStream->Position = 0;
pngStream->WriteBuffer(buffer, length);
pngStream->Position = 0;
m_imgClose->LoadFromStream(pngStream);
delete pngStream;
m_btnClose = new CBTPNButton(this);
m_btnClose->SetStateCount( 3 );
m_btnClose->SetPngImg( m_imgClose );
m_btnClose->SetColor( Color );
m_btnClose->Left = PNGCLOSE_LEFT;
m_btnClose->Top = PNGCLOSE_TOP;
m_btnClose->Hint = "关闭";
m_btnClose->ModalResult = System::Uitypes::mrCancel;
m_btnClose->Parent = this;
m_btnClose->OnClick = CloseClick;
Canvas->Font->Size = 9;
}
//---------------------------------------------------------------------------
__fastcall TGeneralDialogPanel::~TGeneralDialogPanel()
{
if(m_imgClose)
delete m_imgClose;
if(m_btnClose)
delete m_btnClose;
}
//---------------------------------------------------------------------------
namespace Generaldialogpanel
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TGeneralDialogPanel)};
RegisterComponents(L"Samples", classes, 0);
}
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::CloseClick(TObject *Sender)
{
if( FOnCanceled )
FOnCanceled( this );
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::WMEraseBkgnd(Winapi::Messages::TWMEraseBkgnd &Message)
{
TRect rect = GetClientRect();
TRect rectFill = rect;
TCanvas* tempCanvas = new TCanvas;
tempCanvas->Handle = Message.DC;
rectFill.Top = rectFill.Top + LEN_BKG_EXTERNAL_ROUND;
rectFill.Left = rectFill.Left + LEN_BKG_EXTERNAL_ROUND;
rectFill.Right = rectFill.Right - LEN_BKG_EXTERNAL_ROUND;
rectFill.Bottom = rectFill.Bottom - LEN_BKG_EXTERNAL_ROUND;
tempCanvas->Brush->Color = CLR_BKG_INTERNAL;
tempCanvas->FillRect( rectFill );
delete tempCanvas;
Message.Result = true;
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::WMSize(Winapi::Messages::TWMSize &Message)
{
DefaultHandler( &Message );
m_btnClose->Left = PNGCLOSE_LEFT;
m_btnClose->Top = PNGCLOSE_TOP;
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::CreateWnd()
{
Vcl::Extctrls::TPanel::CreateWnd();
Canvas->Font->Assign(Font);
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::Paint(void)
{
//==========画圆角
Canvas->Pen->Color = CLR_BKG_EXTERNAL_ROUND;
int X,Y;
//上面的
Y = 0;
X = 0;
Canvas->Pixels[X][Y] = Canvas->Pen->Color;
X = Width - LEN_BKG_EXTERNAL_ROUND;
Canvas->Pixels[X][Y] = Canvas->Pen->Color;
//下面的
Y = Height - LEN_BKG_EXTERNAL_ROUND;
X = 0;
Canvas->Pixels[X][Y] = Canvas->Pen->Color;
X = Width - LEN_BKG_EXTERNAL_ROUND;
Canvas->Pixels[X][Y] = Canvas->Pen->Color;
//===========画边框
Canvas->Pen->Color = CLR_BKG_EXTERNAL_FRMAE;
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, 0 );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, 0 );
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
Canvas->MoveTo( 0, LEN_BKG_EXTERNAL_FRMAE );
Canvas->LineTo( 0, Height-LEN_BKG_EXTERNAL_FRMAE );
Canvas->MoveTo( Width-LEN_BKG_EXTERNAL_FRMAE, LEN_BKG_EXTERNAL_FRMAE );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, Height-LEN_BKG_EXTERNAL_FRMAE );
//===========画分割线
int iLineHeight = LEN_BKG_INTERNAL_LINE;
Canvas->Pen->Color = CLR_BKG_INTERNAL_LINE_HIG;
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight );
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight+2 );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight+2 );
Canvas->Pen->Color = CLR_BKG_INTERNAL_LINE_BLACK;
Canvas->MoveTo( LEN_BKG_EXTERNAL_FRMAE, iLineHeight+1 );
Canvas->LineTo( Width-LEN_BKG_EXTERNAL_FRMAE, iLineHeight+1 );
//画标题
Canvas->Font->Color = CLR_TXT_HOT;
Canvas->Brush->Style = bsClear;
TSize size = Canvas->TextExtent( Caption );
X = LEN_BKG_EXTERNAL_FRMAE + ( Width - size.Width )/2,
Y = LEN_BKG_EXTERNAL_FRMAE + ( LEN_BKG_INTERNAL_LINE-size.Height )/2;
Canvas->TextOut( X, Y, Caption );
}
//---------------------------------------------------------------------------
void __fastcall TGeneralDialogPanel::MouseDown(System::Uitypes::TMouseButton Button, System::Classes::TShiftState Shift, int X, int Y)
{
if (X > Left + 10 && X < Left + Width - 50 && Y < Top + LEN_BKG_INTERNAL_LINE){
ReleaseCapture();
Parent->Perform(WM_NCLBUTTONDOWN,HTCAPTION, 0);
}else{
Vcl::Extctrls::TPanel::MouseDown(Button, Shift, X, Y);
}
}
//---------------------------------------------------------------------------