//--------------------------------------------------------------------------- #include #pragma hdrstop //--------------------------------------------------------------------------- #include "MessageDialogBox_F.h" #include "Common.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TMessageDialog *MessageDialog; //--------------------------------------------------------------------------- __fastcall TMessageDialog::TMessageDialog(TComponent* Owner) : TForm(Owner) { // } //--------------------------------------------------------------------------- void __fastcall TMessageDialog::FormCreate(TObject *Sender) { bFirst = true; } //--------------------------------------------------------------------------- void __fastcall TMessageDialog::FormDestroy(TObject *Sender) { if (DialogButtons) { for (int i = 0; i < DialogButtons->Count; i++) { TBitBtn *TempBitBtn; TempBitBtn = (TBitBtn *)FindComponent(DialogButtons->Strings[i]); if (TempBitBtn) { delete TempBitBtn; TempBitBtn = NULL; } } DialogButtons->Clear(); delete DialogButtons; DialogButtons = NULL; } } //--------------------------------------------------------------------------- void __fastcall TMessageDialog::FormActivate(TObject *Sender) { if (bFirst) { TBitBtn *TempBitBtn; TempBitBtn = (TBitBtn *)FindComponent(DlgDefaultBtn); TempBitBtn->SetFocus(); bFirst = false; } } //--------------------------------------------------------------------------- void __fastcall TMessageDialog::InitForm(String DlgMsg, String DlgCaption, String DlgButtons, String DlgDefaultBtn) { // ¹öưÀÇ ¼ö°¡ ¸¹°Å³ª ¸Þ½ÃÁöÀÇ ±æÀ̰¡ Àû¾î¼­, lbMessage º¸´Ù ¹öưÀÇ ±æÀ̰¡ ±æ¶§ÀÇ °è»êÀº ÇÏÁö ¾Ê¾Ò´Ù. // ³ªÁß¿¡ º¸¿ÏÇØ¾ßÇÒ °ÍÀ¸·Î º¸Àδ٠- by monkman (2004.06.14) int nLeft = 0, nWidth = 0, MessageWidth = 0, ButtonMaxWidth = 0, ButtonWidth = 8; // ButtonWidth = 10Àº Gap int Cnt; bool Continued; String TempText; TBitBtn *TempBitBtn; TImage *imageTemp; // Button ¾²¿©Áö´Â CaptionÀÇ ³Êºñ, ³ôÀ̸¦ Pixel·Î ±¸Çϴµ¥ »ç¿ëÇÑ´Ù DialogButtons = new TStringList; imageTemp = new TImage(this); if (!DlgMsg.IsEmpty()) { lbMessage->Caption = DlgMsg; } else { lbMessage->Caption = ""; } if (!DlgCaption.IsEmpty()) { Caption = DlgCaption; } else { Caption = "Message Box Dialog"; } // ·¹À̺íÀÇ ±æÀÌ ±¸Çϱâ MessageWidth = lbMessage->Left + lbMessage->Width + 8; // ¹öư »ý¼º (¹öưÀÇ Width = 63, Height = 23 À¸·Î °íÁ¤) Cnt = 1; Continued = true; if (!DlgButtons.IsEmpty()) { while (Continued) { TempText = StringTokenParse(&DlgButtons, &Continued); if (!TempText.IsEmpty()) { TempBitBtn = new TBitBtn(this); TempBitBtn->Caption = TempText; TempBitBtn->Top = lbMessage->Top + lbMessage->Height + 30; TempBitBtn->Left = 0; TempBitBtn->Width = imageTemp->Canvas->TextWidth(TempText) + 8; TempBitBtn->Height = 23; TempBitBtn->ModalResult = Cnt; TempBitBtn->Parent = this; TempBitBtn->Name = RemoveAmpersand(TempText); TempBitBtn->Tag = Cnt; TempBitBtn->OnClick = btClick; DialogButtons->Add(TempBitBtn->Name); ButtonMaxWidth = max(TempBitBtn->Width, ButtonMaxWidth); Cnt++; } } } // Button±æÀÌ¿¡ Gap ³Ö±â ButtonWidth += ((ButtonMaxWidth+8)*DialogButtons->Count); // ¹öưÀÇ ±æÀÌ ±¸Çϱâ if (MessageWidth < ButtonWidth) { ClientWidth = ButtonWidth; nLeft = 8; } else { ClientWidth = MessageWidth; nLeft = 8 + (MessageWidth - ButtonWidth) / 2; } ClientHeight = TempBitBtn->Top + TempBitBtn->Height + 8; // ¸¶Áö¸· ¹öưÀ¸·Î °è»ê // ¹öư °£°Ý Á¶Àý for (int i = 0; i < DialogButtons->Count; i++) { TempBitBtn = (TBitBtn *)FindComponent(DialogButtons->Strings[i]); TempBitBtn->Width = ButtonMaxWidth; TempBitBtn->Left = nLeft; nLeft += (ButtonMaxWidth + 8); } if (imageTemp) { delete imageTemp; imageTemp = NULL; } } //--------------------------------------------------------------------------- String __fastcall TMessageDialog::StringTokenParse(String *Text, bool *Continued) { String TokenText; for (int i = 1; i < Text->Length(); i++) { if (Text->SubString(i, 1) == "|") { TokenText = Text->SubString(1, i-1); *Text = Text->SubString(i+1, Text->Length()); break; } if (i == Text->Length()-1) { TokenText = Text->SubString(1, Text->Length()); *Text = Text->SubString(1, Text->Length()); *Continued = false; } } return TokenText; } //--------------------------------------------------------------------------- String __fastcall TMessageDialog::RemoveAmpersand(String Text) { String TokenText; TokenText = Text; for (int i = 1; i < Text.Length(); i++) { if (Text.SubString(i, 1) == "&") { TokenText = Text.SubString(1, i-1) + Text.SubString(i+1, Text.Length()); break; } } // º¯¼ö¸íÀ¸·Î »ç¿ëÇÒ ¼ö ¾ø´Â ¹®ÀÚµéÀ» ±³Ã¼ SubStrReplace(TokenText, " ", "_"); SubStrReplace(TokenText, "\\", "_"); SubStrReplace(TokenText, "/", "_"); SubStrReplace(TokenText, ":", "_"); SubStrReplace(TokenText, "*", "_"); SubStrReplace(TokenText, "?", "_"); SubStrReplace(TokenText, "<", "_"); SubStrReplace(TokenText, ">", "_"); return TokenText; } //--------------------------------------------------------------------------- void __fastcall TMessageDialog::btClick(TObject *Sender) { TBitBtn *TempBitBtn; TempBitBtn = (TBitBtn *)Sender; TagNum = TempBitBtn->Tag; } //--------------------------------------------------------------------------- // ¸Þ½ÃÁö¹Ú½º´ÙÀ̾ó·Î±× - by monkman (2004.06.08) - with celberus int __fastcall MessageDialogFunc(String DlgMsg, String DlgCaption, String DlgButtons, String DlgDefaultBtn) { int TagNum; TagNum = 0; MessageDialog = new TMessageDialog(Application); MessageDialog->InitForm(DlgMsg, DlgCaption, DlgButtons, DlgDefaultBtn); MessageDialog->DlgDefaultBtn = DlgDefaultBtn; MessageDialog->ShowModal(); TagNum = MessageDialog->TagNum; delete MessageDialog; return TagNum; } //---------------------------------------------------------------------------