



Esta dica mostra como criar uma janela para ter o efeito de InputBox
utilizando um ComboBox.
Os uses são as units normais de um Form com botões e Combos.
Função:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | 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; // Caso o item possa ser digitado, altere aqui para csDropDowns 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 := 'Cancelar'; 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; |
Exemplo de Uso:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | procedure Tfrmproduto_pedido.BtnImprimirClick(Sender: TObject); var List: TStringList; vResult : String; indice : Integer; begin try List := TStringList.Create; List.Add('Sem Preço'); List.Add('Com Preço'); //Rseultado string do item selecionado vResult := InputCombo('Seleciona o tipo de relatório', 'Descrição:', List); // Se quiser o indice selecionado por fazer o seguinte indice := List.IndexOf(vResult); finally List.Free; end; // Testando o retorno string if (vResult = 'Sem Preço') then begin ShowMessage('Sem Preço'); end; if (vResult = 'Com Preço') then begin ShowMessage('Com Preço'); end; // Testando o retorno Integer ShowMessage( List[ indice ] ); end; |
// Baseado em uma dica do site Planeta Delphi