lazarus/lcl/include/inputdialog.inc

102 lines
2.7 KiB
PHP

{%MainUnit ../dialogs.pp}
{
*****************************************************************************
This file is part of the Lazarus Component Library (LCL)
See the file COPYING.modifiedLGPL.txt, included in this distribution,
for details about the license.
*****************************************************************************
}
function ShowInputDialog(const InputCaption, InputPrompt : String;
MaskInput : Boolean; var Value : String) : Boolean;
function ActiveMonitor: TMonitor; inline;
begin
if Screen.ActiveCustomForm <> nil then
Result := Screen.ActiveCustomForm.Monitor
else
if Application.MainForm <> nil then
Result := Application.MainForm.Monitor
else
Result := Screen.PrimaryMonitor;
end;
var
Form: TForm;
Prompt: TLabel;
Edit: TEdit;
MinEditWidth: integer;
AMonitor: TMonitor;
begin
Result := False;
Form := TForm(TForm.NewInstance);
Form.DisableAutoSizing{$IFDEF DebugDisableAutoSizing}('ShowInputDialog'){$ENDIF};
Form.CreateNew(nil, 0);
with Form do
begin
PopupMode := pmAuto;
BorderStyle := bsDialog;
Caption := InputCaption;
Position := poScreenCenter;
Prompt := TLabel.Create(Form);
with Prompt do
begin
Parent := Form;
Caption := InputPrompt;
Align := alTop;
AutoSize := True;
end;
Edit := TEdit.Create(Form);
with Edit do
begin
Parent := Form;
Top := Prompt.Height;
Align := alTop;
BorderSpacing.Top := 3;
AMonitor := ActiveMonitor;
// check that edit is smaller than our monitor, it must be smaller at least
// by 6 * 2 pixels (spacing from window borders) + window border
MinEditWidth := Min(AMonitor.Width - 20, Max(260, AMonitor.Width div 4));
Constraints.MinWidth := MinEditWidth;
Text := Value;
TabStop := True;
if MaskInput then
begin
EchoMode := emPassword;
PasswordChar := '*';
end else
begin
EchoMode := emNormal;
PasswordChar := #0;
end;
TabOrder := 0;
end;
with TButtonPanel.Create(Form) do
begin
Top := Edit.Top + Edit.Height;
Parent := Form;
ShowBevel := False;
ShowButtons := [pbOK, pbCancel];
Align := alTop;
end;
ChildSizing.TopBottomSpacing := 6;
ChildSizing.LeftRightSpacing := 6;
AutoSize := True;
// upon show, the edit control will be focused for editing, because it's
// the first in the tab order
Form.EnableAutoSizing{$IFDEF DebugDisableAutoSizing}('ShowInputDialog'){$ENDIF};
if ShowModal = mrOk then
begin
Value := Edit.Text;
Result := True;
end;
Form.Free;
end;
end;
// included by dialogs.pp