Added settings functionality; Added restoring of list's focus.
This commit is contained in:
@@ -15,7 +15,8 @@ uses
|
|||||||
uDrawTIM in 'units\uDrawTIM.pas',
|
uDrawTIM in 'units\uDrawTIM.pas',
|
||||||
uEventWaitThread in 'units\uEventWaitThread.pas',
|
uEventWaitThread in 'units\uEventWaitThread.pas',
|
||||||
uBrowseForFolder in 'units\uBrowseForFolder.pas',
|
uBrowseForFolder in 'units\uBrowseForFolder.pas',
|
||||||
uScanResult in 'units\uScanResult.pas';
|
uScanResult in 'units\uScanResult.pas',
|
||||||
|
uSettings in 'units\uSettings.pas';
|
||||||
|
|
||||||
{$R *.res}
|
{$R *.res}
|
||||||
|
|
||||||
|
|||||||
@@ -128,6 +128,7 @@
|
|||||||
<DCCReference Include="units\uEventWaitThread.pas"/>
|
<DCCReference Include="units\uEventWaitThread.pas"/>
|
||||||
<DCCReference Include="units\uBrowseForFolder.pas"/>
|
<DCCReference Include="units\uBrowseForFolder.pas"/>
|
||||||
<DCCReference Include="units\uScanResult.pas"/>
|
<DCCReference Include="units\uScanResult.pas"/>
|
||||||
|
<DCCReference Include="units\uSettings.pas"/>
|
||||||
<BuildConfiguration Include="Release">
|
<BuildConfiguration Include="Release">
|
||||||
<Key>Cfg_2</Key>
|
<Key>Cfg_2</Key>
|
||||||
<CfgParent>Base</CfgParent>
|
<CfgParent>Base</CfgParent>
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ uses
|
|||||||
|
|
||||||
const
|
const
|
||||||
cProgramName = 'Tim2View by [Lab 313]';
|
cProgramName = 'Tim2View by [Lab 313]';
|
||||||
cProgramVersion = '2.0 r48 Release';
|
cProgramVersion = '2.0 Stable';
|
||||||
cExtractedTimsDir = 'TIMS';
|
cExtractedTimsDir = 'TIMS';
|
||||||
cMaxFileSize = $2EAEED80;
|
cMaxFileSize = $2EAEED80;
|
||||||
|
|
||||||
|
|||||||
@@ -547,6 +547,7 @@ object frmMain: TfrmMain
|
|||||||
Enabled = False
|
Enabled = False
|
||||||
TabOrder = 0
|
TabOrder = 0
|
||||||
OnChange = cbbFilesChange
|
OnChange = cbbFilesChange
|
||||||
|
OnCloseUp = actReturnFocusExecute
|
||||||
end
|
end
|
||||||
object pnlMain: TPanel
|
object pnlMain: TPanel
|
||||||
Left = 0
|
Left = 0
|
||||||
@@ -610,7 +611,6 @@ object frmMain: TfrmMain
|
|||||||
ViewStyle = vsReport
|
ViewStyle = vsReport
|
||||||
OnChange = lvListChange
|
OnChange = lvListChange
|
||||||
OnData = lvListData
|
OnData = lvListData
|
||||||
OnSelectItem = lvListSelectItem
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
object pnlImage: TPanel
|
object pnlImage: TPanel
|
||||||
@@ -701,7 +701,8 @@ object frmMain: TfrmMain
|
|||||||
ItemIndex = 0
|
ItemIndex = 0
|
||||||
TabOrder = 1
|
TabOrder = 1
|
||||||
Text = 'Real'
|
Text = 'Real'
|
||||||
OnChange = cbbBitModeChange
|
OnChange = actDrawSelectedTimExecute
|
||||||
|
OnCloseUp = actReturnFocusExecute
|
||||||
Items.Strings = (
|
Items.Strings = (
|
||||||
'Real'
|
'Real'
|
||||||
'4 BPP'
|
'4 BPP'
|
||||||
@@ -709,7 +710,7 @@ object frmMain: TfrmMain
|
|||||||
'16 BPP'
|
'16 BPP'
|
||||||
'24 BPP')
|
'24 BPP')
|
||||||
end
|
end
|
||||||
object cbbTransparenceMode: TComboBox
|
object cbbTranspMode: TComboBox
|
||||||
AlignWithMargins = True
|
AlignWithMargins = True
|
||||||
Left = 83
|
Left = 83
|
||||||
Top = 3
|
Top = 3
|
||||||
@@ -724,7 +725,8 @@ object frmMain: TfrmMain
|
|||||||
ItemIndex = 0
|
ItemIndex = 0
|
||||||
TabOrder = 2
|
TabOrder = 2
|
||||||
Text = 'Full transparence'
|
Text = 'Full transparence'
|
||||||
OnChange = cbbTransparenceModeChange
|
OnChange = cbbTranspModeChange
|
||||||
|
OnCloseUp = actReturnFocusExecute
|
||||||
Items.Strings = (
|
Items.Strings = (
|
||||||
'Full transparence'
|
'Full transparence'
|
||||||
'Black Transparence'
|
'Black Transparence'
|
||||||
@@ -746,6 +748,7 @@ object frmMain: TfrmMain
|
|||||||
DropDownCount = 16
|
DropDownCount = 16
|
||||||
ParentDoubleBuffered = False
|
ParentDoubleBuffered = False
|
||||||
TabOrder = 3
|
TabOrder = 3
|
||||||
|
OnCloseUp = actReturnFocusExecute
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
@@ -924,6 +927,14 @@ object frmMain: TfrmMain
|
|||||||
object actChangeBackColor: TAction
|
object actChangeBackColor: TAction
|
||||||
Caption = '&Change Background Color'
|
Caption = '&Change Background Color'
|
||||||
end
|
end
|
||||||
|
object actReturnFocus: TAction
|
||||||
|
Caption = 'actReturnFocus'
|
||||||
|
OnExecute = actReturnFocusExecute
|
||||||
|
end
|
||||||
|
object actDrawSelectedTim: TAction
|
||||||
|
Caption = 'actDrawSelectedTim'
|
||||||
|
OnExecute = actDrawSelectedTimExecute
|
||||||
|
end
|
||||||
end
|
end
|
||||||
object pmList: TPopupMenu
|
object pmList: TPopupMenu
|
||||||
Left = 640
|
Left = 640
|
||||||
|
|||||||
@@ -8,7 +8,8 @@ uses
|
|||||||
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.ComCtrls,
|
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.Grids, Vcl.ComCtrls,
|
||||||
Vcl.ExtCtrls, Vcl.Menus, Vcl.StdCtrls, uScanThread, uCommon,
|
Vcl.ExtCtrls, Vcl.Menus, Vcl.StdCtrls, uScanThread, uCommon,
|
||||||
Winapi.ShellAPI, uDrawTIM, Vcl.ExtDlgs, uTIM, System.Actions,
|
Winapi.ShellAPI, uDrawTIM, Vcl.ExtDlgs, uTIM, System.Actions,
|
||||||
Vcl.ActnList, uScanResult, System.Types, System.Generics.Collections;
|
Vcl.ActnList, uScanResult, System.Types, System.Generics.Collections,
|
||||||
|
uSettings;
|
||||||
|
|
||||||
const
|
const
|
||||||
WM_COMMANDARRIVED = WM_USER + 1;
|
WM_COMMANDARRIVED = WM_USER + 1;
|
||||||
@@ -46,7 +47,7 @@ type
|
|||||||
pnlList: TPanel;
|
pnlList: TPanel;
|
||||||
lvList: TListView;
|
lvList: TListView;
|
||||||
pnlImageOptions: TPanel;
|
pnlImageOptions: TPanel;
|
||||||
cbbTransparenceMode: TComboBox;
|
cbbTranspMode: TComboBox;
|
||||||
grdCurrClut: TDrawGrid;
|
grdCurrClut: TDrawGrid;
|
||||||
pnlImage: TPanel;
|
pnlImage: TPanel;
|
||||||
splImageClut: TSplitter;
|
splImageClut: TSplitter;
|
||||||
@@ -83,6 +84,8 @@ type
|
|||||||
btnShowClut: TButton;
|
btnShowClut: TButton;
|
||||||
cbbCLUT: TComboBox;
|
cbbCLUT: TComboBox;
|
||||||
actChangeBackColor: TAction;
|
actChangeBackColor: TAction;
|
||||||
|
actReturnFocus: TAction;
|
||||||
|
actDrawSelectedTim: TAction;
|
||||||
procedure btnStopScanClick(Sender: TObject);
|
procedure btnStopScanClick(Sender: TObject);
|
||||||
procedure FormCreate(Sender: TObject);
|
procedure FormCreate(Sender: TObject);
|
||||||
procedure lvListData(Sender: TObject; Item: TListItem);
|
procedure lvListData(Sender: TObject; Item: TListItem);
|
||||||
@@ -101,18 +104,17 @@ type
|
|||||||
procedure actTim2PngExecute(Sender: TObject);
|
procedure actTim2PngExecute(Sender: TObject);
|
||||||
procedure actOpenRepoExecute(Sender: TObject);
|
procedure actOpenRepoExecute(Sender: TObject);
|
||||||
procedure actOpenLabExecute(Sender: TObject);
|
procedure actOpenLabExecute(Sender: TObject);
|
||||||
procedure cbbBitModeChange(Sender: TObject);
|
|
||||||
procedure actAboutExecute(Sender: TObject);
|
procedure actAboutExecute(Sender: TObject);
|
||||||
procedure actStretchExecute(Sender: TObject);
|
procedure actStretchExecute(Sender: TObject);
|
||||||
procedure actTimInfoExecute(Sender: TObject);
|
procedure actTimInfoExecute(Sender: TObject);
|
||||||
procedure actAssocTimsExecute(Sender: TObject);
|
procedure actAssocTimsExecute(Sender: TObject);
|
||||||
procedure actExtractListExecute(Sender: TObject);
|
procedure actExtractListExecute(Sender: TObject);
|
||||||
procedure lvListSelectItem(Sender: TObject; Item: TListItem;
|
procedure cbbTranspModeChange(Sender: TObject);
|
||||||
Selected: Boolean);
|
|
||||||
procedure cbbTransparenceModeChange(Sender: TObject);
|
|
||||||
procedure btnShowClutClick(Sender: TObject);
|
procedure btnShowClutClick(Sender: TObject);
|
||||||
procedure lvListChange(Sender: TObject; Item: TListItem;
|
procedure lvListChange(Sender: TObject; Item: TListItem;
|
||||||
Change: TItemChange);
|
Change: TItemChange);
|
||||||
|
procedure actReturnFocusExecute(Sender: TObject);
|
||||||
|
procedure actDrawSelectedTimExecute(Sender: TObject);
|
||||||
private
|
private
|
||||||
{ Private declarations }
|
{ Private declarations }
|
||||||
// pResult: PNativeXml;
|
// pResult: PNativeXml;
|
||||||
@@ -121,6 +123,7 @@ type
|
|||||||
LastDir: string;
|
LastDir: string;
|
||||||
WaitThread: TEventWaitThread;
|
WaitThread: TEventWaitThread;
|
||||||
StartedScans: Integer;
|
StartedScans: Integer;
|
||||||
|
Settings: TSettings;
|
||||||
|
|
||||||
function ScanRes: TScanResult;
|
function ScanRes: TScanResult;
|
||||||
procedure SetListCount(Count: Integer);
|
procedure SetListCount(Count: Integer);
|
||||||
@@ -281,11 +284,11 @@ begin
|
|||||||
actTimInfo.Enabled := False;
|
actTimInfo.Enabled := False;
|
||||||
actTimInfo.Caption := 'TIM Info';
|
actTimInfo.Caption := 'TIM Info';
|
||||||
lvList.Column[0].Caption := '# / 0';
|
lvList.Column[0].Caption := '# / 0';
|
||||||
|
|
||||||
|
UpdateCLUTInfo;
|
||||||
DrawSelTim;
|
DrawSelTim;
|
||||||
DrawSelClut;
|
DrawSelClut;
|
||||||
|
|
||||||
SetCLUTListToNoCLUT;
|
|
||||||
|
|
||||||
cbbFiles.Items.Delete(cbbFiles.ItemIndex);
|
cbbFiles.Items.Delete(cbbFiles.ItemIndex);
|
||||||
|
|
||||||
CheckButtonsAndMainMenu;
|
CheckButtonsAndMainMenu;
|
||||||
@@ -307,6 +310,11 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TfrmMain.actDrawSelectedTimExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
DrawSelTim;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.actExitExecute(Sender: TObject);
|
procedure TfrmMain.actExitExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
Close;
|
Close;
|
||||||
@@ -381,6 +389,11 @@ begin
|
|||||||
MessageBeep(MB_ICONINFORMATION);
|
MessageBeep(MB_ICONINFORMATION);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TfrmMain.actReturnFocusExecute(Sender: TObject);
|
||||||
|
begin
|
||||||
|
if lvList.Enabled then lvList.SetFocus;
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.actScanDirExecute(Sender: TObject);
|
procedure TfrmMain.actScanDirExecute(Sender: TObject);
|
||||||
var
|
var
|
||||||
SelectedDir: string;
|
SelectedDir: string;
|
||||||
@@ -405,7 +418,8 @@ end;
|
|||||||
|
|
||||||
procedure TfrmMain.actStretchExecute(Sender: TObject);
|
procedure TfrmMain.actStretchExecute(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DrawSelTim;
|
Settings.StretchMode := actStretch.Checked;
|
||||||
|
actDrawSelectedTimExecute(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.actTim2PngExecute(Sender: TObject);
|
procedure TfrmMain.actTim2PngExecute(Sender: TObject);
|
||||||
@@ -482,6 +496,7 @@ procedure TfrmMain.btnShowClutClick(Sender: TObject);
|
|||||||
begin
|
begin
|
||||||
grdCurrClut.Visible := not grdCurrClut.Visible;
|
grdCurrClut.Visible := not grdCurrClut.Visible;
|
||||||
DrawSelClut;
|
DrawSelClut;
|
||||||
|
actReturnFocusExecute(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.btnStopScanClick(Sender: TObject);
|
procedure TfrmMain.btnStopScanClick(Sender: TObject);
|
||||||
@@ -489,31 +504,28 @@ begin
|
|||||||
if ScanThreads.Count = 0 then Exit;
|
if ScanThreads.Count = 0 then Exit;
|
||||||
|
|
||||||
ScanThreads.First.StopScan := True;
|
ScanThreads.First.StopScan := True;
|
||||||
|
actReturnFocusExecute(Self);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.cbbFilesChange(Sender: TObject);
|
procedure TfrmMain.cbbFilesChange(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
SetListCount(ScanRes.Count);
|
SetListCount(ScanRes.Count);
|
||||||
|
|
||||||
lvList.SetFocus;
|
actReturnFocusExecute(Self);
|
||||||
lvList.Selected := nil;
|
lvList.Selected := nil;
|
||||||
lvList.Items[0].Focused := True;
|
lvList.Items[0].Focused := True;
|
||||||
lvList.Items[0].Selected := True;
|
lvList.Items[0].Selected := True;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.cbbTransparenceModeChange(Sender: TObject);
|
procedure TfrmMain.cbbTranspModeChange(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DrawSelTim;
|
Settings.TranspMode := cbbTranspMode.ItemIndex;
|
||||||
end;
|
actDrawSelectedTimExecute(Self);
|
||||||
|
|
||||||
procedure TfrmMain.cbbBitModeChange(Sender: TObject);
|
|
||||||
begin
|
|
||||||
DrawSelTim;
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.cbbCLUTChange(Sender: TObject);
|
procedure TfrmMain.cbbCLUTChange(Sender: TObject);
|
||||||
begin
|
begin
|
||||||
DrawSelTim;
|
actDrawSelectedTimExecute(Self);
|
||||||
DrawSelClut;
|
DrawSelClut;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@@ -544,7 +556,8 @@ begin
|
|||||||
actExtractTim.Enabled := actReplaceTim.Enabled;
|
actExtractTim.Enabled := actReplaceTim.Enabled;
|
||||||
|
|
||||||
cbbCLUT.Enabled := actReplaceTim.Enabled;
|
cbbCLUT.Enabled := actReplaceTim.Enabled;
|
||||||
cbbTransparenceMode.Enabled := actReplaceTim.Enabled;
|
btnShowClut.Enabled := actReplaceTim.Enabled;
|
||||||
|
cbbTranspMode.Enabled := actReplaceTim.Enabled;
|
||||||
cbbBitMode.Enabled := actReplaceTim.Enabled;
|
cbbBitMode.Enabled := actReplaceTim.Enabled;
|
||||||
//actStretch.Enabled := actReplaceTim.Enabled;
|
//actStretch.Enabled := actReplaceTim.Enabled;
|
||||||
end;
|
end;
|
||||||
@@ -629,7 +642,7 @@ begin
|
|||||||
else
|
else
|
||||||
Index := cbbCLUT.ItemIndex;
|
Index := cbbCLUT.ItemIndex;
|
||||||
|
|
||||||
TimToPNG(TIM, Index, PNG, cbbTransparenceMode.ItemIndex);
|
TimToPNG(TIM, Index, PNG, cbbTranspMode.ItemIndex);
|
||||||
PNG.AssignTo(pbTim.Picture.Bitmap);
|
PNG.AssignTo(pbTim.Picture.Bitmap);
|
||||||
FreeTIM(TIM);
|
FreeTIM(TIM);
|
||||||
|
|
||||||
@@ -649,12 +662,21 @@ begin
|
|||||||
|
|
||||||
if PNG^ <> nil then PNG^.Free;
|
if PNG^ <> nil then PNG^.Free;
|
||||||
Dispose(PNG);
|
Dispose(PNG);
|
||||||
|
|
||||||
|
Settings.SaveToFile;
|
||||||
|
Settings.Free;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.FormCreate(Sender: TObject);
|
procedure TfrmMain.FormCreate(Sender: TObject);
|
||||||
var
|
var
|
||||||
hGridRect: TGridRect;
|
hGridRect: TGridRect;
|
||||||
begin
|
begin
|
||||||
|
Settings := TSettings.Create;
|
||||||
|
Settings.LoadFromFile;
|
||||||
|
|
||||||
|
actStretch.Checked := Settings.StretchMode;
|
||||||
|
cbbTranspMode.ItemIndex := Settings.TranspMode;
|
||||||
|
|
||||||
hGridRect.Top := -1;
|
hGridRect.Top := -1;
|
||||||
hGridRect.Left := -1;
|
hGridRect.Left := -1;
|
||||||
hGridRect.Right := -1;
|
hGridRect.Right := -1;
|
||||||
@@ -809,15 +831,6 @@ begin
|
|||||||
Item.SubItems.Add(Format('%.2d', [TimIdx(Item.Index).Cluts]));
|
Item.SubItems.Add(Format('%.2d', [TimIdx(Item.Index).Cluts]));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure TfrmMain.lvListSelectItem(Sender: TObject; Item: TListItem;
|
|
||||||
Selected: Boolean);
|
|
||||||
begin
|
|
||||||
(*if Item = nil then Exit;
|
|
||||||
|
|
||||||
if Selected then
|
|
||||||
lvListClick(Self); *)
|
|
||||||
end;
|
|
||||||
|
|
||||||
procedure TfrmMain.SetListCount(Count: Integer);
|
procedure TfrmMain.SetListCount(Count: Integer);
|
||||||
begin
|
begin
|
||||||
lvList.Items.BeginUpdate;
|
lvList.Items.BeginUpdate;
|
||||||
@@ -952,10 +965,10 @@ begin
|
|||||||
cbbCLUT.Items.Add(Format('CLUT [%.2d/%.2d]', [I, CLUTS]));
|
cbbCLUT.Items.Add(Format('CLUT [%.2d/%.2d]', [I, CLUTS]));
|
||||||
cbbCLUT.Items.EndUpdate;
|
cbbCLUT.Items.EndUpdate;
|
||||||
|
|
||||||
cbbCLUT.ItemIndex := 0;
|
|
||||||
|
|
||||||
if CLUTS = 0 then SetCLUTListToNoCLUT;
|
if CLUTS = 0 then SetCLUTListToNoCLUT;
|
||||||
|
|
||||||
|
cbbCLUT.ItemIndex := 0;
|
||||||
|
|
||||||
FreeTIM(TIM);
|
FreeTIM(TIM);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|||||||
127
units/uSettings.pas
Normal file
127
units/uSettings.pas
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
unit uSettings;
|
||||||
|
|
||||||
|
interface
|
||||||
|
|
||||||
|
uses Classes;
|
||||||
|
{$M+}
|
||||||
|
|
||||||
|
type
|
||||||
|
TCustomSettings = class
|
||||||
|
private
|
||||||
|
procedure LoadFromStream(const Stream: TStream) ;
|
||||||
|
procedure SaveToStream(const Stream: TStream) ;
|
||||||
|
public
|
||||||
|
procedure LoadFromFile() ;
|
||||||
|
procedure SaveToFile() ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
TSettings = class(TCustomSettings)
|
||||||
|
private
|
||||||
|
FTranspMode: Integer;
|
||||||
|
FStretchMode: Boolean;
|
||||||
|
public
|
||||||
|
constructor Create;
|
||||||
|
published
|
||||||
|
property TranspMode: Integer read FTranspMode write FTranspMode;
|
||||||
|
property StretchMode: Boolean read FStretchMode write FStretchMode;
|
||||||
|
end;
|
||||||
|
|
||||||
|
var
|
||||||
|
Settings: TSettings;
|
||||||
|
|
||||||
|
implementation
|
||||||
|
|
||||||
|
uses TypInfo, Sysutils;
|
||||||
|
|
||||||
|
const FileName = 'settings.t2v';
|
||||||
|
|
||||||
|
{ TSettings }
|
||||||
|
|
||||||
|
procedure TCustomSettings.LoadFromFile() ;
|
||||||
|
var
|
||||||
|
Stream: TStream;
|
||||||
|
begin
|
||||||
|
if not FileExists(FileName) then Exit;
|
||||||
|
|
||||||
|
Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite) ;
|
||||||
|
try
|
||||||
|
LoadFromStream(Stream) ;
|
||||||
|
finally
|
||||||
|
Stream.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCustomSettings.LoadFromStream(const Stream: TStream) ;
|
||||||
|
var
|
||||||
|
Reader: TReader;
|
||||||
|
PropName, PropValue: string;
|
||||||
|
begin
|
||||||
|
Reader := TReader.Create(Stream, $FFF) ;
|
||||||
|
Stream.Position := 0;
|
||||||
|
Reader.ReadListBegin;
|
||||||
|
|
||||||
|
while not Reader.EndOfList do
|
||||||
|
begin
|
||||||
|
PropName := Reader.ReadString;
|
||||||
|
PropValue := Reader.ReadString;
|
||||||
|
SetPropValue(Self, PropName, PropValue) ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
FreeAndNil(Reader) ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCustomSettings.SaveToFile() ;
|
||||||
|
var
|
||||||
|
Stream: TStream;
|
||||||
|
begin
|
||||||
|
Stream := TFileStream.Create(FileName, fmCreate) ;
|
||||||
|
try
|
||||||
|
SaveToStream(Stream) ;
|
||||||
|
finally
|
||||||
|
Stream.Free;
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TCustomSettings.SaveToStream(const Stream: TStream) ;
|
||||||
|
var
|
||||||
|
PropName, PropValue: string;
|
||||||
|
cnt: Integer;
|
||||||
|
lPropInfo: PPropInfo;
|
||||||
|
lPropCount: Integer;
|
||||||
|
lPropList: PPropList;
|
||||||
|
lPropType: PPTypeInfo;
|
||||||
|
Writer: TWriter;
|
||||||
|
begin
|
||||||
|
lPropCount := GetPropList(PTypeInfo(ClassInfo), lPropList) ;
|
||||||
|
Writer := TWriter.Create(Stream, $FFF) ;
|
||||||
|
Stream.Size := 0;
|
||||||
|
Writer.WriteListBegin;
|
||||||
|
for cnt := 0 to lPropCount - 1 do
|
||||||
|
begin
|
||||||
|
lPropInfo := lPropList^[cnt];
|
||||||
|
lPropType := lPropInfo^.PropType;
|
||||||
|
if lPropType^.Kind = tkMethod then Continue;
|
||||||
|
|
||||||
|
PropName := lPropInfo.Name;
|
||||||
|
PropValue := GetPropValue(Self, lPropInfo) ;
|
||||||
|
Writer.WriteString(PropName) ;
|
||||||
|
Writer.WriteString(PropValue) ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
Writer.WriteListEnd;
|
||||||
|
FreeAndNil(Writer) ;
|
||||||
|
end;
|
||||||
|
|
||||||
|
{ TSettings }
|
||||||
|
|
||||||
|
constructor TSettings.Create;
|
||||||
|
begin
|
||||||
|
FTranspMode := 0;
|
||||||
|
FStretchMode := False;
|
||||||
|
end;
|
||||||
|
|
||||||
|
initialization
|
||||||
|
Settings := TSettings.Create;
|
||||||
|
finalization
|
||||||
|
FreeAndNil(Settings) ;
|
||||||
|
end.
|
||||||
Reference in New Issue
Block a user