首页  编辑  

组合输入框

Tags: /超级猛料/VCL/Common.Dialog.通用对话框和控件/   Date Created:

组合输入框

function InputCombo(const ACaption, APrompt: string; const 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;

img_16618.bmp (137.6KB)