C++ Builder Snippets  


InputQuery-Eingabefeld mit Passworteingabeoption und Unterstützung von langen Texten:
 
//---------------------------------------------------------------------------
// Mit ExtInputQuery() kann ein Dialogfeld angezeigt werden, in dessen
// Eingabefeld der Benutzer einen String eingeben kann. Der Parameter
// slCaption enthält den Titel des Dialogfeldes. Der Parameter slPrompt ist
// der Text, der den Benutzer zur Eingabe auffordert. Der Parameter slValue
// gibt den String an, der beim Öffnen des Dialogfeldes angezeigt wird.
// Gibt der Benutzer einen String in das Eingabefeld ein und klickt auf OK,
// wird dem Parameter slValue der neue Wert zugewiesen.
// ExtInputQuery gibt true zurück, wenn der Benutzer auf OK klickt, und false,
// wenn der Benutzer auf Abbrechen klickt oder die ESC-Taste drückt.
//---------------------------------------------------------------------------
// ExtInputQuery() etspricht der VCL-Funktion InputQuery() bis auf
// folgende Merkmale:
//
// - Parameter blPasswordChar legt fest, ob der eingegbene Text angezeigt
//   werden soll. Wird false übergeben, werden anstatt der Zeichen '*'
//   angezeigt.
// - Die Grösse des Eigabefeldes wird ggf. automatisch an die Länge des
//   im Parameter slPrompt übergebenen Textes angepasst, längere Texte
//   werden (falls nötig) mehrzeilig angezeigt.
//---------------------------------------------------------------------------
// Beispielaufruf:
//
// AnsiString slPrompt = "Bitte geben Sie das Konfigurationspasswort ein:";
// AnsiString slValue = EmptyStr;
// if(ExtInputQuery("Passwortabfrage", slPrompt, slValue, true))
//   if(slValue == "8723jkk&sd")
//     ShowMessage("Passwort i.O.");
//---------------------------------------------------------------------------
#include <math.hpp>

bool ExtInputQuery(AnsiString slCaption, AnsiString slPrompt,
  AnsiString &slValue, bool blPasswordChar)
{
  bool blResult = false;               // für den Rückgabewert
  AnsiString slOk = "OK";              // Caption des OK-Buttons
  AnsiString slCancel = "Abbrechen";   // Caption des Abbrechen-Buttons
  int ilHorMargins = 16;               // Horizontale Abstände der
                                       // Steuerlemente zum Formularrand
  int ilVertMargins = 10;              // Vertikale Abstände der
                                       // Steuerlemente zum Formularrand
                                       // und untereinander
  int ilMinEditWidth = 220;            // Minimale Breite des Eingabe-TEdit

  // Maximale Breite der Eingabebox (60% der Bildschirmbreite)
  int ilMaxWidth = Ceil(double(Screen->Width)*0.6);

  TForm* pForm = NULL;
  try
  {
    // Formular dynamisch erzeugen und initialisieren:
    pForm = new TForm(Application);
    pForm->BorderStyle = bsDialog;
    pForm->Caption = slCaption;
    int ilFormWidth = pForm->Canvas->TextWidth(slPrompt) > ilMinEditWidth ?
      pForm->Canvas->TextWidth(slPrompt)+2*ilHorMargins :
      ilMinEditWidth+2*ilHorMargins;
    pForm->ClientWidth = ilFormWidth > ilMaxWidth ? ilMaxWidth : ilFormWidth;
    pForm->Position = poScreenCenter;

    // Prompt-Label dynamisch erzeugen und initialisieren:
    TLabel* pPrompt = new TLabel(pForm);
    pPrompt->Parent   = pForm;
    pPrompt->AutoSize = true;
    pPrompt->WordWrap = true;
    pPrompt->Width=pForm->ClientWidth-2*ilHorMargins;
    pPrompt->Left     = ilHorMargins;
    pPrompt->Top      = ilVertMargins;
    pPrompt->Caption  = slPrompt;

    // Eingabe-TEdit dynamisch erzeugen und initialisieren:
    TEdit* pEdit = new TEdit(pForm);
    pEdit->Parent = pForm;
    pEdit->Left = pPrompt->Left;
    pEdit->Top = pPrompt->Height+pPrompt->Top+ilVertMargins;
    pEdit->Width = pForm->ClientWidth-2*ilHorMargins;
    pEdit->PasswordChar = blPasswordChar ? '*' : 0;
    pEdit->Text = slValue;
    pEdit->SelectAll();

    // Schaltflächen erzeugen und initialisieren:
    int ilBtnTop = pEdit->Top+pEdit->Height+ilVertMargins;
    int ilBtnWidth = (ilMinEditWidth-2*ilHorMargins)/2-ilHorMargins;
    int ilBtnHeight = pForm->Canvas->TextHeight(slOk)+
      Ceil(1.2*double(ilVertMargins));
    TButton* pBtn = new TButton(pForm);
    pBtn->Parent = pForm;
    pBtn->Caption = slOk;
    pBtn->ModalResult = mrOk;
    pBtn->Default = true;
    pBtn->SetBounds(pForm->ClientWidth/2-ilHorMargins-ilBtnWidth,
      ilBtnTop, ilBtnWidth, ilBtnHeight);

    pBtn = new TButton(pForm);
    pBtn->Parent = pForm;
    pBtn->Caption = slCancel;
    pBtn->ModalResult = mrCancel;
    pBtn->Cancel = true;
    pBtn->SetBounds(pForm->ClientWidth/2+ilHorMargins, ilBtnTop,
      ilBtnWidth, ilBtnHeight);

    pForm->ClientHeight = pBtn->Top+pBtn->Height+ilVertMargins;;

    // Formular anzeigen:
    if(pForm->ShowModal() == mrOk)
    {
      slValue = pEdit->Text;
      blResult = true;
    }
  }
  __finally
  {
    if(pForm != NULL) delete pForm;
    return blResult;
  }
}


© '99-2001 by S. Kreutzmann