BSOne.SFC/Tocsg.Lib/VCL/Tocsg.Controls.pas

218 lines
6.8 KiB
Plaintext

{*******************************************************}
{ }
{ Tocsg.Controls }
{ }
{ Copyright (C) 2022 kkuzil }
{ }
{*******************************************************}
unit Tocsg.Controls;
interface
uses
Vcl.Menus, Tocsg.Obj, Vcl.Controls, System.SysUtils, System.Classes,
System.Generics.Collections, Vcl.StdCtrls;
type
TManagerInputControlsData = class(TTgObject)
private
sIniPath_: String;
InputCtrlList_: TList<TControl>;
public
Constructor Create(const sIniPath: String);
Destructor Destroy; override;
procedure RegInputCtrl(aCtrl: TControl);
procedure Save;
procedure Load(bInitClear: Boolean = false);
end;
procedure SetSubMenuVisible(aMenuItem: TMenuItem; bVal: Boolean); inline;
procedure SetChildControlEnable(aParentCtrl: TWinControl; bVal: Boolean); inline;
implementation
uses
System.IniFiles, Tocsg.Safe, Tocsg.Strings;
{ TManagerInputControlsData }
Constructor TManagerInputControlsData.Create(const sIniPath: String);
begin
Inherited Create;
sIniPath_ := sIniPath;
InputCtrlList_ := TList<TControl>.Create;
end;
Destructor TManagerInputControlsData.Destroy;
begin
FreeAndNil(InputCtrlList_);
Inherited;
end;
procedure TManagerInputControlsData.RegInputCtrl(aCtrl: TControl);
var
i: Integer;
begin
i := InputCtrlList_.IndexOf(aCtrl);
if i = -1 then
InputCtrlList_.Add(aCtrl);
end;
procedure TManagerInputControlsData.Save;
function GetDivStrings(aStrings: TStrings): String;
var
i: Integer;
begin
Result := '';
for i := 0 to aStrings.Count - 1 do
Result := Result + aStrings[i] + ';';
end;
var
i, n: Integer;
ini: TIniFile;
sTemp: String;
begin
Guard(ini, TIniFile.Create(sIniPath_));
for i := 0 to InputCtrlList_.Count - 1 do
if InputCtrlList_[i] is TEdit then
begin
ini.WriteString('TEdit', InputCtrlList_[i].Name, TEdit(InputCtrlList_[i]).Text);
end else
if InputCtrlList_[i] is TMemo then
begin
sTemp := StringReplace(TMemo(InputCtrlList_[i]).Text, #13#10, '§#', [rfReplaceAll]);
ini.WriteString('TMemo', InputCtrlList_[i].Name, sTemp);
end else
if InputCtrlList_[i] is TCheckBox then
begin
ini.WriteBool('TCheckBox', InputCtrlList_[i].Name, TCheckBox(InputCtrlList_[i]).Checked);
end else
if InputCtrlList_[i] is TRadioButton then
begin
ini.WriteBool('TCheckBox', InputCtrlList_[i].Name, TRadioButton(InputCtrlList_[i]).Checked);
end else
if InputCtrlList_[i] is TComboBox then
begin
case TComboBox(InputCtrlList_[i]).Style of
csDropDown :
begin
sTemp := TComboBox(InputCtrlList_[i]).Text;
n := TComboBox(InputCtrlList_[i]).Items.IndexOf(sTemp);
if n = -1 then
begin
if TComboBox(InputCtrlList_[i]).Items.Count > 0 then
TComboBox(InputCtrlList_[i]).Items.Insert(0, sTemp)
else
TComboBox(InputCtrlList_[i]).Items.Add(sTemp);
end else begin
if TComboBox(InputCtrlList_[i]).Items.Count > 1 then
begin
TComboBox(InputCtrlList_[i]).Items.Delete(n);
TComboBox(InputCtrlList_[i]).Items.Insert(0, sTemp);
TComboBox(InputCtrlList_[i]).Text := sTemp;
end;
end;
ini.WriteString('TComboBox', InputCtrlList_[i].Name, GetDivStrings(TComboBox(InputCtrlList_[i]).Items));
end;
csDropDownList :
begin
ini.WriteInteger('TComboBox.List', InputCtrlList_[i].Name, TComboBox(InputCtrlList_[i]).ItemIndex);
end;
end;
end;
end;
procedure TManagerInputControlsData.Load(bInitClear: Boolean = false);
var
i: Integer;
ini: TIniFile;
TempStrings: TStringList;
begin
if FileExists(sIniPath_) then
begin
Guard(TempStrings, TStringList.Create);
Guard(ini, TIniFile.Create(sIniPath_));
for i := 0 to InputCtrlList_.Count - 1 do
if InputCtrlList_[i] is TEdit then
begin
if bInitClear or ini.ValueExists('TEdit', InputCtrlList_[i].Name) then
TEdit(InputCtrlList_[i]).Text := ini.ReadString('TEdit', InputCtrlList_[i].Name, '');
end else
if InputCtrlList_[i] is TMemo then
begin
if bInitClear or ini.ValueExists('TMemo', InputCtrlList_[i].Name) then
TMemo(InputCtrlList_[i]).Text := StringReplace(ini.ReadString('TMemo', InputCtrlList_[i].Name, ''), '§#', #13#10, [rfReplaceAll]);
end else
if InputCtrlList_[i] is TCheckBox then
begin
if bInitClear or ini.ValueExists('TCheckBox', InputCtrlList_[i].Name) then
TCheckBox(InputCtrlList_[i]).Checked := ini.ReadBool('TCheckBox', InputCtrlList_[i].Name, false);
end else
if InputCtrlList_[i] is TRadioButton then
begin
if bInitClear or ini.ValueExists('TRadioButton', InputCtrlList_[i].Name) then
TRadioButton(InputCtrlList_[i]).Checked := ini.ReadBool('TRadioButton', InputCtrlList_[i].Name, false);
end else
if InputCtrlList_[i] is TComboBox then
begin
case TComboBox(InputCtrlList_[i]).Style of
csDropDown :
begin
TComboBox(InputCtrlList_[i]).Clear;
TComboBox(InputCtrlList_[i]).Text := '';
SplitString(ini.ReadString('TComboBox', InputCtrlList_[i].Name, ''), ';', TempStrings);
if TempStrings.Count > 0 then
begin
TComboBox(InputCtrlList_[i]).Items.AddStrings(TempStrings);
TComboBox(InputCtrlList_[i]).ItemIndex := 0;
end;
end;
csDropDownList :
begin
if bInitClear or ini.ValueExists('TComboBox.List', InputCtrlList_[i].Name) then
TComboBox(InputCtrlList_[i]).ItemIndex := ini.ReadInteger('TComboBox.List', InputCtrlList_[i].Name, 0);
end;
end;
end;
end else
if bInitClear then
begin
for i := 0 to InputCtrlList_.Count - 1 do
if InputCtrlList_[i] is TEdit then
begin
TEdit(InputCtrlList_[i]).Text := '';
end else
if InputCtrlList_[i] is TComboBox then
begin
case TComboBox(InputCtrlList_[i]).Style of
csDropDown :
begin
TComboBox(InputCtrlList_[i]).Clear;
TComboBox(InputCtrlList_[i]).Text := '';
end;
end;
end;
end;
end;
procedure SetSubMenuVisible(aMenuItem: TMenuItem; bVal: Boolean);
var
i: Integer;
begin
for i := 0 to aMenuItem.Count - 1 do
aMenuItem[i].Visible := bVal;
end;
procedure SetChildControlEnable(aParentCtrl: TWinControl; bVal: Boolean);
var
i: Integer;
begin
for i := 0 to aParentCtrl.ControlCount - 1 do
aParentCtrl.Controls[i].Enabled := bVal;
end;
end.