...realize an input dialog with combobox?

Author: Schatzl Reinhard

Category: VCL

{ Input ComboBox dialog }
//einen Input Dialog mit ComboBox realisieren, like InputBox,-Query Function
//an input dialog with combo box realize, like input box,-Query Function

function InputCombo(const ACaption, APrompt: stringconst AList: TStrings): string;

  function GetCharSize(Canvas: TCanvas): TPoint;
  var
    
I: Integer;
    Buffer: array[0..51] of Char;
  begin
    for 
I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
    for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
    GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
    Result.X := Result.X div 52;
  end;  
  
var
  
Form: TForm;
  Prompt: TLabel;
  Combo: TComboBox;
  DialogUnits: TPoint;
  ButtonTop, ButtonWidth, ButtonHeight: Integer;
begin
  
Result := '';
  Form   := TForm.Create(Application);
  with Form do
    try
      
Canvas.Font := Font;
      DialogUnits := GetCharSize(Canvas);
      BorderStyle := bsDialog;
      Caption     := ACaption;
      ClientWidth := MulDiv(180, DialogUnits.X, 4);
      Position    := poScreenCenter;
      Prompt      := TLabel.Create(Form);
      with Prompt do
      begin
        
Parent   := Form;
        Caption  := APrompt;
        Left     := MulDiv(8, DialogUnits.X, 4);
        Top      := MulDiv(8, DialogUnits.Y, 8);
        Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
        WordWrap := True;
      end;
      Combo := TComboBox.Create(Form);
      with Combo do
      begin
        
Parent := Form;
        Style  := csDropDownList;
        //für Eingabemöglichkeit in Combo verwende
        //For input possibility in combo uses
        //Style := csDropDown;
        
Items.Assign(AList);
        ItemIndex := 0;
        Left      := Prompt.Left;
        Top       := Prompt.Top + Prompt.Height + 5;
        Width     := MulDiv(164, DialogUnits.X, 4);
      end;
      ButtonTop    := Combo.Top + Combo.Height + 15;
      ButtonWidth  := MulDiv(50, DialogUnits.X, 4);
      ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
      with TButton.Create(Form) do
      begin
        
Parent      := Form;
        Caption     := 'OK';
        ModalResult := mrOk;
        default     := True;
        SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
          ButtonHeight);
      end;
      with TButton.Create(Form) do
      begin
        
Parent      := Form;
        Caption     := 'Abbrechen';
        ModalResult := mrCancel;
        Cancel      := True;
        SetBounds(MulDiv(92, DialogUnits.X, 4), Combo.Top + Combo.Height + 15,
          ButtonWidth, ButtonHeight);
        Form.ClientHeight := Top + Height + 13;
      end;
      if ShowModal = mrOk then
      begin
        
Result := Combo.Text;
      end;
    finally
      
Form.Free;
    end;
end;

//Beispiel
//Example
procedure TForm1.Button1Click(Sender: TObject);
var
  
List: TStringList;
begin
  
List := TStringList.Create;
  try
    
List.Add('Auswahl1');
    List.Add('Auswahl2');
    List.Add('Auswahl3');

    //Beispielaufruf der Funktion
    //Example call of the function
    
Label1.Caption := InputCombo('Input Combo', 'Caption', List);
  finally
    
List.Free;
  end;
end;


 

printed from
www.swissdelphicenter.ch
developers knowledge base