157 lines
3.9 KiB
ObjectPascal
157 lines
3.9 KiB
ObjectPascal
unit TBXDTMForm;
|
|
|
|
interface
|
|
|
|
uses
|
|
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
|
|
Dialogs, ActnList, StdCtrls, TBX, TBXThemes;
|
|
|
|
type
|
|
TThemeRefreshEvent = Procedure(Sender:TObject; ThemeList:TStrings) of object;
|
|
TThemeLoadEvent = Procedure(Sender:TObject; ThemeFiles:TStrings) of object;
|
|
TThemeUnloadEvent = Procedure(Sender:TObject; ThemeIndex: Integer) of object;
|
|
TThemeActivateEvent = procedure (Sender:TObject; ThemeIndex:integer) of object;
|
|
|
|
TfrmTBXDTM = class(TForm)
|
|
ListBox1: TListBox;
|
|
Label1: TLabel;
|
|
Label2: TLabel;
|
|
Label3: TLabel;
|
|
Button1: TButton;
|
|
Button2: TButton;
|
|
Button4: TButton;
|
|
ActionList1: TActionList;
|
|
actadd: TAction;
|
|
actremove: TAction;
|
|
actActivate: TAction;
|
|
Button3: TButton;
|
|
OpenDialog1: TOpenDialog;
|
|
Button5: TButton;
|
|
procedure actremoveUpdate(Sender: TObject);
|
|
procedure actaddExecute(Sender: TObject);
|
|
procedure actActivateUpdate(Sender: TObject);
|
|
procedure actremoveExecute(Sender: TObject);
|
|
procedure Button5Click(Sender: TObject);
|
|
procedure actActivateExecute(Sender: TObject);
|
|
procedure FormActivate(Sender: TObject);
|
|
procedure ListBox1DblClick(Sender: TObject);
|
|
private
|
|
fOnLoad: TThemeLoadEvent;
|
|
fOnRefresh: TThemeRefreshEvent;
|
|
fOnUnload: TThemeUnloadEvent;
|
|
fOnActivate: TThemeActivateEvent;
|
|
{ Private declarations }
|
|
procedure RefreshThemeList;
|
|
procedure LoadNewTheme;
|
|
procedure UnloadTheme;
|
|
procedure RefreshCurrentTheme;
|
|
procedure ActivateTheme;
|
|
public
|
|
{ Public declarations }
|
|
property OnRefreshThemes:TThemeRefreshEvent read fOnRefresh write fOnRefresh;
|
|
property OnLoadNewTheme:TThemeLoadEvent read fOnLoad write fOnLoad;
|
|
property OnUnloadTheme:TThemeUnloadEvent read fOnUnload write fOnUnload;
|
|
property OnActivateTheme:TThemeActivateEvent read fOnActivate write fOnActivate;
|
|
end;
|
|
|
|
var
|
|
frmTBXDTM: TfrmTBXDTM;
|
|
|
|
implementation
|
|
|
|
{$R *.dfm}
|
|
|
|
procedure TfrmTBXDTM.actremoveUpdate(Sender: TObject);
|
|
begin
|
|
actremove.enabled := (listbox1.ItemIndex > -1) and (listbox1.Items[ListBox1.ItemIndex] <> CurrentTheme.Name);
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.actaddExecute(Sender: TObject);
|
|
begin
|
|
LoadNewTheme;
|
|
RefreshThemeList;
|
|
RefreshCurrentTheme;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.RefreshThemeList;
|
|
begin
|
|
ListBox1.Items.BeginUpdate;
|
|
try
|
|
if assigned(fOnRefresh) then
|
|
fOnRefresh(self, ListBox1.Items);
|
|
finally
|
|
listbox1.items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.actActivateUpdate(Sender: TObject);
|
|
begin
|
|
actactivate.enabled := (ListBox1.ItemIndex > -1) and (listbox1.Items[ListBox1.ItemIndex] <> CurrentTheme.Name);
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.LoadNewTheme;
|
|
begin
|
|
if OpenDialog1.Execute then
|
|
begin
|
|
if assigned(fOnLoad) then
|
|
begin
|
|
fOnLoad(self, opendialog1.Files);
|
|
RefreshThemeList;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.UnloadTheme;
|
|
begin
|
|
if assigned(fOnLoad) then
|
|
begin
|
|
fOnUnload(self, listbox1.itemindex);
|
|
RefreshThemeList;
|
|
end;
|
|
end;
|
|
|
|
|
|
procedure TfrmTBXDTM.actremoveExecute(Sender: TObject);
|
|
begin
|
|
UnloadTheme;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.Button5Click(Sender: TObject);
|
|
begin
|
|
listbox1.ItemIndex := -1;
|
|
ActivateTheme;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.actActivateExecute(Sender: TObject);
|
|
begin
|
|
ActivateTheme;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.RefreshCurrentTheme;
|
|
begin
|
|
label3.Caption := CurrentTheme.Name;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.FormActivate(Sender: TObject);
|
|
begin
|
|
RefreshThemeList;
|
|
RefreshCurrentTheme;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.ListBox1DblClick(Sender: TObject);
|
|
begin
|
|
if listbox1.ItemIndex <> -1 then
|
|
ActivateTheme;
|
|
end;
|
|
|
|
procedure TfrmTBXDTM.ActivateTheme;
|
|
begin
|
|
if assigned(fOnActivate) then
|
|
begin
|
|
fOnActivate(self, ListBox1.ItemIndex);
|
|
RefreshCurrentTheme;
|
|
end;
|
|
end;
|
|
|
|
end.
|