C++ Builder Snippets  

Benutzerdefinierte Meldungsdialoge (MessageBoxes) erzeugen:

Windows bietet dem Programmierer eine ganze Reihe Standard-Meldungsdialoge (MessageBoxes), die im C++ Builder mit Hilfe der VCL-Funktion Application->MessageBox() oder der API-Funktion MessageBox() zur Programmlaufzeit angezeigt werden können. Die Formatierung des Textes und die Schaltflächen-Beschriftungen der Standard-Meldungsfenster lassen sich allerdings nicht verändern.

Manchmal ist es allerdigs sinnvoll oder gar erforderlich eine "selbstkreierte" MessageBox zu verwenden. Dazu kann z.B. die VCL-Funktion CreateMessageDialog() eingesetzt werden:
Screenshot


//---------------------------------------------------------------------------
// Eventhandler für OnClick-Ereignis der Schaltfläche
// "Benutzerdefinierte MessageBox Anzeigen"
//---------------------------------------------------------------------------
void __fastcall TformMain::btnMgsBox1Click(TObject *Sender)
{
  TIcon* MsgIcon = NULL; // Für das Symbol in der MessageBox

  // MessageBox mit Buttons "Ja", "Nein" und "Wiederholen" erzeugen:
  // (aufgrund von mtConfirmation wird ein Fragezeichen als Symbol
  // verwendet und als Caption der String "Bestätigung:". Diese
  // Daten werden anschliessend mit anderen Werten überschrieben)
  // Alle in Frage kommenden CreateMessageDialog()-Parameter sind in der
  // C++ Builder Online-Hilfe ausführlich beschrieben.

  TForm* MsgDlg = CreateMessageDialog("Wählen Sie eine Darstellungsart:",
    mtConfirmation, TMsgDlgButtons() << mbYes << mbNo << mbRetry);

  if(MsgDlg != NULL)
  {
    // Caption der MessageBox ändern:
    MsgDlg->Caption = "Diagrammtyp wählen:";

    // Button-Texte verändern:
    TButton* btnYes = dynamic_cast<TButton *>(MsgDlg->FindComponent("Yes"));
    btnYes->Caption = "&Linien";
    TButton* btnNo = dynamic_cast<TButton *>(MsgDlg->FindComponent("No"));
    btnNo->Caption = "&Balken";
    TButton* btnRetry = dynamic_cast<TButton *>(MsgDlg->FindComponent("Retry"));
    btnRetry->Caption = "&XY";

    // Schriftart und -Farbe des Message-Labels verändern:
    TLabel* lblMsgText =
      dynamic_cast<TLabel *>(MsgDlg->FindComponent("Message"));
    lblMsgText->Font->Color = clBlue;
    lblMsgText->Font->Style = lblMsgText->Font->Style << fsBold;

    // Falls Symboldatei "chart.ico" im Programmverzeichnis vorhanden,
    // TIcon erzeugen, chart.ico laden und das Standard-Symbol (in diesem
    // Fall ein Fragezeichen) ersetzen:
    if(FileExists(ExtractFilePath(ParamStr(0)) + "chart.ico"))
    {
      MsgIcon = new TIcon;
      if (MsgIcon != NULL)
      {
        MsgIcon->LoadFromFile(ExtractFilePath(ParamStr(0)) + "chart.ico");
        TImage* img = dynamic_cast<TImage *>(MsgDlg->FindComponent("Image"));
        if (img) img->Picture->Icon = MsgIcon;
      }
    }

    // MessageBox Modal anzeigen:
    int Rslt = MsgDlg->ShowModal();

    // Speicher aufräumen:
    if(MsgIcon != NULL) { delete MsgIcon; MsgIcon = NULL; }
    delete MsgDlg; MsgDlg = NULL;

    // Rückgabewert der MessageBox auswerten:
    if(Rslt == mrYes) ShowMessage("Liniendiagramm gewählt");
    else if(Rslt == mrNo) ShowMessage("Balkendiagramm gewählt");
    else if(Rslt == mrRetry) ShowMessage("XY-Diagramm gewählt");
  }
}
//---------------------------------------------------------------------------

  Download BCB4
Projekt-Quellcode
Download
Demo-Exe

© '99-2000 by S. Kreutzmann