Files
lazarus-ccr/components/cryptini/latest_stable/demo/uinputsectionvaluesform.pas

157 lines
4.8 KiB
ObjectPascal
Raw Normal View History

unit uInputSectionValuesForm;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
Buttons;
const
C_NUMBEROFCONTROLS = 8; // Only need to change it here
type
{ TInputSectionValuesForm }
TInputSectionValuesForm = class(TForm)
cmd_Cancel: TBitBtn;
cmd_Close: TBitBtn;
edt_NewSectionName: TEdit;
lbl_Invisible2: TLabel;
Lbl_SectionName: TLabel;
Grp_NewSectionValues: TGroupBox;
lbl_Invisible1: TLabel;
procedure edt_NewSectionNameEditingDone(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure FormShow(Sender: TObject);
private
procedure DisableSectionNameEdit;
procedure InitControls;
procedure ProcessCheckbox(Sender: TObject);
procedure ProcessValueEdit(Sender: TObject);
public
ValueLabelArray: array[0..C_NUMBEROFCONTROLS - 1] of TLabel;
IdentEditArray: array[0..C_NUMBEROFCONTROLS - 1] of TEdit;
ValueEditArray: array[0..C_NUMBEROFCONTROLS - 1] of TEdit;
ValueCheckBoxArray: array[0..C_NUMBEROFCONTROLS - 1] of TCheckBox;
sSectionName: string;
NumberOfControls: integer;
end;
var
InputSectionValuesForm: TInputSectionValuesForm;
implementation
{$R *.lfm}
{ TInputSectionValuesForm }
procedure TInputSectionValuesForm.InitControls;
var
iCount: integer;
begin
BeginFormUpdate;
NumberOfControls := High(ValueLabelArray) + 1;
for iCount := Low(ValueLabelArray) to High(ValueLabelArray) do
begin
ValueLabelArray[iCount] := TLabel.Create(Grp_NewSectionValues);
ValueLabelArray[iCount].Caption := Format('Key and Value %d', [iCount + 1]);
ValueLabelArray[iCount].Tag := iCount;
ValueLabelArray[iCount].parent := Grp_NewSectionValues;
IdentEditArray[iCount] := TEdit.Create(Grp_NewSectionValues);
IdentEditArray[iCount].Text := 'Input Key here';
IdentEditArray[iCount].Tag := iCount;
// IdentEditArray[iCount].OnEditingDone:=@ProcessEdit;
IdentEditArray[iCount].parent := Grp_NewSectionValues;
ValueEditArray[iCount] := TEdit.Create(Grp_NewSectionValues);
ValueEditArray[iCount].Text := 'Input value here';
ValueEditArray[iCount].Tag := iCount;
ValueEditArray[iCount].OnEditingDone := @ProcessValueEdit;
ValueEditArray[iCount].parent := Grp_NewSectionValues;
ValueCheckBoxArray[iCount] := TCheckBox.Create(Grp_NewSectionValues);
ValueCheckBoxArray[iCount].Caption := 'Integer?';
ValueCheckBoxArray[iCount].Checked := False;
ValueCheckBoxArray[iCount].Tag := iCount;
ValueCheckBoxArray[iCount].TabStop:=FALSE;
ValueCheckBoxArray[iCount].OnClick := @ProcessCheckbox;
ValueCheckBoxArray[iCount].parent := Grp_NewSectionValues;
end;
EndFormUpdate;
end;
procedure TInputSectionValuesForm.ProcessCheckbox(Sender: TObject);
// Triggered by OnClick event
var
TempCheckBox: TCheckBox;
iTag, iTest: integer;
begin
TempCheckBox := Sender as TCheckBox;
iTag := TempCheckBox.Tag;
// Validate associated Edit text
if ValueCheckBoxArray[iTag].Checked then
if (TryStrToInt(ValueEditArray[iTag].Text, iTest) = False) then
begin
ValueCheckBoxArray[iTag].Checked := False;
ShowMessageFmt('%s is not an Integer! Please edit it first.',
[ValueEditArray[iTag].Text]);
end;
end;
procedure TInputSectionValuesForm.ProcessValueEdit(Sender: TObject);
// Triggered by OnEditingDone event
var
TempEdit: TEdit;
iTag, iTest: integer;
begin
TempEdit := Sender as TEdit;
iTag := TempEdit.Tag;
// Auto check/uncheck associated checkbox
if TryStrToInt(TempEdit.Text, iTest) then
ValueCheckBoxArray[iTag].Checked := True
else
ValueCheckBoxArray[iTag].Checked := False;
// cmd_Close.SetFocus; // Enable this if you put a ShowMessage in this proc
end;
procedure TInputSectionValuesForm.DisableSectionNameEdit;
begin
edt_NewSectionName.Enabled := False;
end;
procedure TInputSectionValuesForm.FormCreate(Sender: TObject);
begin
Caption := Application.Title + ' - Make New Section';
Icon := Application.Icon;
InitControls;
sSectionName := edt_NewSectionName.Text;
end;
procedure TInputSectionValuesForm.edt_NewSectionNameEditingDone(Sender: TObject);
begin
sSectionName := edt_NewSectionName.Text;
end;
procedure TInputSectionValuesForm.FormShow(Sender: TObject);
var
iCount: integer;
begin
// Reinitialise controls
edt_NewSectionName.Enabled := True;
for iCount := 0 to NumberOfControls - 1 do
begin
;
IdentEditArray[iCount].Text := Format('Input Key %d here', [iCount + 1]);
ValueEditArray[iCount].Text := Format('Input value %d here', [iCount + 1]);
ValueCheckBoxArray[iCount].Checked := False;
end;
edt_NewSectionName.Text := 'My New Section';
end;
end.