mirror of
https://gitlab.com/freepascal.org/lazarus/lazarus.git
synced 2025-05-29 09:43:16 +02:00
102 lines
2.7 KiB
PHP
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
|