JarUnPacker/prereq/ANB ST CP/data/ANBInputBox.pas
2023-02-02 12:02:14 +03:00

402 lines
14 KiB
ObjectPascal

unit ANBInputBox;
{$MODE Delphi}
{$codepage UTF8}
interface
uses LCLIntf, LCLType, SysUtils, Graphics, Controls, Forms, StdCtrls, Classes, Types, MaskEdit, Spin, VCLEx;
function ShowInputBox (const ACaption, APrompt, ADefault: String; var isAccept: Boolean): String; OVERLOAD; STDCALL;
function ShowInputBox (const ACaption, APrompt, ADefault: String; const ABtnCaptions: array of String; var isAccept: Boolean): String; OVERLOAD; STDCALL;
function ShowInputBox (const ACaption, APrompt, ADefault: String; const ABtnCaptions: array of String; const AMaxLength: IntEx; var isAccept: Boolean): String; OVERLOAD; STDCALL;
function ShowPasswordInputBox (const ACaption, APrompt, ADefault, APassword: String; var isAccept, isPasswordConfirmed: Boolean; const APasswordChar: Char = '*'): String; OVERLOAD; STDCALL;
function ShowPasswordInputBox (const ACaption, APrompt, ADefault, APassword: String; var isAccept, isPasswordConfirmed: Boolean; const ABtnCaptions: array of String; const APasswordChar: Char = '*'): String; OVERLOAD; STDCALL;
function ShowComboBox (const ACaption, APrompt: String; var Items: TStringList; const ADefaultIndex: IntEx; var isAccept: Boolean): IntEx; OVERLOAD; STDCALL;
function ShowComboBox (const ACaption, APrompt: String; var Items: TStringList; const ADefaultIndex: IntEx; const ABtnsCaption: array of String; var isAccept: Boolean): IntEx; OVERLOAD; STDCALL;
function ShowMaskedBox (const ACaption, APrompt, AMask, ADefault: String; const isIgnoreMask: Boolean; var isAccept: Boolean): String; OVERLOAD; STDCALL;
function ShowMaskedBox (const ACaption, APrompt, AMask, ADefault: String; const isIgnoreMask: Boolean; const ABtnCaptions: array of String; const AMaxLength: IntEx; var isAccept: Boolean): String; OVERLOAD; STDCALL;
function ShowSpinedBox (const ACaption, APrompt: String; const ADefault: IntEx; var isAccept: Boolean): IntEx; STDCALL; OVERLOAD;
function ShowSpinedBox (const ACaption, APrompt: String; const ADefault, AMinValue, AMaxValue: IntEx; const ABtnCaptions: array of String; var isAccept: Boolean): IntEx; STDCALL; OVERLOAD;
const OkBtnDefCaption: String = '&Ok';
CancelBtnDefCaption: String = 'C&ancel';
implementation
function MyGetAveCharSize(Canvas: TCanvas): TPoint;
var I: IntEx;
Buffer: array[0..51] of Char;
begin
with Result do
begin
x:= 0;
y:= 0;
end;
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;
function MyInputQuery(const ACaption, APrompt: String; var Value: String; var APasswordConfirmed: Boolean; const APassword: Boolean; const ANeedPassword: String; const APasswordChar: Char; const AMaxLength: IntEx; const ABtnsCaption: array of String): Boolean;
var Form: TForm;
Prompt: TLabel;
Edit: TEdit;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: IntEx;
begin
Result:= false;
Form:= TForm.Create(Application);
with Form do
try
Canvas.Font:= Font;
DialogUnits:= MyGetAveCharSize(Canvas);
BorderStyle:= bsDialog;
Caption:= ACaption;
ClientWidth:= MulDiv(180, DialogUnits.X, 4);
Position:= poScreenCenter;
Color:= clBtnFace;
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;
Edit:= TEdit.Create(Form);
with Edit do
begin
Parent:= Form;
Left:= Prompt.Left;
Top:= Prompt.Top + Prompt.Height + 5;
Width:= MulDiv(164, DialogUnits.X, 4);
MaxLength:= AMaxLength;
if APassword then
PasswordChar:= APasswordChar;
Text:= Value;
SelectAll;
end;
ButtonTop:= Edit.Top + Edit.Height + 15;
ButtonWidth:= MulDiv(50, DialogUnits.X, 4);
ButtonHeight:= MulDiv(14, DialogUnits.Y, 8);
with TButton.Create(Form) do
begin
Parent:= Form;
Caption:= ABtnsCaption[0];
ModalResult:= mrOk;
Cursor:= crHandPoint;
Default:= True;
SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth, ButtonHeight);
end;
with TButton.Create(Form) do
begin
Parent:= Form;
Caption:= ABtnsCaption[1];
ModalResult:= mrCancel;
Cursor:= crHandPoint;
Cancel:= True;
SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15, ButtonWidth, ButtonHeight);
Form.ClientHeight:= Top + Height + 13;
end;
if ShowModal = mrOk then
begin
Value:= Edit.Text;
if APassword then
if Value = ANeedPassword then
APasswordConfirmed:= true
else
APasswordConfirmed:= false;
Result:= True;
end;
finally
Form.Free;
end;
end;
function MyInputComboQuery(const ACaption, APrompt: String; const Values: TStringList; const DefIndex: IntEx; var SelectedIndex: IntEx; const ABtnsCaption: array of String): Boolean;
var Form: TForm;
Prompt: TLabel;
Combo: TComboBox;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: IntEx;
begin
Result:= false;
Form:= TForm.Create(Application);
with Form do
try
Canvas.Font:= Font;
DialogUnits:= MyGetAveCharSize(Canvas);
BorderStyle:= bsDialog;
Caption:= ACaption;
ClientWidth:= MulDiv(180, DialogUnits.X, 4);
Position:= poScreenCenter;
Color:= clBtnFace;
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;
Left:= Prompt.Left;
Top:= Prompt.Top + Prompt.Height + 5;
Width:= MulDiv(164, DialogUnits.X, 4);
Style:= csDropDownList;
Items.Assign(Values);
if DefIndex <= Items.Count - 1 then
ItemIndex:= DefIndex
else
ItemIndex:= -1;
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:= ABtnsCaption[0];
ModalResult:= mrOk;
Cursor:= crHandPoint;
Default:= True;
SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth, ButtonHeight);
end;
with TButton.Create(Form) do
begin
Parent:= Form;
Caption:= ABtnsCaption[1];
ModalResult:= mrCancel;
Cursor:= crHandPoint;
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
SelectedIndex:= Combo.ItemIndex;
Result:= True;
end;
finally
Form.Free;
end;
end;
function MyInputMaskQuery(const ACaption, APrompt, AMask: String; var Value: String; const isIgnoreMask: Boolean; const AMaxLength: IntEx; const ABtnsCaption: array of String): Boolean;
var Form: TForm;
Prompt: TLabel;
Edit: TMaskEdit;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: IntEx;
begin
Result:= false;
Form:= TForm.Create(Application);
with Form do
try
Canvas.Font:= Font;
DialogUnits:= MyGetAveCharSize(Canvas);
BorderStyle:= bsDialog;
Caption:= ACaption;
ClientWidth:= MulDiv(180, DialogUnits.X, 4);
Position:= poScreenCenter;
Color:= clBtnFace;
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;
Edit:= TMaskEdit.Create(Form);
with Edit do
begin
Parent:= Form;
Left:= Prompt.Left;
Top:= Prompt.Top + Prompt.Height + 5;
Width:= MulDiv(164, DialogUnits.X, 4);
MaxLength:= AMaxLength;
EditMask:= AMask;
if isIgnoreMask then
Text:= Value
else
EditText:= Value;
ValidateEdit;
end;
ButtonTop:= Edit.Top + Edit.Height + 15;
ButtonWidth:= MulDiv(50, DialogUnits.X, 4);
ButtonHeight:= MulDiv(14, DialogUnits.Y, 8);
with TButton.Create(Form) do
begin
Parent:= Form;
Caption:= ABtnsCaption[0];
ModalResult:= mrOk;
Cursor:= crHandPoint;
Default:= True;
SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth, ButtonHeight);
end;
with TButton.Create(Form) do
begin
Parent:= Form;
Caption:= ABtnsCaption[1];
ModalResult:= mrCancel;
Cursor:= crHandPoint;
Cancel:= True;
SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15, ButtonWidth, ButtonHeight);
Form.ClientHeight:= Top + Height + 13;
end;
if ShowModal = mrOk then
begin
if isIgnoreMask then
Value:= Edit.Text
else
Value:= Edit.EditText;
Result:= True;
end;
finally
Form.Free;
end;
end;
function MyInputSpinQuery(const ACaption, APrompt: String; var _Value: IntEx; const AMinValue, AMaxValue: IntEx; const ABtnsCaption: array of String): Boolean;
var Form: TForm;
Prompt: TLabel;
Edit: TSpinEdit;
DialogUnits: TPoint;
ButtonTop, ButtonWidth, ButtonHeight: IntEx;
begin
Result:= False;
Form:= TForm.Create(Application);
with Form do
try
Canvas.Font:= Font;
DialogUnits:= MyGetAveCharSize(Canvas);
BorderStyle:= bsDialog;
Caption:= ACaption;
ClientWidth:= MulDiv(180, DialogUnits.X, 4);
Position:= poScreenCenter;
Color:= clBtnFace;
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;
Edit:= TSpinEdit.Create(Form);
with Edit do
begin
Parent:= Form;
Left:= Prompt.Left;
Top:= Prompt.Top + Prompt.Height + 5;
Width:= MulDiv(164, DialogUnits.X, 4);
MinValue:= Integer(AMinValue);
MaxValue:= Integer(AMaxValue);
if _Value < AMinValue then
Value:= AMinValue
else
if _Value > AMaxValue then
Value:= AMaxValue
else
Value:= _Value;
SelectAll;
end;
ButtonTop:= Edit.Top + Edit.Height + 15;
ButtonWidth:= MulDiv(50, DialogUnits.X, 4);
ButtonHeight:= MulDiv(14, DialogUnits.Y, 8);
with TButton.Create(Form) do
begin
Parent:= Form;
Caption:= ABtnsCaption[0];
ModalResult:= mrOk;
Cursor:= crHandPoint;
Default:= True;
SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth, ButtonHeight);
end;
with TButton.Create(Form) do
begin
Parent:= Form;
Caption:= ABtnsCaption[1];
ModalResult:= mrCancel;
Cursor:= crHandPoint;
Cancel:= True;
SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15, ButtonWidth, ButtonHeight);
Form.ClientHeight:= Top + Height + 13;
end;
if ShowModal = mrOk then
begin
_Value:= Edit.Value;
Result:= True;
end;
finally
Form.Free;
end;
end;
function ShowInputBox (const ACaption, APrompt, ADefault: String; var isAccept: Boolean): String;
var Pasw: boolean;
begin
Result:= ADefault;
Pasw:= False;
isAccept:= MyInputQuery(ACaption, APrompt, Result, Pasw, False, '', '*', 0, [OkBtnDefCaption, CancelBtnDefCaption]);
end;
function ShowInputBox (const ACaption, APrompt, ADefault: String; const ABtnCaptions: array of String; var isAccept: Boolean): String;
var Pasw: boolean;
begin
Result:= ADefault;
Pasw:= False;
isAccept:= MyInputQuery(ACaption, APrompt, Result, Pasw, False, '', '*', 0, ABtnCaptions);
end;
function ShowInputBox (const ACaption, APrompt, ADefault: String; const ABtnCaptions: array of String; const AMaxLength: IntEx; var isAccept: Boolean): String;
var Pasw: boolean;
begin
Result:= ADefault;
Pasw:= False;
isAccept:= MyInputQuery(ACaption, APrompt, Result, Pasw, false, '', '*', AMaxLength, ABtnCaptions);
end;
function ShowPasswordInputBox (const ACaption, APrompt, ADefault, APassword: String; var isAccept, isPasswordConfirmed: Boolean; const APasswordChar: Char = '*'): String;
begin
Result:= ADefault;
isAccept:= MyInputQuery(ACaption, APrompt, Result, isPasswordConfirmed, True, APassword, APasswordChar, 0, [OkBtnDefCaption, CancelBtnDefCaption]);
end;
function ShowPasswordInputBox (const ACaption, APrompt, ADefault, APassword: String; var isAccept, isPasswordConfirmed: Boolean; const ABtnCaptions: array of String; const APasswordChar: Char = '*'): String;
begin
Result:= ADefault;
isAccept:= MyInputQuery(ACaption, APrompt, Result, isPasswordConfirmed, True, APassword, APasswordChar, 0, ABtnCaptions);
end;
function ShowComboBox (const ACaption, APrompt: string; var Items: TStringList; const ADefaultIndex: IntEx; var isAccept: boolean): IntEx;
begin
Result:= ADefaultIndex;
isAccept:= MyInputComboQuery(ACaption, APrompt, Items, Result, Result, [OkBtnDefCaption, CancelBtnDefCaption]);
end;
function ShowComboBox (const ACaption, APrompt: String; var Items: TStringList; const ADefaultIndex: IntEx; const ABtnsCaption: array of String; var isAccept: Boolean): IntEx;
begin
Result:= ADefaultIndex;
isAccept:= MyInputComboQuery(ACaption, APrompt, Items, Result, Result, ABtnsCaption);
end;
function ShowMaskedBox (const ACaption, APrompt, AMask, ADefault: String; const isIgnoreMask: Boolean; var isAccept: Boolean): String;
begin
Result:= ADefault;
isAccept:= MyInputMaskQuery(ACaption, APrompt, AMask, Result, isIgnoreMask, 0, [OkBtnDefCaption, CancelBtnDefCaption]);
end;
function ShowMaskedBox (const ACaption, APrompt, AMask, ADefault: String; const isIgnoreMask: Boolean; const ABtnCaptions: array of String; const AMaxLength: IntEx; var isAccept: Boolean): String;
begin
Result:= ADefault;
isAccept:= MyInputMaskQuery(ACaption, APrompt, AMask, Result, isIgnoreMask, AMaxLength, ABtnCaptions);
end;
function ShowSpinedBox (const ACaption, APrompt: String; const ADefault: IntEx; var isAccept: Boolean): IntEx;
begin
Result:= ADefault;
isAccept:= MyInputSpinQuery(ACaption, APrompt, Result, 0, 100, [OkBtnDefCaption, CancelBtnDefCaption]);
end;
function ShowSpinedBox (const ACaption, APrompt: String; const ADefault, AMinValue, AMaxValue: IntEx; const ABtnCaptions: array of String; var isAccept: Boolean): IntEx;
begin
Result:= ADefault;
isAccept:= MyInputSpinQuery(ACaption, APrompt, Result, AMinValue, AMaxValue, ABtnCaptions);
end;
end.