📄 mainunit.pas
字号:
unit MainUnit;
{$WARNINGS OFF}
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
sSkinProvider, sSkinManager, sComboBoxes, ExtCtrls, sPanel, FileCtrl, sScrollBox, UnitFrameDemo,
ImgList, sStatusBar, sGauge, sCheckbox, ExtDlgs, FrameAbout, ComCtrls, StdCtrls,
Buttons, sSpeedButton, sComboBox, sHintManager, sDialogs,
sMemo, CheckLst, sFrameBar, sLabel, Menus, sAlphaListBox, UnitContact,
Mask, sMaskEdit, sCustomComboEdit, sTooledit, UnitButtons, sTrackBar, sEdit,
ActnList, StdActns, ToolWin, acCoolBar, acMagn, XPMan, sListBox,
acProgressBar, sButton, acAlphaImageList, acAlphaHints, acPNG;
const
sPreviewCaption = 'AlphaControls preview';
type
TMainForm = class(TForm)
ImageList16: TsAlphaImageList;
sStatusBar1: TsStatusBar;
sGauge3: TsGauge;
ImageList24: TsAlphaImageList;
sFrameLookBar1: TsFrameBar;
MainMenu1: TMainMenu;
File1: TMenuItem;
Exit1: TMenuItem;
AvailableSkinsMenu: TMenuItem;
About1: TMenuItem;
Skinned1: TMenuItem;
Enabled1: TMenuItem;
SkinsPanel: TsPanel;
SkinsListBox: TsListBox;
SkinsDirectoryEdit: TsDirectoryEdit;
sCheckBox1: TsCheckBox;
sSkinProvider1: TsSkinProvider;
N1: TMenuItem;
BuildinSkins: TMenuItem;
ExternalSkins: TMenuItem;
PopupMenu1: TPopupMenu;
Skinned2: TMenuItem;
Hints2: TMenuItem;
Enabled2: TMenuItem;
Exit2: TMenuItem;
MainActionList: TActionList;
ActionSkinned: TAction;
ActionHintsDisable: TAction;
ActionEnabled: TAction;
ActionClose: TWindowClose;
ActionOverView: TAction;
sCoolBar1: TsCoolBar;
sPanel1: TsPanel;
sPanel2: TsPanel;
sBitBtn1: TsSpeedButton;
ActionAnimation: TAction;
Allowanimation1: TMenuItem;
Allowanimation2: TMenuItem;
N3: TMenuItem;
ActionHintsSkinned: TAction;
ActionHintsCustom: TAction;
Skinnedhints1: TMenuItem;
Customhints1: TMenuItem;
Hintskind1: TMenuItem;
Hintsshowing1: TMenuItem;
Custom1: TMenuItem;
Skinned3: TMenuItem;
Disabled1: TMenuItem;
sLabelFX1: TsLabelFX;
sSkinManager1: TsSkinManager;
sMagnifier1: TsMagnifier;
Openmagnifier1: TMenuItem;
sTrackBar1: TsTrackBar;
sStickyLabel1: TsStickyLabel;
sStickyLabel3: TsStickyLabel;
sTrackBar2: TsTrackBar;
Dialogs1: TMenuItem;
Standard1: TMenuItem;
miOpenDialog1: TMenuItem;
miSaveDialog1: TMenuItem;
miOpenPictureDialog1: TMenuItem;
miSavePictureDialog1: TMenuItem;
miFontDialog1: TMenuItem;
miColorDialog1: TMenuItem;
miPrintDialog1: TMenuItem;
miPrinterSetupDialog1: TMenuItem;
Additional1: TMenuItem;
miAlphaColorDialog1: TMenuItem;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
OpenPictureDialog2: TOpenPictureDialog;
SavePictureDialog1: TSavePictureDialog;
FontDialog1: TFontDialog;
ColorDialog1: TColorDialog;
PrintDialog1: TPrintDialog;
PrinterSetupDialog1: TPrinterSetupDialog;
FindDialog1: TFindDialog;
ReplaceDialog1: TReplaceDialog;
miFindDialog1: TMenuItem;
miReplaceDialog1: TMenuItem;
SelectSkin1: TMenuItem;
N2: TMenuItem;
sColorDialog1: TsColorDialog;
SelectSkindialog1: TMenuItem;
ActionCloseForm: TAction;
sLabel1: TsLabel;
sLabel2: TsLabel;
sSpeedButton1: TsSpeedButton;
ImageList32: TsAlphaImageList;
ActionHintsStd: TAction;
sAlphaHints1: TsAlphaHints;
Standard2: TMenuItem;
Standard3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
Image1: TImage;
ImgList_MultiState: TsAlphaImageList;
ImgList_Multi16: TsAlphaImageList;
procedure FormShow(Sender: TObject);
procedure sSkinManager1AfterChange(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FrameDemo1Items0CreateFrame(Sender: TObject; var Frame: TCustomFrame);
procedure sFrameLookBar1Items2CreateFrame(Sender: TObject; var Frame: TCustomFrame);
procedure sFrameLookBar1Items3CreateFrame(Sender: TObject; var Frame: TCustomFrame);
procedure sSpeedButton1Click(Sender: TObject);
procedure SkinMenuClick(Sender: TObject);
procedure SkinsListBoxClick(Sender: TObject);
procedure SkinsDirectoryEditChange(Sender: TObject);
procedure sSkinManager1BeforeChange(Sender: TObject);
procedure sSkinManager1GetMenuExtraLineData(FirstItem: TMenuItem; var SkinSection, Caption: String; var Glyph: TBitmap; var LineVisible: Boolean);
procedure ActionSkinnedExecute(Sender: TObject);
procedure ActionHintsDisableExecute(Sender: TObject);
procedure ActionEnabledExecute(Sender: TObject);
procedure ActionCloseExecute(Sender: TObject);
procedure ActionOverViewExecute(Sender: TObject);
procedure ActionAnimationExecute(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure sSkinProvider1TitleButtons0MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure ActionHintsSkinnedExecute(Sender: TObject);
procedure ActionHintsCustomExecute(Sender: TObject);
procedure sLabelFX1MouseEnter(Sender: TObject);
procedure sLabelFX1MouseLeave(Sender: TObject);
procedure sLabelFX1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure sLabelFX1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure sTrackBar2MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
procedure Openmagnifier1Click(Sender: TObject);
procedure sHintManager1ShowHint(var HintStr: String; var CanShow: Boolean; var HintInfo: THintInfo; var Frame: TFrame);
procedure miOpenDialog1Click(Sender: TObject);
procedure miSaveDialog1Click(Sender: TObject);
procedure miOpenPictureDialog1Click(Sender: TObject);
procedure miSavePictureDialog1Click(Sender: TObject);
procedure miFontDialog1Click(Sender: TObject);
procedure miColorDialog1Click(Sender: TObject);
procedure miPrintDialog1Click(Sender: TObject);
procedure miPrinterSetupDialog1Click(Sender: TObject);
procedure miFindDialog1Click(Sender: TObject);
procedure miReplaceDialog1Click(Sender: TObject);
procedure SelectSkin1Click(Sender: TObject);
procedure miAlphaColorDialog1Click(Sender: TObject);
procedure sMagnifier1DblClick(Sender: TObject);
procedure ActionCloseFormExecute(Sender: TObject);
procedure sTrackBar1Change(Sender: TObject);
procedure sTrackBar2Change(Sender: TObject);
procedure ActionHintsStdExecute(Sender: TObject);
public
PressedBtn : TObject;
procedure WndProc(var Message: TMessage); override;
procedure UpdateFrame(Sender : TObject = nil);
procedure GenerateSkinsList;
end;
var
IniName : string;
MainForm: TMainForm;
Loading : boolean;
OldFrame, CurrentFrame : TFrame;
Animated : boolean = True;
DialogLoading : boolean = False;
AppLoading : boolean; // Prevent of frame animation while app loading
FormShowed : boolean = False; // This variable used in first form initialization
// in the OnShow event. Used for preventing of repeated init after each form recreating.
// Form.OnShow event is processed after each switching to skinned or non-skinned mode.
implementation
uses sMaskData, sStyleSimply, sSkinProps, ShellApi, sMessages, sStoreUtils, sGraphUtils, sVclUtils,
UnitBarControls, UnitInvisible, sHintDesigner, acntUtils, sConst, acSelectSkin, sCommonData, UnitHints;
{$R *.DFM}
const
RegSection = 'Software\AlphaSkins\Editor'; // Used with ASkinEditor
var
PreviewMode : boolean = False; // Used with ASkinEditor
function GetWindowsDir: string; // For work with Ini-file
var
Buffer: array[0..1023] of Char;
begin
SetString(Result, Buffer, GetWindowsDirectory(Buffer, SizeOf(Buffer)));
end;
procedure TMainForm.FormShow(Sender: TObject);
begin
if FormShowed then Exit;
AppLoading := True;
FormShowed := True; // preventing of repeated initialization
SkinsDirectoryEdit.Text := sSkinManager1.GetFullSkinDirectory;
ActionOverView.Execute; // Creating and showing TFrameAbout
// Available skins searching
GenerateSkinsList;
sFrameLookBar1.OpenItem(0, True); // Opening of first framebar item
sPanel1.Width := 1000; // Aligning of the "Close" button to right
AppLoading := False;
// Disable hints
ActionHintsDisable.Execute;
end;
procedure TMainForm.sSkinManager1AfterChange(Sender: TObject);
var
i : integer;
b : boolean;
begin
i := sSkinManager1.GetSkinIndex(s_Form);
if sSkinManager1.IsValidSkinIndex(i) then begin
i := SkinsListBox.Items.IndexOf(sSkinManager1.SkinName);
if i <> SkinsListBox.ItemIndex then begin
Loading := True;
SkinsListBox.Items.BeginUpdate;
SkinsListBox.ItemIndex := i;
SkinsListBox.Items.EndUpdate;
Loading := False;
end;
b := True;
for i := 0 to Buildinskins.Count - 1 do // Search of item with current skin name
if b and (DelChars(Buildinskins.Items[i].Caption, '&') = sSkinManager1.SkinName) then begin
Buildinskins.Items[i].Checked := True;
b := False;
end else Buildinskins.Items[i].Checked := False;
for i := 0 to Externalskins.Count - 1 do // Search of item with current skin name
if b and (DelChars(Externalskins.Items[i].Caption, '&') = sSkinManager1.SkinName) then begin
Externalskins.Items[i].Checked := True;
b := False;
end else Externalskins.Items[i].Checked := False;
end;
// Disabling action if animation is not defined in skin
end;
// Messages hooking used for work with ASkinEditor.exe program only //////////
procedure TMainForm.WndProc(var Message: TMessage);
const
ASE_CLOSE = 1;
ASE_UPDATE = 2;
var
SkinsPath, SkinName : string;
sl : TStringList;
M : TMessage;
i : integer;
begin
if (Message.Msg = $A400) then begin
case Message.WParam of
ASE_CLOSE : begin
Close;
Exit
end;
ASE_UPDATE : begin
SkinsPath := ReadRegString(HKEY_CURRENT_USER, RegSection, 'SourcesPath');
if SkinsPath <> '' then begin
if SkinsPath <> sSkinManager1.SkinDirectory then begin
sSkinManager1.SkinDirectory := SkinsPath;
SkinsDirectoryEdit.Text := SkinsPath;
sl := TStringList.Create;
sSkinManager1.GetSkinNames(sl);
SkinsListBox.Items.BeginUpdate;
SkinsListBox.Clear;
for i := 0 to sl.Count - 1 do SkinsListBox.Items.Add(sl[i]);
// If no available skins...
FreeAndNil(sl);
SkinsListBox.Items.EndUpdate;
end;
if SkinsPath <> '' then begin
SkinName := ReadRegString(HKEY_CURRENT_USER, RegSection, 'SkinName');
if (SkinName <> '') then begin
if (SkinName <> sSkinManager1.SkinName) then sSkinManager1.SkinName := SkinName else begin
NonAutoUpdate := True;
sSkinManager1.SkinData.Active := False;
RestrictDrawing := True;
sSkinManager1.SkinName := SkinName;
NonAutoUpdate := False;
sSkinManager1.SkinData.Active := True;
M := MakeMessage(SM_ALPHACMD, MakeWParam(0, AC_SETNEWSKIN), longint(sSkinManager1), 0);
AppBroadCastS(M);
sSkinManager1.InitConstantIndexes;
RestrictDrawing := False;
M := MakeMessage(SM_ALPHACMD, MakeWParam(0, AC_REFRESH), longint(sSkinManager1), 0);
AppBroadCastS(M);
end
end
end;
end
end;
end;
end
else inherited;
end;
procedure TMainForm.FormClose(Sender: TObject; var Action: TCloseAction);
begin
// Save window position in Ini-file
sStoreUtils.WriteIniStr('Demo', 'Top', IntToStr(Top), IniName);
sStoreUtils.WriteIniStr('Demo', 'Left', IntToStr(Left), IniName);
end;
procedure TMainForm.UpdateFrame(Sender : TObject);
var
wTime : word;
begin
if Animated then wTime := 100 else wTime := 0;
if Assigned(MainForm) and Assigned(CurrentFrame) then begin
if Sender <> nil then TsSpeedButton(Sender).ImageIndex := 1;
CurrentFrame.Visible := False;
CurrentFrame.SetBounds(Mainform.sFrameLookBar1.Left + Mainform.sFrameLookBar1.Width + 6,
Mainform.sFrameLookBar1.Top,
SkinsPanel.Left - Mainform.sFrameLookBar1.Width - Mainform.sFrameLookBar1.Left - 12,
Mainform.sFrameLookBar1.Height);
CurrentFrame.Parent := MainForm;
if Animated then begin
if Assigned(OldFrame) then FreeAndNil(OldFrame);
Application.ProcessMessages;
end;
if not ActionOverView.Enabled then begin
ActionOverView.Enabled := True;
sSkinProvider1.RepaintMenu;
end;
if sSkinManager1.Active and not AppLoading then begin
PrepareForAnimation(CurrentFrame);
CurrentFrame.Visible := True;
AnimShowControl(CurrentFrame, wTime);
end
else begin
CurrentFrame.Visible := True;
CurrentFrame.Repaint
end;
if Assigned(OldFrame) then FreeAndNil(OldFrame);
end;
end;
procedure TMainForm.FrameDemo1Items0CreateFrame(Sender: TObject; var Frame: TCustomFrame);
begin Frame := TFrameBarControls.Create(nil) end;
procedure TMainForm.sFrameLookBar1Items2CreateFrame(Sender: TObject; var Frame: TCustomFrame);
begin Frame := TFrameInvisible.Create(nil) end;
procedure TMainForm.sFrameLookBar1Items3CreateFrame(Sender: TObject; var Frame: TCustomFrame);
begin
Frame := TFrameContact.Create(nil);
// Controls initialization
TFrameContact(Frame).sCheckBox1.Checked := beMouseEnter in sSkinManager1.AnimEffects.Buttons.Events;
TFrameContact(Frame).sCheckBox2.Checked := beMouseLeave in sSkinManager1.AnimEffects.Buttons.Events;
TFrameContact(Frame).sCheckBox3.Checked := beMouseDown in sSkinManager1.AnimEffects.Buttons.Events;
TFrameContact(Frame).sCheckBox4.Checked := beMouseup in sSkinManager1.AnimEffects.Buttons.Events;
end;
procedure TMainForm.sSpeedButton1Click(Sender: TObject);
begin
ActionAnimation.Execute;
end;
procedure TMainForm.SkinMenuClick(Sender: TObject);
begin
sSkinManager1.SkinName := DelChars(TMenuItem(Sender).Caption, '&');
end;
procedure TMainForm.SkinsListBoxClick(Sender: TObject);
begin
if not Loading and (sSkinManager1.SkinName <> SkinsListBox.Items[SkinsListBox.ItemIndex])
then sSkinManager1.SkinName := SkinsListBox.Items[SkinsListBox.ItemIndex];
end;
procedure TMainForm.SkinsDirectoryEditChange(Sender: TObject);
begin
if DirectoryExists(SkinsDirectoryEdit.Text) and (sSkinManager1.SkinDirectory <> SkinsDirectoryEdit.Text) then begin
sSkinManager1.SkinDirectory := SkinsDirectoryEdit.Text;
GenerateSkinsList;
end;
end;
procedure TMainForm.GenerateSkinsList;
var
sl : TStringList;
i : integer;
mi : TMenuItem;
begin
sl := TStringList.Create;
sSkinManager1.GetSkinNames(sl);
SkinsListBox.Items.BeginUpdate;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -