⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mainunit.pas

📁 I mComputermaster programmisDelphi+pascal
💻 PAS
📖 第 1 页 / 共 2 页
字号:
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 + -