//--------------------------------------------------------------------------- #include #include #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;iPosition = 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); } } //---------------------------------------------------------------------------