spDialogs.pas
上传用户:hylc_2004
上传日期:2014-01-23
资源大小:46800k
文件大小:59k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. {*******************************************************************}
  2. {                                                                   }
  3. {       Almediadev Visual Component Library                         }
  4. {       DynamicSkinForm                                             }
  5. {       Version 5.60                                                }
  6. {                                                                   }
  7. {       Copyright (c) 2000-2003 Almediadev                          }
  8. {       ALL RIGHTS RESERVED                                         }
  9. {                                                                   }
  10. {       Home:  http://www.almdev.com                                }
  11. {       Support: support@almdev.com                                 }
  12. {                                                                   }
  13. {*******************************************************************}
  14. unit spDialogs;
  15. interface
  16. uses Windows, SysUtils, Messages, Classes, Graphics, Controls, Forms,
  17.      DynamicSkinForm, SkinData, SkinCtrls, SkinBoxCtrls, Dialogs, StdCtrls, ExtCtrls,
  18.      spSkinShellCtrls;
  19. type
  20.   TspPDShowType = (stStayOnTop, stModal);
  21.   TspSkinProgressDialog = class(TComponent)
  22.   protected
  23.     FShowType: TspPDShowType;
  24.     FOnCancel: TNotifyEvent;
  25.     FOnShow: TNotifyEvent;
  26.     FExecute: Boolean;
  27.     Gauge: TspSkinGauge;
  28.     Form: TForm;
  29.     FSD: TspSkinData;
  30.     FCtrlFSD: TspSkinData;
  31.     FButtonSkinDataName: String;
  32.     FGaugeSkinDataName: String;
  33.     FLabelSkinDataName: String;
  34.     FDefaultLabelFont: TFont;
  35.     FDefaultGaugeFont: TFont;
  36.     FDefaultButtonFont: TFont;
  37.     FAlphaBlend: Boolean;
  38.     FAlphaBlendValue: Byte;
  39.     FAlphaBlendAnimation: Boolean;
  40.     FUseSkinFont: Boolean;
  41.     FMinValue, FMaxValue, FValue: Integer;
  42.     FCaption: String;
  43.     FLabelCaption: String;
  44.     FShowPercent: Boolean;
  45.     procedure SetValue(AValue: Integer);
  46.     procedure SetDefaultLabelFont(Value: TFont);
  47.     procedure SetDefaultButtonFont(Value: TFont);
  48.     procedure SetDefaultGaugeFont(Value: TFont);
  49.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  50.     procedure CancelBtnClick(Sender: TObject);
  51.     procedure OnFormClose(Sender: TObject; var Action: TCloseAction);
  52.     procedure OnFormShow(Sender: TObject);
  53.   public
  54.     function Execute: Boolean;
  55.     constructor Create(AOwner: TComponent); override;
  56.     destructor Destroy; override;
  57.   published
  58.     property ShowType: TspPDShowType read FShowType write FShowType;
  59.     property Caption: String read FCaption write FCaption;
  60.     property LabelCaption: String read FLabelCaption write FLabelCaption;
  61.     property ShowPercent: Boolean read FShowPercent write FShowPercent;
  62.     property MinValue: Integer read FMinValue write FMinValue;
  63.     property MaxValue: Integer read FMaxValue write FMaxValue;
  64.     property Value: Integer read FValue write SetValue;
  65.     property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  66.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  67.     property AlphaBlendAnimation: Boolean
  68.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  69.     property SkinData: TspSkinData read FSD write FSD;
  70.     property CtrlSkinData: TspSkinData read FCtrlFSD write FCtrlFSD;
  71.     property ButtonSkinDataName: String
  72.       read FButtonSkinDataName write FButtonSkinDataName;
  73.     property LabelSkinDataName: String
  74.       read FLabelSkinDataName write FLabelSkinDataName;
  75.     property GaugeSkinDataName: String
  76.      read FGaugeSkinDataName write FGaugeSkinDataName;
  77.     property DefaultLabelFont: TFont read FDefaultLabelFont write SetDefaultLabelFont;
  78.     property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
  79.     property DefaultGaugeFont: TFont read FDefaultGaugeFont write SetDefaultGaugeFont;
  80.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  81.     property OnShow: TNotifyEvent read FOnShow write FOnShow;
  82.     property OnCancel: TNotifyEvent read FOnCancel write FOnCancel;
  83.   end;
  84.   TspSkinInputDialog = class(TComponent)
  85.   protected
  86.     Form: TForm;
  87.     FSD: TspSkinData;
  88.     FCtrlFSD: TspSkinData;
  89.     FButtonSkinDataName: String;
  90.     FEditSkinDataName: String;
  91.     FLabelSkinDataName: String;
  92.     FDefaultLabelFont: TFont;
  93.     FDefaultEditFont: TFont;
  94.     FDefaultButtonFont: TFont;
  95.     FUseSkinFont: Boolean;
  96.     FAlphaBlend: Boolean;
  97.     FAlphaBlendValue: Byte;
  98.     FAlphaBlendAnimation: Boolean;
  99.     procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  100.     procedure SetDefaultLabelFont(Value: TFont);
  101.     procedure SetDefaultButtonFont(Value: TFont);
  102.     procedure SetDefaultEditFont(Value: TFont);
  103.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  104.   public
  105.     function InputBox(const ACaption, APrompt, ADefault: string): string;
  106.     function InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;
  107.     constructor Create(AOwner: TComponent); override;
  108.     destructor Destroy; override;
  109.   published
  110.     property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  111.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  112.     property AlphaBlendAnimation: Boolean
  113.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  114.     property SkinData: TspSkinData read FSD write FSD;
  115.     property CtrlSkinData: TspSkinData read FCtrlFSD write FCtrlFSD;
  116.     property ButtonSkinDataName: String
  117.       read FButtonSkinDataName write FButtonSkinDataName;
  118.     property LabelSkinDataName: String
  119.       read FLabelSkinDataName write FLabelSkinDataName;
  120.     property EditSkinDataName: String
  121.      read FEditSkinDataName write FEditSkinDataName;
  122.     property DefaultLabelFont: TFont read FDefaultLabelFont write SetDefaultLabelFont;
  123.     property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
  124.     property DefaultEditFont: TFont read FDefaultEditFont write SetDefaultEditFont;
  125.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  126.   end;
  127.   TspFontDlgForm = class(TForm)
  128.   public
  129.     DSF: TspDynamicSkinForm;
  130.     FontNameBox: TspSkinFontComboBox;
  131.     FontColorBox: TspSkinColorComboBox;
  132.     FontSizeEdit: TspSkinSpinEdit;
  133.     FontHeightEdit: TspSkinSpinEdit;
  134.     FontExamplePanel: TspSkinPanel;
  135.     FontExampleLabel: TLabel;
  136.     OkButton, CancelButton: TspSkinButton;
  137.     FontNameLabel, FontColorLabel, FontSizeLabel,
  138.     FontHeightLabel, FontStyleLabel, FontExLabel: TspSkinStdLabel;
  139.     BoldButton, ItalicButton,
  140.     UnderLineButton, StrikeOutButton: TspSkinSpeedButton;
  141.     constructor Create(AOwner: TComponent); override;
  142.     procedure FontSizeChange(Sender: TObject);
  143.     procedure FontHeightChange(Sender: TObject);
  144.     procedure FontNameChange(Sender: TObject);
  145.     procedure FontColorChange(Sender: TObject);
  146.     procedure BoldButtonClick(Sender: TObject);
  147.     procedure ItalicButtonClick(Sender: TObject);
  148.     procedure StrikeOutButtonClick(Sender: TObject);
  149.     procedure UnderLineButtonClick(Sender: TObject);
  150.   end;
  151.   TspSkinFontDialog = class(TComponent)
  152.   private
  153.     FSD: TspSkinData;
  154.     FCtrlFSD: TspSkinData;
  155.     FDefaultFont: TFont;
  156.     FTitle: String;
  157.     FDlgFrm: TspFontDlgForm;
  158.     FOnChange: TNotifyEvent;
  159.     FFont: TFont;
  160.     FShowSizeEdit, FShowHeightEdit: Boolean;
  161.     FAlphaBlend: Boolean;
  162.     FAlphaBlendAnimation: Boolean;
  163.     FAlphaBlendValue: Byte;
  164.     function GetTitle: string;
  165.     procedure SetTitle(const Value: string);
  166.     procedure SetFont(Value: TFont);
  167.     procedure SetDefaultFont(Value: TFont);
  168.   protected
  169.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  170.     procedure Change;
  171.   public
  172.     constructor Create(AOwner: TComponent); override;
  173.     destructor Destroy; override;
  174.     function Execute: Boolean;
  175.   published
  176.      property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  177.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  178.     property AlphaBlendAnimation: Boolean
  179.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  180.     property SkinData: TspSkinData read FSD write FSD;
  181.     property CtrlSkinData: TspSkinData read FCtrlFSD write FCtrlFSD;
  182.     property DefaultFont: TFont read FDefaultFont write SetDefaultFont;
  183.     property Font: TFont read FFont write SetFont;
  184.     property Title: string read GetTitle write SetTitle;
  185.     property ShowSizeEdit: Boolean read FShowSizeEdit write FShowSizeEdit;
  186.     property ShowHeightEdit: Boolean read FShowHeightEdit write FShowHeightEdit;
  187.     property OnChange: TnotifyEvent read FOnChange write FOnChange;
  188.   end;
  189.   TspSkinTextDialog = class(TComponent)
  190.   protected
  191.     Memo: TspSkinMemo2;
  192.     FShowToolBar: Boolean;
  193.     FCaption: String;
  194.     FSD: TspSkinData;
  195.     FCtrlFSD: TspSkinData;
  196.     FButtonSkinDataName: String;
  197.     FMemoSkinDataName: String;
  198.     FDefaultMemoFont: TFont;
  199.     FDefaultButtonFont: TFont;
  200.     FUseSkinFont: Boolean;
  201.     FClientWidth: Integer;
  202.     FClientHeight: Integer;
  203.     FLines: TStrings;
  204.     FSkinOpenDialog: TspSkinOpenDialog;
  205.     FSkinSaveDialog: TspSkinSaveDialog;
  206.     FAlphaBlend: Boolean;
  207.     FAlphaBlendAnimation: Boolean;
  208.     FAlphaBlendValue: Byte;
  209.     procedure SetLines(Value: TStrings);
  210.     procedure SetClientWidth(Value: Integer);
  211.     procedure SetClientHeight(Value: Integer);
  212.     procedure SetDefaultButtonFont(Value: TFont);
  213.     procedure SetDefaultMemoFont(Value: TFont);
  214.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  215.     //
  216.     procedure NewButtonClick(Sender: TObject);
  217.     procedure OpenButtonClick(Sender: TObject);
  218.     procedure SaveButtonClick(Sender: TObject);
  219.     procedure CopyButtonClick(Sender: TObject);
  220.     procedure CutButtonClick(Sender: TObject);
  221.     procedure PasteButtonClick(Sender: TObject);
  222.     procedure DeleteButtonClick(Sender: TObject);
  223.     //
  224.   public
  225.     constructor Create(AOwner: TComponent); override;
  226.     destructor Destroy; override;
  227.     function Execute: Boolean;
  228.   published
  229.     property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  230.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  231.     property AlphaBlendAnimation: Boolean
  232.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  233.     property SkinOpenDialog: TspSkinOpenDialog
  234.       read FSkinOpenDialog write FSkinOpenDialog;
  235.     property SkinSaveDialog: TspSkinSaveDialog
  236.       read FSkinSaveDialog write FSkinSaveDialog;
  237.     property ShowToolBar: Boolean read FShowToolBar write FShowToolBar;
  238.     property Lines: TStrings read FLines write SetLines;
  239.     property ClientWidth: Integer read FClientWidth write SetClientWidth;
  240.     property ClientHeight: Integer read FClientHeight write SetClientHeight;
  241.     property Caption: String read FCaption write FCaption;
  242.     property SkinData: TspSkinData read FSD write FSD;
  243.     property CtrlSkinData: TspSkinData read FCtrlFSD write FCtrlFSD;
  244.     property ButtonSkinDataName: String
  245.       read FButtonSkinDataName write FButtonSkinDataName;
  246.     property MemoSkinDataName: String
  247.      read FMemoSkinDataName write FMemoSkinDataName;
  248.     property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
  249.     property DefaultMemoFont: TFont read FDefaultMemoFont write SetDefaultMemoFont;
  250.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  251.   end;
  252.   TspSkinPasswordDialog = class(TComponent)
  253.   protected
  254.     FLoginMode: Boolean;
  255.     FCaption: String;
  256.     FLogin: String;
  257.     FLoginCaption: String;
  258.     FPasswordCaption: String;
  259.     FPassword: String;
  260.     FPasswordKind: TspPasswordKind;
  261.     FSD: TspSkinData;
  262.     FCtrlFSD: TspSkinData;
  263.     FButtonSkinDataName: String;
  264.     FEditSkinDataName: String;
  265.     FLabelSkinDataName: String;
  266.     FDefaultLabelFont: TFont;
  267.     FDefaultEditFont: TFont;
  268.     FDefaultButtonFont: TFont;
  269.     FAlphaBlend: Boolean;
  270.     FAlphaBlendAnimation: Boolean;
  271.     FAlphaBlendValue: Byte;
  272.     FUseSkinFont: Boolean;
  273.     procedure SetDefaultLabelFont(Value: TFont);
  274.     procedure SetDefaultButtonFont(Value: TFont);
  275.     procedure SetDefaultEditFont(Value: TFont);
  276.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  277.   public
  278.     constructor Create(AOwner: TComponent); override;
  279.     destructor Destroy; override;
  280.     function Execute: Boolean;
  281.   published
  282.     property LoginMode: Boolean read FLoginMode write FLoginMode;
  283.     property Login: String read FLogin write FLogin;
  284.     property LoginCaption: String read FLoginCaption write FLoginCaption;
  285.     property Password: String read FPassword write FPassword;
  286.     property PasswordKind: TspPasswordKind read FPasswordKind write FPasswordKind;
  287.     property Caption: String read FCaption write FCaption;
  288.     property PasswordCaption: String read FPasswordCaption write FPasswordCaption;
  289.     property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  290.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  291.     property AlphaBlendAnimation: Boolean
  292.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  293.     property SkinData: TspSkinData read FSD write FSD;
  294.     property CtrlSkinData: TspSkinData read FCtrlFSD write FCtrlFSD;
  295.     property ButtonSkinDataName: String
  296.       read FButtonSkinDataName write FButtonSkinDataName;
  297.     property LabelSkinDataName: String
  298.       read FLabelSkinDataName write FLabelSkinDataName;
  299.     property EditSkinDataName: String
  300.      read FEditSkinDataName write FEditSkinDataName;
  301.     property DefaultLabelFont: TFont read FDefaultLabelFont write SetDefaultLabelFont;
  302.     property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
  303.     property DefaultEditFont: TFont read FDefaultEditFont write SetDefaultEditFont;
  304.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  305.   end;
  306.   TspSkinConfirmDialog = class(TComponent)
  307.   protected
  308.     FCaption: String;
  309.     FPassword1: String;
  310.     FPassword1Caption: String;
  311.     FPassword2: String;
  312.     FPassword2Caption: String;
  313.     FPasswordKind: TspPasswordKind;
  314.     FSD: TspSkinData;
  315.     FCtrlFSD: TspSkinData;
  316.     FButtonSkinDataName: String;
  317.     FEditSkinDataName: String;
  318.     FLabelSkinDataName: String;
  319.     FDefaultLabelFont: TFont;
  320.     FDefaultEditFont: TFont;
  321.     FDefaultButtonFont: TFont;
  322.     FAlphaBlend: Boolean;
  323.     FAlphaBlendAnimation: Boolean;
  324.     FAlphaBlendValue: Byte;
  325.     FUseSkinFont: Boolean;
  326.     procedure SetDefaultLabelFont(Value: TFont);
  327.     procedure SetDefaultButtonFont(Value: TFont);
  328.     procedure SetDefaultEditFont(Value: TFont);
  329.     procedure Notification(AComponent: TComponent;  Operation: TOperation); override;
  330.   public
  331.     constructor Create(AOwner: TComponent); override;
  332.     destructor Destroy; override;
  333.     function Execute: Boolean;
  334.   published
  335.     property Password1: String read FPassword1 write FPassword1;
  336.     property Password1Caption: String read FPassword1Caption write FPassword1Caption;
  337.     property Password2: String read FPassword2 write FPassword2;
  338.     property Password2Caption: String read FPassword2Caption write FPassword2Caption;
  339.     property PasswordKind: TspPasswordKind read FPasswordKind write FPasswordKind;
  340.     property Caption: String read FCaption write FCaption;
  341.     property AlphaBlend: Boolean read FAlphaBlend write FAlphaBlend;
  342.     property AlphaBlendValue: Byte read FAlphaBlendValue write FAlphaBlendValue;
  343.     property AlphaBlendAnimation: Boolean
  344.       read FAlphaBlendAnimation write FAlphaBlendAnimation;
  345.     property SkinData: TspSkinData read FSD write FSD;
  346.     property CtrlSkinData: TspSkinData read FCtrlFSD write FCtrlFSD;
  347.     property ButtonSkinDataName: String
  348.       read FButtonSkinDataName write FButtonSkinDataName;
  349.     property LabelSkinDataName: String
  350.       read FLabelSkinDataName write FLabelSkinDataName;
  351.     property EditSkinDataName: String
  352.      read FEditSkinDataName write FEditSkinDataName;
  353.     property DefaultLabelFont: TFont read FDefaultLabelFont write SetDefaultLabelFont;
  354.     property DefaultButtonFont: TFont read FDefaultButtonFont write SetDefaultButtonFont;
  355.     property DefaultEditFont: TFont read FDefaultEditFont write SetDefaultEditFont;
  356.     property UseSkinFont: Boolean read FUseSkinFont write FUseSkinFont;
  357.   end;
  358. implementation
  359.   Uses spConst;
  360. {$R *.res}
  361. constructor TspSkinInputDialog.Create;
  362. begin
  363.   inherited Create(AOwner);
  364.   FAlphaBlend := False;
  365.   FAlphaBlendAnimation := False;
  366.   FAlphaBlendValue := 200;
  367.   FButtonSkinDataName := 'button';
  368.   FLabelSkinDataName := 'stdlabel';
  369.   FEditSkinDataName := 'edit';
  370.   FDefaultLabelFont := TFont.Create;
  371.   FDefaultButtonFont := TFont.Create;
  372.   FDefaultEditFont := TFont.Create;
  373.   FUseSkinFont := True;
  374.   with FDefaultLabelFont do
  375.   begin
  376.     Name := 'Arial';
  377.     Style := [];
  378.     Height := 14;
  379.   end;
  380.   with FDefaultButtonFont do
  381.   begin
  382.     Name := 'Arial';
  383.     Style := [];
  384.     Height := 14;
  385.   end;
  386.   with FDefaultEditFont do
  387.   begin
  388.     Name := 'Arial';
  389.     Style := [];
  390.     Height := 14;
  391.   end;
  392. end;
  393. destructor TspSkinInputDialog.Destroy;
  394. begin
  395.   FDefaultLabelFont.Free;
  396.   FDefaultButtonFont.Free;
  397.   FDefaultEditFont.Free;
  398.   inherited;
  399. end;
  400. procedure TspSkinInputDialog.EditKeyDown;
  401. begin
  402.   if Key = 27
  403.   then
  404.     Form.ModalResult := mrCancel
  405.   else
  406.   if Key = 13
  407.   then
  408.     Form.ModalResult := mrOk;
  409. end;
  410. procedure TspSkinInputDialog.SetDefaultLabelFont;
  411. begin
  412.   FDefaultLabelFont.Assign(Value);
  413. end;
  414. procedure TspSkinInputDialog.SetDefaultEditFont;
  415. begin
  416.   FDefaultEditFont.Assign(Value);
  417. end;
  418. procedure TspSkinInputDialog.SetDefaultButtonFont;
  419. begin
  420.   FDefaultButtonFont.Assign(Value);
  421. end;
  422. procedure TspSkinInputDialog.Notification;
  423. begin
  424.   inherited Notification(AComponent, Operation);
  425.   if (Operation = opRemove) and (AComponent = FSD) then FSD := nil;
  426.   if (Operation = opRemove) and (AComponent = FCtrlFSD) then FCtrlFSD := nil;
  427. end;
  428. function GetAveCharSize(Canvas: TCanvas): TPoint;
  429. var
  430.   I: Integer;
  431.   Buffer: array[0..51] of Char;
  432. begin
  433.   for I := 0 to 25 do Buffer[I] := Chr(I + Ord('A'));
  434.   for I := 0 to 25 do Buffer[I + 26] := Chr(I + Ord('a'));
  435.   GetTextExtentPoint(Canvas.Handle, Buffer, 52, TSize(Result));
  436.   Result.X := Result.X div 52;
  437. end;
  438. function TspSkinInputDialog.InputQuery(const ACaption, APrompt: string; var Value: string): Boolean;
  439. const
  440.   WS_EX_LAYERED = $80000;
  441.   
  442. var
  443.   DSF: TspDynamicSkinForm;
  444.   Prompt: TspSkinStdLabel;
  445.   Edit: TspSkinEdit;
  446.   DialogUnits: TPoint;
  447.   ButtonTop, ButtonWidth, ButtonHeight: Integer;
  448. begin
  449.   Form := TForm.Create(Application);
  450.   Form.BorderStyle := bsDialog;
  451.   Form.Caption := ACaption;
  452.   Form.Position := poScreenCenter;
  453.   DSF := TspDynamicSkinForm.Create(Form);
  454.   DSF.BorderIcons := [];
  455.   DSF.SkinData := SkinData;
  456.   DSF.MenusSkinData := CtrlSkinData;
  457.   DSF.SizeAble := False;
  458.   DSF.AlphaBlend := AlphaBlend;
  459.   DSF.AlphaBlendAnimation := AlphaBlendAnimation;
  460.   DSF.AlphaBlendValue := AlphaBlendValue;
  461.   //
  462.   try
  463.   with Form do
  464.   begin
  465.     Canvas.Font := Font;
  466.     DialogUnits := GetAveCharSize(Canvas);
  467.     ClientWidth := MulDiv(180, DialogUnits.X, 4);
  468.   end;
  469.   Prompt := TspSkinStdLabel.Create(Form);
  470.   with Prompt do
  471.   begin
  472.     Parent := Form;
  473.     Caption := APrompt;
  474.     Left := MulDiv(8, DialogUnits.X, 4);
  475.     Top := MulDiv(8, DialogUnits.Y, 8);
  476.     Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
  477.     WordWrap := True;
  478.     DefaultFont := DefaultLabelFont;
  479.     UseSkinFont := Self.UseSkinFont; 
  480.     SkinDataName := FLabelSkinDataName;
  481.     SkinData := CtrlSkinData;
  482.   end;
  483.   Edit := TspSkinEdit.Create(Form);
  484.   with Edit do
  485.   begin
  486.     Parent := Form;
  487.     OnKeyDown := EditKeydown;
  488.     DefaultFont := DefaultEditFont;
  489.     UseSkinFont := Self.UseSkinFont;
  490.     Left := Prompt.Left;
  491.     Top := Prompt.Top + Prompt.Height + 5;
  492.     DefaultWidth := MulDiv(164, DialogUnits.X, 4);
  493.     MaxLength := 255;
  494.     Text := Value;
  495.     SelectAll;
  496.     SkinDataName := FEditSkinDataName;
  497.     SkinData := CtrlSkinData;
  498.   end;
  499.   ButtonTop := Edit.Top + Edit.Height + 15;
  500.   ButtonWidth := MulDiv(50, DialogUnits.X, 4);
  501.   ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
  502.   with TspSkinButton.Create(Form) do
  503.   begin
  504.     Parent := Form;
  505.     DefaultFont := DefaultButtonFont;
  506.     UseSkinFont := Self.UseSkinFont;
  507.     Caption := SP_MSG_BTN_OK;
  508.     ModalResult := mrOk;
  509.     Default := True;
  510.     SetBounds(MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
  511.               ButtonHeight);
  512.     DefaultHeight := ButtonHeight;
  513.     SkinDataName := FButtonSkinDataName;
  514.     SkinData := CtrlSkinData;
  515.   end;
  516.   with TspSkinButton.Create(Form) do
  517.   begin
  518.     Parent := Form;
  519.     DefaultFont := DefaultButtonFont;
  520.     UseSkinFont := Self.UseSkinFont;
  521.     Caption := SP_MSG_BTN_CANCEL;
  522.     ModalResult := mrCancel;
  523.     Cancel := True;
  524.     SetBounds(MulDiv(92, DialogUnits.X, 4), Edit.Top + Edit.Height + 15,
  525.               ButtonWidth, ButtonHeight);
  526.     DefaultHeight := ButtonHeight;
  527.     SkinDataName := FButtonSkinDataName;
  528.     SkinData := CtrlSkinData;
  529.     Form.ClientHeight := Top + Height + 13;
  530.   end;
  531.   if Form.ShowModal = mrOk
  532.   then
  533.     begin
  534.       Value := Edit.Text;
  535.       Result := True;
  536.     end
  537.   else
  538.     Result := False;
  539.   finally
  540.     Form.Free;
  541.   end;
  542. end;
  543. function TspSkinInputDialog.InputBox(const ACaption, APrompt, ADefault: string): string;
  544. begin
  545.   Result := ADefault;
  546.   InputQuery(ACaption, APrompt, Result);
  547. end;
  548. constructor TspSkinProgressDialog.Create;
  549. begin
  550.   inherited Create(AOwner);
  551.   FShowType := stStayOnTop;
  552.   FAlphaBlend := False;
  553.   FAlphaBlendAnimation := False;
  554.   FAlphaBlendValue := 200;
  555.   Form := nil;
  556.   Gauge := nil;
  557.   FExecute := False;
  558.   FMinValue := 0;
  559.   FMaxValue := 100;
  560.   FValue := 0;
  561.   FCaption := 'Process';
  562.   FLabelCaption := 'Name of process:';
  563.   FShowPercent := True;
  564.   FButtonSkinDataName := 'button';
  565.   FLabelSkinDataName := 'stdlabel';
  566.   FGaugeSkinDataName := 'gauge';
  567.   FDefaultLabelFont := TFont.Create;
  568.   FDefaultButtonFont := TFont.Create;
  569.   FDefaultGaugeFont := TFont.Create;
  570.   FUseSkinFont := True;
  571.   with FDefaultLabelFont do
  572.   begin
  573.     Name := 'Arial';
  574.     Style := [];
  575.     Height := 14;
  576.   end;
  577.   with FDefaultButtonFont do
  578.   begin
  579.     Name := 'Arial';
  580.     Style := [];
  581.     Height := 14;
  582.   end;
  583.   with FDefaultGaugeFont do
  584.   begin
  585.     Name := 'Arial';
  586.     Style := [];
  587.     Height := 14;
  588.   end;
  589. end;
  590. destructor TspSkinProgressDialog.Destroy;
  591. begin
  592.   FDefaultLabelFont.Free;
  593.   FDefaultButtonFont.Free;
  594.   FDefaultGaugeFont.Free;
  595.   inherited;
  596. end;
  597. procedure TspSkinProgressDialog.SetValue(AValue: Integer);
  598. begin
  599.   FValue := AValue;
  600.   if FExecute
  601.   then
  602.     begin
  603.       Gauge.Value := FValue;
  604.       if Gauge.Value = Gauge.MaxValue
  605.       then
  606.         if FShowType = stModal
  607.         then
  608.           Form.ModalResult := mrOk
  609.         else
  610.           Form.Close;  
  611.     end;  
  612. end;
  613. procedure TspSkinProgressDialog.SetDefaultLabelFont;
  614. begin
  615.   FDefaultLabelFont.Assign(Value);
  616. end;
  617. procedure TspSkinProgressDialog.SetDefaultGaugeFont;
  618. begin
  619.   FDefaultGaugeFont.Assign(Value);
  620. end;
  621. procedure TspSkinProgressDialog.SetDefaultButtonFont;
  622. begin
  623.   FDefaultButtonFont.Assign(Value);
  624. end;
  625. procedure TspSkinProgressDialog.Notification;
  626. begin
  627.   inherited Notification(AComponent, Operation);
  628.   if (Operation = opRemove) and (AComponent = FSD) then FSD := nil;
  629.   if (Operation = opRemove) and (AComponent = FCtrlFSD) then FCtrlFSD := nil;
  630. end;
  631. procedure TspSkinProgressDialog.OnFormShow(Sender: TObject);
  632. begin
  633.   if Assigned(FOnShow) then FOnShow(Self);
  634. end;
  635. procedure TspSkinProgressDialog.CancelBtnClick(Sender: TObject);
  636. begin
  637.   Form.Close;
  638.   if Assigned(FOnCancel) then FOnCancel(Self);
  639. end;
  640. procedure TspSkinProgressDialog.OnFormClose;
  641. begin
  642.   FExecute := False;
  643.   Gauge := nil;
  644.   Form := nil;
  645.   if Value <> MaxValue
  646.   then
  647.     if Assigned(FOnCancel) then FOnCancel(Self);
  648.   Action := caFree;
  649. end;
  650. function TspSkinProgressDialog.Execute;
  651. var
  652.   DSF: TspDynamicSkinForm;
  653.   Prompt: TspSkinStdLabel;
  654.   DialogUnits: TPoint;
  655.   ButtonWidth, ButtonHeight: Integer;
  656. begin
  657.   if FExecute
  658.   then
  659.     begin
  660.       Result := False;
  661.       Exit;
  662.     end;
  663.   Form := TForm.Create(Application);
  664.   Form.BorderStyle := bsDialog;
  665.   if FShowType = stStayOnTop
  666.   then
  667.      begin
  668.        Form.FormStyle := fsStayOnTop;
  669.        Form.OnClose := OnFormClose;
  670.      end;
  671.   Form.Caption := FCaption;
  672.   Form.Position := poScreenCenter;
  673.   Form.OnShow := OnFormShow;
  674.   DSF := TspDynamicSkinForm.Create(Form);
  675.   DSF.BorderIcons := [];
  676.   DSF.SkinData := SkinData;
  677.   DSF.MenusSkinData := CtrlSkinData;
  678.   DSF.AlphaBlend := AlphaBlend;
  679.   DSF.AlphaBlendAnimation := AlphaBlendAnimation;
  680.   DSF.AlphaBlendValue := AlphaBlendValue;
  681.   try
  682.   with Form do
  683.   begin
  684.     Canvas.Font := Font;
  685.     DialogUnits := GetAveCharSize(Canvas);
  686.     ClientWidth := MulDiv(180, DialogUnits.X, 4);
  687.   end;
  688.   Prompt := TspSkinStdLabel.Create(Form);
  689.   with Prompt do
  690.   begin
  691.     Parent := Form;
  692.     Left := MulDiv(8, DialogUnits.X, 4);
  693.     Top := MulDiv(8, DialogUnits.Y, 8);
  694.     Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
  695.     WordWrap := False;
  696.     DefaultFont := DefaultLabelFont;
  697.     UseSkinFont := Self.UseSkinFont;
  698.     SkinDataName := FLabelSkinDataName;
  699.     SkinData := CtrlSkinData;
  700.     Caption := FLabelCaption;
  701.   end;
  702.   Gauge := TspSkinGauge.Create(Form);
  703.   with Gauge do
  704.   begin
  705.     Parent := Form;
  706.     MinValue := FMinValue;
  707.     MaxValue := FMaxValue;
  708.     ShowPercent := FShowPercent;
  709.     Value := FValue;
  710.     DefaultFont := DefaultGaugeFont;
  711.     UseSkinFont := Self.UseSkinFont;
  712.     Left := Prompt.Left;
  713.     Top := Prompt.Top + Prompt.Height + 5;
  714.     DefaultWidth := MulDiv(164, DialogUnits.X, 4);
  715.     SkinDataName := FGaugeSkinDataName;
  716.     SkinData := CtrlSkinData;
  717.   end;
  718.   ButtonWidth := MulDiv(50, DialogUnits.X, 4);
  719.   ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
  720.   with TspSkinButton.Create(Form) do
  721.   begin
  722.     Parent := Form;
  723.     DefaultFont := DefaultButtonFont;
  724.     UseSkinFont := Self.UseSkinFont;
  725.     Caption := SP_MSG_BTN_CANCEL;
  726.     if FShowType = stStayOnTop then OnClick := CancelBtnClick;
  727.     ModalResult := mrCancel;
  728.     Cancel := True;
  729.     SetBounds(Gauge.Left + Gauge.Width - ButtonWidth, Gauge.Top + Gauge.Height + 15,
  730.               ButtonWidth, ButtonHeight);
  731.     DefaultHeight := ButtonHeight;
  732.     SkinDataName := FButtonSkinDataName;
  733.     SkinData := CtrlSkinData;
  734.     Form.ClientHeight := Top + Height + 13;
  735.   end;
  736.   FExecute := True;
  737.   if FShowType = stModal
  738.   then
  739.     begin
  740.       if Form.ShowModal = mrOk then Result := True else Result := False;
  741.       FExecute := False;
  742.     end
  743.   else
  744.     begin
  745.       Result := True;
  746.       Form.Show;
  747.     end;
  748.   finally
  749.     if FShowType = stModal
  750.     then
  751.       begin
  752.         Form.Free;
  753.         Gauge := nil;
  754.         Form := nil;
  755.       end;  
  756.   end;
  757. end;
  758. constructor TspFontDlgForm.Create(AOwner: TComponent);
  759. begin
  760.   inherited CreateNew(AOwner);
  761.   KeyPreview := True;
  762.   BorderStyle := bsDialog;
  763.   Position := poScreenCenter;
  764.   DSF := TspDynamicSkinForm.Create(Self);
  765.   FontColorLabel := TspSkinStdLabel.Create(Self);
  766.   with FontColorLabel do
  767.   begin
  768.     Left := 5;
  769.     Top := 50;
  770.     Caption := SP_FONTDLG_COLOR;
  771.     AutoSize := True;
  772.     Parent := Self;
  773.   end;
  774.   FontColorBox := TspSkinColorComboBox.Create(Self);
  775.   with FontColorBox do
  776.   begin
  777.     Left := 5;
  778.     Top := 65;
  779.     Width := 200;
  780.     DefaultHeight := 21;
  781.     Parent := Self;
  782.     ExStyle := [spcbCustomColor, spcbPrettyNames, spcbStandardColors];
  783.     OnChange := FontColorChange;
  784.   end;
  785.   FontNameLabel := TspSkinStdLabel.Create(Self);
  786.   with FontNameLabel do
  787.   begin
  788.     Left := 5;
  789.     Top := 5;
  790.     Caption := SP_FONTDLG_NAME;
  791.     AutoSize := True;
  792.     Parent := Self;
  793.   end;
  794.   FontNameBox := TspSkinFontComboBox.Create(Self);
  795.   with FontNameBox do
  796.   begin
  797.     Left := 5;
  798.     Top := 20;
  799.     Width := 200;
  800.     DefaultHeight := 21;
  801.     Parent := Self;
  802.     PopulateList;
  803.     TabOrder := 0;
  804.     TabStop := True;
  805.     OnChange := FontNameChange;
  806.   end;
  807.   FontSizeLabel := TspSkinStdLabel.Create(Self);
  808.   with FontSizeLabel do
  809.   begin
  810.     Left := 5;
  811.     Top := 95;
  812.     Caption := SP_FONTDLG_SIZE;
  813.     AutoSize := True;
  814.     Parent := Self;
  815.   end;
  816.   FontSizeEdit := TspSkinSpinEdit.Create(Self);
  817.   with  FontSizeEdit do
  818.   begin
  819.     MinValue := -100;
  820.     MaxValue := 100;
  821.     Left := 5;
  822.     Top := 110;
  823.     Parent := Self;
  824.     Width := 95;
  825.     OnChange := FontSizeChange;
  826.   end;
  827.   FontHeightLabel := TspSkinStdLabel.Create(Self);
  828.   with FontHeightLabel do
  829.   begin
  830.     Left := 110;
  831.     Top := 95;
  832.     Caption := SP_FONTDLG_HEIGHT;
  833.     AutoSize := True;
  834.     Parent := Self;
  835.   end;
  836.   FontHeightEdit := TspSkinSpinEdit.Create(Self);
  837.   with FontHeightEdit do
  838.   begin
  839.     MinValue := -500;
  840.     MaxValue := 500;
  841.     Left := 110;
  842.     Top := 110;
  843.     Width := 95;
  844.     Parent := Self;
  845.     OnChange := FontHeightChange;
  846.   end;
  847.   FontExLabel := TspSkinStdLabel.Create(Self);
  848.   with FontExLabel do
  849.   begin
  850.     Left := 210;
  851.     Top := 50;
  852.     Caption := SP_FONTDLG_EXAMPLE;
  853.     AutoSize := True;
  854.     Parent := Self;
  855.   end;
  856.   FontExamplePanel := TspSkinPanel.Create(Self);
  857.   with FontExamplePanel do
  858.   begin
  859.     Parent := Self;
  860.     BorderStyle := bvFrame;
  861.     Left := 210;
  862.     Top := 65;
  863.     Width := 185;
  864.     Height := 67;
  865.   end;
  866.   FontExampleLabel := TLabel.Create(Self);
  867.   with FontExampleLabel do
  868.   begin
  869.     Parent := FontExamplePanel;
  870.     Transparent := True;
  871.     Align := alClient;
  872.     Caption := 'AaBbYyZz';
  873.   end;
  874.   OkButton := TspSkinButton.Create(Self);
  875.   with OkButton do
  876.   begin
  877.     Caption := SP_MSG_BTN_OK;
  878.     CanFocused := True;
  879.     Left := 230;
  880.     Top := 155;
  881.     Width := 75;
  882.     DefaultHeight := 25;
  883.     Parent := Self;
  884.     ModalResult := mrOk;
  885.   end;
  886.   CancelButton := TspSkinButton.Create(Self);
  887.   with CancelButton do
  888.   begin
  889.     Caption := SP_MSG_BTN_CANCEL;
  890.     CanFocused := True;
  891.     Left := 320;
  892.     Top := 155;
  893.     Width := 75;
  894.     DefaultHeight := 25;
  895.     Parent := Self;
  896.     ModalResult := mrCancel;
  897.     Cancel := True;
  898.   end;
  899.   FontStyleLabel := TspSkinStdLabel.Create(Self);
  900.   with FontStyleLabel do
  901.   begin
  902.     Left := 210;
  903.     Top := 5;
  904.     Caption := SP_FONTDLG_STYLE;
  905.     AutoSize := True;
  906.     Parent := Self;
  907.   end;
  908.   BoldButton := TspSkinSpeedButton.Create(Self);
  909.   with BoldButton do
  910.   begin
  911.     Parent := Self;
  912.     AllowAllUp := True;
  913.     DefaultWidth := 25;
  914.     DefaultHeight := 25;
  915.     SkinDataName := 'toolbutton';
  916.     GroupIndex := 1;
  917.     NumGlyphs := 1;
  918.     Left := 210;
  919.     Top := 20;
  920.     Glyph.LoadFromResourceName(HInstance, 'SP_BOLD');
  921.     OnClick := BoldButtonClick;
  922.   end;
  923.   ItalicButton := TspSkinSpeedButton.Create(Self);
  924.   with ItalicButton do
  925.   begin
  926.     Parent := Self;
  927.     AllowAllUp := True;
  928.     DefaultWidth := 25;
  929.     DefaultHeight := 25;
  930.     SkinDataName := 'toolbutton';
  931.     GroupIndex := 1;
  932.     NumGlyphs := 1;
  933.     Left := 240;
  934.     Top := 20;
  935.     Glyph.LoadFromResourceName(HInstance, 'SP_ITALIC');
  936.     OnClick := ItalicButtonClick;
  937.   end;
  938.   UnderLineButton := TspSkinSpeedButton.Create(Self);
  939.   with UnderLineButton do
  940.   begin
  941.     Parent := Self;
  942.     AllowAllUp := True;
  943.     DefaultWidth := 25;
  944.     DefaultHeight := 25;
  945.     SkinDataName := 'toolbutton';
  946.     GroupIndex := 1;
  947.     NumGlyphs := 1;
  948.     Left := 270;
  949.     Top := 20;
  950.     Glyph.LoadFromResourceName(HInstance, 'SP_UNDERLINE');
  951.     OnClick := UnderLineButtonClick;
  952.   end;
  953.   StrikeOutButton := TspSkinSpeedButton.Create(Self);
  954.   with StrikeOutButton do
  955.   begin
  956.     Parent := Self;
  957.     AllowAllUp := True;
  958.     DefaultWidth := 25;
  959.     DefaultHeight := 25;
  960.     SkinDataName := 'toolbutton';
  961.     GroupIndex := 1;
  962.     NumGlyphs := 1;
  963.     Left := 300;
  964.     Top := 20;
  965.     Glyph.LoadFromResourceName(HInstance, 'SP_STRIKEOUT');
  966.     OnClick := StrikeOutButtonClick;
  967.   end;
  968. end;
  969. procedure TspFontDlgForm.FontSizeChange(Sender: TObject);
  970. begin
  971.   FontExampleLabel.Font.Size := Trunc(FontSizeEdit.Value);
  972.   FontHeightEdit.SimpleSetValue(FontExampleLabel.Font.Height);
  973. end;
  974. procedure TspFontDlgForm.FontHeightChange(Sender: TObject);
  975. begin
  976.   FontExampleLabel.Font.Height := Trunc(FontHeightEdit.Value);
  977.   FontSizeEdit.SimpleSetValue(FontExampleLabel.Font.Size);
  978. end;
  979. procedure TspFontDlgForm.FontNameChange(Sender: TObject);
  980. begin
  981.   FontExampleLabel.Font.Name := FontNameBox.FontName;
  982. end;
  983. procedure TspFontDlgForm.FontColorChange(Sender: TObject);
  984. begin
  985.   FontExampleLabel.Font.Color := FontColorBox.Selected;
  986. end;
  987. procedure TspFontDlgForm.BoldButtonClick(Sender: TObject);
  988. begin
  989.   if BoldButton.Down
  990.   then
  991.     FontExampleLabel.Font.Style := FontExampleLabel.Font.Style + [fsBold]
  992.   else
  993.     FontExampleLabel.Font.Style := FontExampleLabel.Font.Style - [fsBold];
  994. end;
  995. procedure TspFontDlgForm.ItalicButtonClick(Sender: TObject);
  996. begin
  997.   if ItalicButton.Down
  998.   then
  999.     FontExampleLabel.Font.Style := FontExampleLabel.Font.Style + [fsItalic]
  1000.   else
  1001.     FontExampleLabel.Font.Style := FontExampleLabel.Font.Style - [fsItalic];
  1002. end;
  1003. procedure TspFontDlgForm.StrikeOutButtonClick(Sender: TObject);
  1004. begin
  1005.   if StrikeOutButton.Down
  1006.   then
  1007.     FontExampleLabel.Font.Style := FontExampleLabel.Font.Style + [fsStrikeOut]
  1008.   else
  1009.     FontExampleLabel.Font.Style := FontExampleLabel.Font.Style - [fsStrikeOut];
  1010. end;
  1011. procedure TspFontDlgForm.UnderLineButtonClick(Sender: TObject);
  1012. begin
  1013.   if UnderLineButton.Down
  1014.   then
  1015.     FontExampleLabel.Font.Style := FontExampleLabel.Font.Style + [fsUnderLine]
  1016.   else
  1017.     FontExampleLabel.Font.Style := FontExampleLabel.Font.Style - [fsUnderLine];
  1018. end;
  1019. constructor TspSkinFontDialog.Create(AOwner: TComponent);
  1020. begin
  1021.   inherited Create(AOwner);
  1022.   FAlphaBlend := False;
  1023.   FAlphaBlendAnimation := False;
  1024.   FAlphaBlendValue := 200;
  1025.   FTitle := 'Font';
  1026.   FDefaultFont := TFont.Create;
  1027.   FFont := TFont.Create;
  1028.   with FDefaultFont do
  1029.   begin
  1030.     Name := 'Arial';
  1031.     Style := [];
  1032.     Height := 14;
  1033.   end;
  1034.   FShowSizeEdit := True;
  1035.   FShowHeightEdit := True;
  1036. end;
  1037. destructor TspSkinFontDialog.Destroy;
  1038. begin
  1039.   FDefaultFont.Free;
  1040.   FFont.Free;
  1041.   inherited Destroy;
  1042. end;
  1043. procedure TspSkinFontDialog.SetDefaultFont;
  1044. begin
  1045.   FDefaultFont.Assign(Value);
  1046. end;
  1047. procedure TspSkinFontDialog.SetFont;
  1048. begin
  1049.   FFont.Assign(Value);
  1050. end;
  1051. procedure TspSkinFontDialog.Notification;
  1052. begin
  1053.   inherited Notification(AComponent, Operation);
  1054.   if (Operation = opRemove) and (AComponent = FSD) then FSD := nil;
  1055.   if (Operation = opRemove) and (AComponent = FCtrlFSD) then FCtrlFSD := nil;
  1056. end;
  1057. function TspSkinFontDialog.GetTitle: string;
  1058. begin
  1059.   Result := FTitle;
  1060. end;
  1061. procedure TspSkinFontDialog.SetTitle(const Value: string);
  1062. begin
  1063.   FTitle := Value;
  1064. end;
  1065. procedure TspSkinFontDialog.Change;
  1066. begin
  1067.   if Assigned(FOnChange) then FOnChange(Self);
  1068. end;
  1069. function TspSkinFontDialog.Execute: Boolean;
  1070. var
  1071.   FW, FH: Integer;
  1072. begin
  1073.   FDlgFrm := TspFontDlgForm.Create(Application);
  1074.   with FDlgFrm do
  1075.   try
  1076.     Caption := Self.Title;
  1077.     DSF.BorderIcons := [];
  1078.     DSF.SkinData := FSD;
  1079.     DSF.MenusSkinData := CtrlSkinData;
  1080.     DSF.AlphaBlend := AlphaBlend;
  1081.     DSF.AlphaBlendAnimation := AlphaBlendAnimation;
  1082.     DSF.AlphaBlendValue := AlphaBlendValue;
  1083.     DSF.Sizeable := False;
  1084.     //
  1085.     FontNameBox.SkinData := FCtrlFSD;
  1086.     FontColorBox.SkinData := FCtrlFSD;
  1087.     FontSizeEdit.SkinData := FCtrlFSD;
  1088.     FontHeightEdit.SkinData := FCtrlFSD;
  1089.     FontExamplePanel.SkinData := FCtrlFSD;
  1090.     OkButton.SkinData := FCtrlFSD;
  1091.     CancelButton.SkinData := FCtrlFSD;
  1092.     BoldButton.SkinData := FCtrlFSD;
  1093.     ItalicButton.SkinData := FCtrlFSD;
  1094.     UnderLineButton.SkinData := FCtrlFSD;
  1095.     StrikeOutButton.SkinData := FCtrlFSD;
  1096.     //
  1097.     FontHeightLabel.SkinData := FCtrlFSD;
  1098.     FontSizeLabel.SkinData := FCtrlFSD;
  1099.     FontStyleLabel.SkinData := FCtrlFSD;
  1100.     FontNameLabel.SkinData := FCtrlFSD;
  1101.     FontColorLabel.SkinData := FCtrlFSD;
  1102.     FontExLabel.SkinData := FCtrlFSD;
  1103.     //
  1104.     FontExampleLabel.Font.Assign(Self.Font);
  1105.     FontNameBox.FontName := FontExampleLabel.Font.Name;
  1106.     FontColorBox.Selected := FontExampleLabel.Font.Color;
  1107.     FontSizeEdit.SimpleSetValue(FontExampleLabel.Font.Size);
  1108.     FontHeightEdit.SimpleSetValue(FontExampleLabel.Font.Height);
  1109.     FontSizeEdit.Visible := FShowSizeEdit;
  1110.     FontHeightEdit.Visible := FShowHeightEdit;
  1111.     FontHeightLabel.Visible := FShowHeightEdit;
  1112.     FontSizeLabel.Visible := FShowSizeEdit;
  1113.     //
  1114.     if fsBold in FontExampleLabel.Font.Style
  1115.     then
  1116.       BoldButton.Down := True;
  1117.     if fsItalic in FontExampleLabel.Font.Style
  1118.     then
  1119.       ItalicButton.Down := True;
  1120.     if fsStrikeOut in FontExampleLabel.Font.Style
  1121.     then
  1122.       StrikeOutButton.Down := True;
  1123.     if fsUnderLine in FontExampleLabel.Font.Style
  1124.     then
  1125.       UnderLineButton.Down := True;
  1126.     //
  1127.     FW := 400;
  1128.     FH := 190;
  1129.     if (SkinData <> nil) and not SkinData.Empty
  1130.     then
  1131.       begin
  1132.         if FW < DSF.GetMinWidth then FW := DSF.GetMinWidth;
  1133.         if FH < DSF.GetMinHeight then FH := DSF.GetMinHeight;
  1134.       end;
  1135.     ClientWidth := FW;
  1136.     ClientHeight := FH;
  1137.     //
  1138.     Result := (ShowModal = mrOk);
  1139.     if Result
  1140.     then
  1141.       begin
  1142.         Self.Font.Assign(FontExampleLabel.Font);
  1143.         Change;
  1144.       end;
  1145.   finally
  1146.     Free;
  1147.     FDlgFrm := nil;
  1148.   end;
  1149. end;
  1150. constructor TspSkinTextDialog.Create;
  1151. begin
  1152.   inherited Create(AOwner);
  1153.   FAlphaBlend := False;
  1154.   FAlphaBlendAnimation := False;
  1155.   FAlphaBlendValue := 200;
  1156.   Memo := nil;
  1157.   FSkinOpenDialog := nil;
  1158.   FSkinSaveDialog := nil;
  1159.   FClientWidth := 350;
  1160.   FClientHeight := 200;
  1161.   FLines := TStringList.Create;
  1162.   FCaption := 'Input text';
  1163.   FButtonSkinDataName := 'button';
  1164.   FMemoSkinDataName := 'memo';
  1165.   FDefaultButtonFont := TFont.Create;
  1166.   FDefaultMemoFont := TFont.Create;
  1167.   FUseSkinFont := True;
  1168.   ShowToolBar := True;
  1169.   with FDefaultButtonFont do
  1170.   begin
  1171.     Name := 'Arial';
  1172.     Style := [];
  1173.     Height := 14;
  1174.   end;
  1175.   with FDefaultMemoFont do
  1176.   begin
  1177.     Name := 'Arial';
  1178.     Style := [];
  1179.     Height := 14;
  1180.   end;
  1181. end;
  1182. destructor TspSkinTextDialog.Destroy;
  1183. begin
  1184.   FDefaultMemoFont.Free;
  1185.   FDefaultButtonFont.Free;
  1186.   FLines.Free;
  1187.   inherited;
  1188. end;
  1189. procedure TspSkinTextDialog.NewButtonClick(Sender: TObject);
  1190. begin
  1191.   Memo.Clear;
  1192. end;
  1193. procedure TspSkinTextDialog.OpenButtonClick(Sender: TObject);
  1194. var
  1195.   OD: TOpenDialog;
  1196. begin
  1197.   if FSkinOpenDialog <> nil
  1198.   then
  1199.     begin
  1200.       if FSkinOpenDialog.Execute
  1201.       then Memo.Lines.LoadFromFile(FSkinOpenDialog.FileName);
  1202.     end
  1203.   else
  1204.     begin
  1205.       OD := TOpenDialog.Create(Self);
  1206.       OD.Filter := '*.txt|*.txt|*.*|*.*';
  1207.       if OD.Execute then Memo.Lines.LoadFromFile(OD.FileName);
  1208.       OD.Free;
  1209.     end;
  1210. end;
  1211. procedure TspSkinTextDialog.SaveButtonClick(Sender: TObject);
  1212. var
  1213.   SD: TSaveDialog;
  1214. begin
  1215.   if FSkinSaveDialog <> nil
  1216.   then
  1217.     begin
  1218.       if FSkinSaveDialog.Execute
  1219.       then Memo.Lines.LoadFromFile(FSkinSaveDialog.FileName);
  1220.     end
  1221.   else
  1222.     begin
  1223.       SD := TSaveDialog.Create(Self);
  1224.       SD.Filter := '*.txt|*.txt|*.*|*.*';
  1225.       if SD.Execute then Memo.Lines.SaveToFile(SD.FileName);
  1226.       SD.Free;
  1227.     end;  
  1228. end;
  1229. procedure TspSkinTextDialog.CopyButtonClick(Sender: TObject);
  1230. begin
  1231.   Memo.CopyToClipboard;
  1232. end;
  1233. procedure TspSkinTextDialog.CutButtonClick(Sender: TObject);
  1234. begin
  1235.   Memo.CutToClipboard;
  1236. end;
  1237. procedure TspSkinTextDialog.PasteButtonClick(Sender: TObject);
  1238. begin
  1239.   Memo.PasteFromClipboard;
  1240. end;
  1241. procedure TspSkinTextDialog.DeleteButtonClick(Sender: TObject);
  1242. begin
  1243.   Memo.ClearSelection;
  1244. end;
  1245. procedure TspSkinTextDialog.SetLines(Value: TStrings);
  1246. begin
  1247.   FLines.Assign(Value);
  1248. end;
  1249. procedure TspSkinTextDialog.SetClientWidth(Value: Integer);
  1250. begin
  1251.   if Value > 0 then FClientWidth := Value;
  1252. end;
  1253. procedure TspSkinTextDialog.SetClientHeight(Value: Integer);
  1254. begin
  1255.   if Value > 0 then FClientHeight := Value;
  1256. end;
  1257. procedure TspSkinTextDialog.SetDefaultMemoFont;
  1258. begin
  1259.   FDefaultMemoFont.Assign(Value);
  1260. end;
  1261. procedure TspSkinTextDialog.SetDefaultButtonFont;
  1262. begin
  1263.   FDefaultButtonFont.Assign(Value);
  1264. end;
  1265. procedure TspSkinTextDialog.Notification;
  1266. begin
  1267.   inherited Notification(AComponent, Operation);
  1268.   if (Operation = opRemove) and (AComponent = FSD) then FSD := nil;
  1269.   if (Operation = opRemove) and (AComponent = FCtrlFSD) then FCtrlFSD := nil;
  1270.   if (Operation = opRemove) and (AComponent = FSkinOpenDialog) then FSkinOpenDialog := nil;
  1271.   if (Operation = opRemove) and (AComponent = FSkinSaveDialog) then FSkinSaveDialog := nil;
  1272. end;
  1273. function TspSkinTextDialog.Execute: Boolean;
  1274. var
  1275.   Form: TForm;
  1276.   DSF: TspDynamicSkinForm;
  1277.   ButtonWidth, ButtonHeight: Integer;
  1278.   Panel: TspSkinPanel;
  1279.   HMemoScrollBar, VMemoScrollBar: TspSkinScrollBar;
  1280.   ToolPanel: TspSkinPanel;
  1281. begin
  1282.   Form := TForm.Create(Application);
  1283.   Form.BorderStyle := bsDialog;
  1284.   Form.Caption := FCaption;
  1285.   Form.Position := poScreenCenter;
  1286.   DSF := TspDynamicSkinForm.Create(Form);
  1287.   DSF.BorderIcons := [];
  1288.   DSF.SkinData := SkinData;
  1289.   DSF.MenusSkinData := CtrlSkinData;
  1290.   DSF.SizeAble := False;
  1291.   DSF.AlphaBlend := AlphaBlend;
  1292.   DSF.AlphaBlendAnimation := AlphaBlendAnimation;
  1293.   DSF.AlphaBlendValue := AlphaBlendValue;
  1294.   try
  1295.   with Form do
  1296.   begin
  1297.     ClientWidth := FClientWidth;
  1298.     ClientHeight := FClientHeight;
  1299.     ButtonWidth := 80;
  1300.     ButtonHeight := 25;
  1301.     with TspSkinButton.Create(Form) do
  1302.     begin
  1303.       Parent := Form;
  1304.       DefaultFont := DefaultButtonFont;
  1305.       UseSkinFont := Self.UseSkinFont;
  1306.       Caption := SP_MSG_BTN_OK;
  1307.       DefaultHeight := ButtonHeight;
  1308.       ModalResult := mrOk;
  1309.       Default := True;
  1310.       SkinDataName := FButtonSkinDataName;
  1311.       SkinData := CtrlSkinData;
  1312.       SetBounds(FClientWidth - ButtonWidth * 2 - 20, FClientHeight - Height - 10,
  1313.                 ButtonWidth, Height);
  1314.     end;
  1315.     with TspSkinButton.Create(Form) do
  1316.     begin
  1317.       Parent := Form;
  1318.       DefaultFont := DefaultButtonFont;
  1319.       UseSkinFont := Self.UseSkinFont;
  1320.       Caption := SP_MSG_BTN_CANCEL;
  1321.       DefaultHeight := ButtonHeight;
  1322.       ModalResult := mrCancel;
  1323.       Cancel := True;
  1324.       SkinDataName := FButtonSkinDataName;
  1325.       SkinData := CtrlSkinData;
  1326.       SetBounds(FClientWidth - ButtonWidth - 10, FClientHeight - Height - 10,
  1327.                 ButtonWidth, Height);
  1328.       ButtonHeight := Height;          
  1329.     end;
  1330.     Panel := TspSkinPanel.Create(Form);
  1331.     with Panel do
  1332.     begin
  1333.       Parent := Form;
  1334.       Align := alTop;
  1335.       SkinData := CtrlSkinData;
  1336.     end;
  1337.     if FShowToolBar
  1338.     then
  1339.       begin
  1340.         ToolPanel := TspSkinPanel.Create(Form);
  1341.         with ToolPanel do
  1342.         begin
  1343.           Parent := Form;
  1344.           Align := alTop;
  1345.           DefaultHeight := 25;
  1346.           SkinDataName := 'toolpanel';
  1347.           SkinData := CtrlSkinData;
  1348.         end;
  1349.         with TspSkinSpeedButton.Create(Form) do
  1350.         begin
  1351.           Parent := ToolPanel;
  1352.           DefaultWidth := 27;
  1353.           SkinDataName := 'toolbutton';
  1354.           Align := alLeft;
  1355.           OnClick := NewButtonClick;
  1356.           NumGlyphs := 1;
  1357.           Glyph.LoadFromResourceName(HInstance, 'SP_NEW');
  1358.           SkinData := CtrlSkinData;
  1359.         end;
  1360.         with TspSkinSpeedButton.Create(Form) do
  1361.         begin
  1362.           Parent := ToolPanel;
  1363.           DefaultWidth := 27;
  1364.           SkinDataName := 'toolbutton';
  1365.           Align := alLeft;
  1366.           OnClick := OpenButtonClick;
  1367.           NumGlyphs := 1;
  1368.           Glyph.LoadFromResourceName(HInstance, 'SP_OPEN');
  1369.           SkinData := CtrlSkinData;
  1370.         end;
  1371.         with TspSkinSpeedButton.Create(Form) do
  1372.         begin
  1373.           Parent := ToolPanel;
  1374.           DefaultWidth := 27;
  1375.           SkinDataName := 'toolbutton';
  1376.           Align := alLeft;
  1377.           OnClick := SaveButtonClick;
  1378.           NumGlyphs := 1;
  1379.           Glyph.LoadFromResourceName(HInstance, 'SP_SAVE');
  1380.           SkinData := CtrlSkinData;
  1381.         end;
  1382.         with TspSkinBevel.Create(Form) do
  1383.         begin
  1384.           Parent := ToolPanel;
  1385.           Width := 24;
  1386.           Align := alLeft;
  1387.           DividerMode := True;
  1388.           Shape := bsLeftLine;
  1389.           SkinData := CtrlSkinData;
  1390.         end;
  1391.         with TspSkinSpeedButton.Create(Form) do
  1392.         begin
  1393.           Parent := ToolPanel;
  1394.           DefaultWidth := 27;
  1395.           SkinDataName := 'toolbutton';
  1396.           Align := alLeft;
  1397.           OnClick := CopyButtonClick;
  1398.           NumGlyphs := 1;
  1399.           Glyph.LoadFromResourceName(HInstance, 'SP_COPY');
  1400.           SkinData := CtrlSkinData;
  1401.         end;
  1402.         with TspSkinSpeedButton.Create(Form) do
  1403.         begin
  1404.           Parent := ToolPanel;
  1405.           DefaultWidth := 27;
  1406.           SkinDataName := 'toolbutton';
  1407.           Align := alLeft;
  1408.           OnClick := CutButtonClick;
  1409.           NumGlyphs := 1;
  1410.           Glyph.LoadFromResourceName(HInstance, 'SP_CUT');
  1411.           SkinData := CtrlSkinData;
  1412.         end;
  1413.         with TspSkinSpeedButton.Create(Form) do
  1414.         begin
  1415.           Parent := ToolPanel;
  1416.           DefaultWidth := 27;
  1417.           SkinDataName := 'toolbutton';
  1418.           Align := alLeft;
  1419.           OnClick := PasteButtonClick;
  1420.           NumGlyphs := 1;
  1421.           Glyph.LoadFromResourceName(HInstance, 'SP_PASTE');
  1422.           SkinData := CtrlSkinData;
  1423.         end;
  1424.         with TspSkinSpeedButton.Create(Form) do
  1425.         begin
  1426.           Parent := ToolPanel;
  1427.           DefaultWidth := 27;
  1428.           SkinDataName := 'toolbutton';
  1429.           Align := alLeft;
  1430.           OnClick := DeleteButtonClick;
  1431.           NumGlyphs := 1;
  1432.           Glyph.LoadFromResourceName(HInstance, 'SP_DELETE');
  1433.           SkinData := CtrlSkinData;
  1434.         end;
  1435.       end;
  1436.     with Panel do
  1437.     begin
  1438.       if FShowToolBar
  1439.       then
  1440.         Height := FClientHeight -  ButtonHeight - 20 - ToolPanel.Height
  1441.       else
  1442.         Height := FClientHeight -  ButtonHeight - 20;
  1443.     end;
  1444.     VMemoScrollBar := TspSkinScrollBar.Create(Form);
  1445.     with VMemoScrollBar do
  1446.     begin
  1447.       Kind := sbVertical;
  1448.       Parent := Panel;
  1449.       Align := alRight;
  1450.       DefaultWidth := 19;
  1451.       Enabled := False;
  1452.       SkinDataName := 'vscrollbar';
  1453.       SkinData := CtrlSkinData;
  1454.     end;
  1455.     HMemoScrollBar := TspSkinScrollBar.Create(Form);
  1456.     with HMemoScrollBar do
  1457.     begin
  1458.       Parent := Panel;
  1459.       Align := alBottom;
  1460.       DefaultHeight := 19;
  1461.       Enabled := False;
  1462.       BothMarkerWidth := 19;
  1463.       Both := True;
  1464.       SkinDataName := 'bothhscrollbar';
  1465.       SkinData := CtrlSkinData;
  1466.     end;
  1467.     Memo := TspSkinMemo2.Create(Form);
  1468.     with Memo do
  1469.     begin
  1470.       Parent := Panel;
  1471.       Lines.Assign(Self.Lines);
  1472.       Align := alClient;
  1473.       HScrollBar := HMemoScrollBar;
  1474.       VScrollBar := VMemoScrollBar;
  1475.       SkinData := CtrlSkinData;
  1476.     end;
  1477.   end;  
  1478.   
  1479.   if Form.ShowModal = mrOk
  1480.   then
  1481.     begin
  1482.       Self.Lines.Assign(Memo.Lines);
  1483.       Result := True;
  1484.     end
  1485.   else
  1486.     Result := False;
  1487.   finally
  1488.     Form.Free;
  1489.   end;
  1490. end;
  1491. constructor TspSkinPasswordDialog.Create;
  1492. begin
  1493.   inherited Create(AOwner);
  1494.   FAlphaBlend := False;
  1495.   FAlphaBlendAnimation := False;
  1496.   FAlphaBlendValue := 200;
  1497.   LoginMode := False;
  1498.   FCaption := 'Password';
  1499.   FPasswordCaption := 'Password:';
  1500.   FPassword := '';
  1501.   FLoginCaption := 'Login name:';
  1502.   FLogin := '';
  1503.   FButtonSkinDataName := 'button';
  1504.   FLabelSkinDataName := 'stdlabel';
  1505.   FEditSkinDataName := 'edit';
  1506.   FDefaultLabelFont := TFont.Create;
  1507.   FDefaultButtonFont := TFont.Create;
  1508.   FDefaultEditFont := TFont.Create;
  1509.   FUseSkinFont := True;
  1510.   with FDefaultLabelFont do
  1511.   begin
  1512.     Name := 'Arial';
  1513.     Style := [];
  1514.     Height := 14;
  1515.   end;
  1516.   with FDefaultButtonFont do
  1517.   begin
  1518.     Name := 'Arial';
  1519.     Style := [];
  1520.     Height := 14;
  1521.   end;
  1522.   with FDefaultEditFont do
  1523.   begin
  1524.     Name := 'Arial';
  1525.     Style := [];
  1526.     Height := 14;
  1527.   end;
  1528. end;
  1529. destructor TspSkinPasswordDialog.Destroy;
  1530. begin
  1531.   FDefaultLabelFont.Free;
  1532.   FDefaultButtonFont.Free;
  1533.   FDefaultEditFont.Free;
  1534.   inherited;
  1535. end;
  1536. procedure TspSkinPasswordDialog.SetDefaultLabelFont;
  1537. begin
  1538.   FDefaultLabelFont.Assign(Value);
  1539. end;
  1540. procedure TspSkinPasswordDialog.SetDefaultEditFont;
  1541. begin
  1542.   FDefaultEditFont.Assign(Value);
  1543. end;
  1544. procedure TspSkinPasswordDialog.SetDefaultButtonFont;
  1545. begin
  1546.   FDefaultButtonFont.Assign(Value);
  1547. end;
  1548. procedure TspSkinPasswordDialog.Notification;
  1549. begin
  1550.   inherited Notification(AComponent, Operation);
  1551.   if (Operation = opRemove) and (AComponent = FSD) then FSD := nil;
  1552.   if (Operation = opRemove) and (AComponent = FCtrlFSD) then FCtrlFSD := nil;
  1553. end;
  1554. function TspSkinPasswordDialog.Execute: Boolean;
  1555. var
  1556.   Form: TForm;
  1557.   DSF: TspDynamicSkinForm;
  1558.   Image: TImage;
  1559.   LoginLabel, PasswordLabel: TspSkinStdLabel;
  1560.   LoginEdit: TspSkinEdit;
  1561.   PasswordEdit: TspSkinPasswordEdit;
  1562.   DialogUnits: TPoint;
  1563.   ButtonTop, ButtonWidth, ButtonHeight: Integer;
  1564.   LeftOffset: Integer;
  1565. begin
  1566.   Form := TForm.Create(Application);
  1567.   Form.BorderStyle := bsDialog;
  1568.   Form.Caption := FCaption;
  1569.   Form.Position := poScreenCenter;
  1570.   DSF := TspDynamicSkinForm.Create(Form);
  1571.   DSF.BorderIcons := [];
  1572.   DSF.SkinData := SkinData;
  1573.   DSF.MenusSkinData := CtrlSkinData;
  1574.   DSF.AlphaBlend := AlphaBlend;
  1575.   DSF.AlphaBlendAnimation := AlphaBlendAnimation;
  1576.   DSF.AlphaBlendValue := AlphaBlendValue;
  1577.   try
  1578.   with Form do
  1579.   begin
  1580.     Canvas.Font := Font;
  1581.     DialogUnits := GetAveCharSize(Canvas);
  1582.     Image := TImage.Create(Form);
  1583.     with Image do
  1584.     begin
  1585.       Parent := Form;
  1586.       Top := MulDiv(8, DialogUnits.Y, 8);
  1587.       Left := MulDiv(8, DialogUnits.X, 4);
  1588.       AutoSize := True;
  1589.       Transparent := True;
  1590.       Picture.Bitmap.Handle := LoadBitMap(HInstance, 'SP_KEY');
  1591.     end;
  1592.     LeftOffset := Image.Width + Image.Left;
  1593.     ClientWidth := LeftOffset + MulDiv(180, DialogUnits.X, 4);
  1594.   end;
  1595.   if FLoginMode
  1596.   then
  1597.     begin
  1598.       LoginLabel := TspSkinStdLabel.Create(Form);
  1599.       with LoginLabel do
  1600.       begin
  1601.         Parent := Form;
  1602.         Left := LeftOffset + MulDiv(8, DialogUnits.X, 4);
  1603.         Top := MulDiv(8, DialogUnits.Y, 8);
  1604.         Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
  1605.         DefaultFont := DefaultLabelFont;
  1606.         UseSkinFont := Self.UseSkinFont;
  1607.         SkinDataName := FLabelSkinDataName;
  1608.         SkinData := CtrlSkinData;
  1609.         Caption := FLoginCaption;
  1610.       end;
  1611.       LoginEdit := TspSkinMaskEdit.Create(Form);
  1612.       with LoginEdit do
  1613.       begin
  1614.          Parent := Form;
  1615.          DefaultFont := DefaultEditFont;
  1616.          UseSkinFont := Self.UseSkinFont;
  1617.          Left := LoginLabel.Left;
  1618.          Top := LoginLabel.Top + LoginLabel.Height + 5;
  1619.          DefaultWidth := MulDiv(164, DialogUnits.X, 4);
  1620.          MaxLength := 255;
  1621.          Text := FLogin;
  1622.          SelectAll;
  1623.          SkinDataName := FEditSkinDataName;
  1624.          SkinData := CtrlSkinData;
  1625.        end;
  1626.     end;
  1627.   PasswordLabel := TspSkinStdLabel.Create(Form);
  1628.   with PasswordLabel do
  1629.   begin
  1630.     Parent := Form;
  1631.     Left := LeftOffset + MulDiv(8, DialogUnits.X, 4);
  1632.     if FLoginMode and (LoginEdit <> nil)
  1633.     then
  1634.       Top := LoginEdit.Top + LoginEdit.Height + 5
  1635.     else
  1636.       Top := MulDiv(8, DialogUnits.Y, 8);
  1637.     Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
  1638.     DefaultFont := DefaultLabelFont;
  1639.     UseSkinFont := Self.UseSkinFont;
  1640.     SkinDataName := FLabelSkinDataName;
  1641.     SkinData := CtrlSkinData;
  1642.     Caption := FPasswordCaption;
  1643.   end;
  1644.   PasswordEdit := TspSkinPasswordEdit.Create(Form);
  1645.   with PasswordEdit do
  1646.   begin
  1647.     Parent := Form;
  1648.     PasswordKind := Self.PasswordKind;
  1649.     DefaultFont := DefaultEditFont;
  1650.     UseSkinFont := Self.UseSkinFont;
  1651.     Left := PasswordLabel.Left;
  1652.     Top := PasswordLabel.Top + PasswordLabel.Height + 5;
  1653.     DefaultWidth := MulDiv(164, DialogUnits.X, 4);
  1654.     MaxLength := 255;
  1655.     Text := FPassword;
  1656.     SelectAll;
  1657.     SkinDataName := FEditSkinDataName;
  1658.     SkinData := CtrlSkinData;
  1659.   end;
  1660.   ButtonTop := PasswordEdit.Top + PasswordEdit.Height + 15;
  1661.   ButtonWidth := MulDiv(50, DialogUnits.X, 4);
  1662.   ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
  1663.   with TspSkinButton.Create(Form) do
  1664.   begin
  1665.     Parent := Form;
  1666.     DefaultFont := DefaultButtonFont;
  1667.     UseSkinFont := Self.UseSkinFont;
  1668.     Caption := SP_MSG_BTN_OK;
  1669.     ModalResult := mrOk;
  1670.     Default := True;
  1671.     SetBounds(LeftOffset + MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
  1672.               ButtonHeight);
  1673.     DefaultHeight := ButtonHeight;
  1674.     SkinDataName := FButtonSkinDataName;
  1675.     SkinData := CtrlSkinData;
  1676.   end;
  1677.   with TspSkinButton.Create(Form) do
  1678.   begin
  1679.     Parent := Form;
  1680.     DefaultFont := DefaultButtonFont;
  1681.     UseSkinFont := Self.UseSkinFont;
  1682.     Caption := SP_MSG_BTN_CANCEL;
  1683.     ModalResult := mrCancel;
  1684.     Cancel := True;
  1685.     SetBounds(LeftOffset + MulDiv(92, DialogUnits.X, 4), PasswordEdit.Top + PasswordEdit.Height + 15,
  1686.               ButtonWidth, ButtonHeight);
  1687.     DefaultHeight := ButtonHeight;
  1688.     SkinDataName := FButtonSkinDataName;
  1689.     SkinData := CtrlSkinData;
  1690.     Form.ClientHeight := Top + Height + 13;
  1691.     Image.Top := Form.ClientHeight div 2 - Image.Height div 2; 
  1692.   end;
  1693.   if Form.ShowModal = mrOk
  1694.   then
  1695.     begin
  1696.       if FLoginMode then FLogin := LoginEdit.Text;
  1697.       FPassword := PasswordEdit.Text;
  1698.       Result := True;
  1699.     end
  1700.   else
  1701.     Result := False;
  1702.   finally
  1703.     Form.Free;
  1704.   end;
  1705. end;
  1706. // ===================== TspSkinConfirmDialog ==================== //
  1707. constructor TspSkinConfirmDialog.Create;
  1708. begin
  1709.   inherited Create(AOwner);
  1710.   FAlphaBlend := False;
  1711.   FAlphaBlendAnimation := False;
  1712.   FAlphaBlendValue := 200;
  1713.   FCaption := 'Confirm password';
  1714.   FPassword1Caption := 'Enter password:';
  1715.   FPassword1 := '';
  1716.   FPassword2Caption := 'Confirm password: ';
  1717.   FPassword2:= '';
  1718.   FButtonSkinDataName := 'button';
  1719.   FLabelSkinDataName := 'stdlabel';
  1720.   FEditSkinDataName := 'edit';
  1721.   FDefaultLabelFont := TFont.Create;
  1722.   FDefaultButtonFont := TFont.Create;
  1723.   FDefaultEditFont := TFont.Create;
  1724.   FUseSkinFont := True;
  1725.   with FDefaultLabelFont do
  1726.   begin
  1727.     Name := 'Arial';
  1728.     Style := [];
  1729.     Height := 14;
  1730.   end;
  1731.   with FDefaultButtonFont do
  1732.   begin
  1733.     Name := 'Arial';
  1734.     Style := [];
  1735.     Height := 14;
  1736.   end;
  1737.   with FDefaultEditFont do
  1738.   begin
  1739.     Name := 'Arial';
  1740.     Style := [];
  1741.     Height := 14;
  1742.   end;
  1743. end;
  1744. destructor TspSkinConfirmDialog.Destroy;
  1745. begin
  1746.   FDefaultLabelFont.Free;
  1747.   FDefaultButtonFont.Free;
  1748.   FDefaultEditFont.Free;
  1749.   inherited;
  1750. end;
  1751. procedure TspSkinConfirmDialog.SetDefaultLabelFont;
  1752. begin
  1753.   FDefaultLabelFont.Assign(Value);
  1754. end;
  1755. procedure TspSkinConfirmDialog.SetDefaultEditFont;
  1756. begin
  1757.   FDefaultEditFont.Assign(Value);
  1758. end;
  1759. procedure TspSkinConfirmDialog.SetDefaultButtonFont;
  1760. begin
  1761.   FDefaultButtonFont.Assign(Value);
  1762. end;
  1763. procedure TspSkinConfirmDialog.Notification;
  1764. begin
  1765.   inherited Notification(AComponent, Operation);
  1766.   if (Operation = opRemove) and (AComponent = FSD) then FSD := nil;
  1767.   if (Operation = opRemove) and (AComponent = FCtrlFSD) then FCtrlFSD := nil;
  1768. end;
  1769. function TspSkinConfirmDialog.Execute: Boolean;
  1770. var
  1771.   Form: TForm;
  1772.   DSF: TspDynamicSkinForm;
  1773.   Image: TImage;
  1774.   Password1Label, Password2Label: TspSkinStdLabel;
  1775.   Password1Edit, Password2Edit: TspSkinPasswordEdit;
  1776.   DialogUnits: TPoint;
  1777.   ButtonTop, ButtonWidth, ButtonHeight: Integer;
  1778.   LeftOffset: Integer;
  1779. begin
  1780.   Form := TForm.Create(Application);
  1781.   Form.BorderStyle := bsDialog;
  1782.   Form.Caption := FCaption;
  1783.   Form.Position := poScreenCenter;
  1784.   DSF := TspDynamicSkinForm.Create(Form);
  1785.   DSF.BorderIcons := [];
  1786.   DSF.SkinData := SkinData;
  1787.   DSF.MenusSkinData := CtrlSkinData;
  1788.   DSF.AlphaBlend := AlphaBlend;
  1789.   DSF.AlphaBlendAnimation := AlphaBlendAnimation;
  1790.   DSF.AlphaBlendValue := AlphaBlendValue;
  1791.   DSF.SizeAble := False;
  1792.   try
  1793.   with Form do
  1794.   begin
  1795.     Canvas.Font := Font;
  1796.     DialogUnits := GetAveCharSize(Canvas);
  1797.     Image := TImage.Create(Form);
  1798.     with Image do
  1799.     begin
  1800.       Parent := Form;
  1801.       Top := MulDiv(8, DialogUnits.Y, 8);
  1802.       Left := MulDiv(8, DialogUnits.X, 4);
  1803.       AutoSize := True;
  1804.       Transparent := True;
  1805.       Picture.Bitmap.Handle := LoadBitMap(HInstance, 'BS_KEY');
  1806.     end;
  1807.     LeftOffset := Image.Width + Image.Left;
  1808.     ClientWidth := LeftOffset + MulDiv(180, DialogUnits.X, 4);
  1809.   end;
  1810.   Password1Label := TspSkinStdLabel.Create(Form);
  1811.   with Password1Label do
  1812.   begin
  1813.      Parent := Form;
  1814.      Left := LeftOffset + MulDiv(8, DialogUnits.X, 4);
  1815.      Top := MulDiv(8, DialogUnits.Y, 8);
  1816.      Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
  1817.      DefaultFont := DefaultLabelFont;
  1818.      UseSkinFont := Self.UseSkinFont;
  1819.      SkinDataName := FLabelSkinDataName;
  1820.      SkinData := CtrlSkinData;
  1821.      Caption := FPassword1Caption;
  1822.    end;
  1823.    Password1Edit := TspSkinPasswordEdit.Create(Form);
  1824.    with Password1Edit do
  1825.    begin
  1826.      Parent := Form;
  1827.      PasswordKind := Self.PasswordKind;
  1828.      DefaultFont := DefaultEditFont;
  1829.      UseSkinFont := Self.UseSkinFont;
  1830.      Left := Password1Label.Left;
  1831.      Top := Password1Label.Top + Password1Label.Height + 5;
  1832.      DefaultWidth := MulDiv(164, DialogUnits.X, 4);
  1833.      MaxLength := 255;
  1834.      Text := FPassword1;
  1835.      SelectAll;
  1836.      SkinDataName := FEditSkinDataName;
  1837.      SkinData := CtrlSkinData;
  1838.     end;
  1839.   Password2Label := TspSkinStdLabel.Create(Form);
  1840.   with Password2Label do
  1841.   begin
  1842.     Parent := Form;
  1843.     Left := LeftOffset + MulDiv(8, DialogUnits.X, 4);
  1844.     Top := Password1Edit.Top + Password1Edit.Height + 5;
  1845.     Constraints.MaxWidth := MulDiv(164, DialogUnits.X, 4);
  1846.     DefaultFont := DefaultLabelFont;
  1847.     UseSkinFont := Self.UseSkinFont;
  1848.     SkinDataName := FLabelSkinDataName;
  1849.     SkinData := CtrlSkinData;
  1850.     Caption := FPassword2Caption;
  1851.   end;
  1852.   Password2Edit := TspSkinPasswordEdit.Create(Form);
  1853.   with Password2Edit do
  1854.   begin
  1855.     Parent := Form;
  1856.     PasswordKind := Self.PasswordKind;
  1857.     DefaultFont := DefaultEditFont;
  1858.     UseSkinFont := Self.UseSkinFont;
  1859.     Left := Password2Label.Left;
  1860.     Top := Password2Label.Top + Password2Label.Height + 5;
  1861.     DefaultWidth := MulDiv(164, DialogUnits.X, 4);
  1862.     MaxLength := 255;
  1863.     Text := FPassword2;
  1864.     SelectAll;
  1865.     SkinDataName := FEditSkinDataName;
  1866.     SkinData := CtrlSkinData;
  1867.   end;
  1868.   ButtonTop := Password2Edit.Top + Password2Edit.Height + 15;
  1869.   ButtonWidth := MulDiv(50, DialogUnits.X, 4);
  1870.   ButtonHeight := MulDiv(14, DialogUnits.Y, 8);
  1871.   with TspSkinButton.Create(Form) do
  1872.   begin
  1873.     Parent := Form;
  1874.     DefaultFont := DefaultButtonFont;
  1875.     UseSkinFont := Self.UseSkinFont;
  1876.     Caption := SP_MSG_BTN_OK;
  1877.     ModalResult := mrOk;
  1878.     Default := True;
  1879.     SetBounds(LeftOffset + MulDiv(38, DialogUnits.X, 4), ButtonTop, ButtonWidth,
  1880.               ButtonHeight);
  1881.     DefaultHeight := ButtonHeight;
  1882.     SkinDataName := FButtonSkinDataName;
  1883.     SkinData := CtrlSkinData;
  1884.   end;
  1885.   with TspSkinButton.Create(Form) do
  1886.   begin
  1887.     Parent := Form;
  1888.     DefaultFont := DefaultButtonFont;
  1889.     UseSkinFont := Self.UseSkinFont;
  1890.     Caption := SP_MSG_BTN_CANCEL;
  1891.     ModalResult := mrCancel;
  1892.     Cancel := True;
  1893.     SetBounds(LeftOffset + MulDiv(92, DialogUnits.X, 4), Password2Edit.Top + Password2Edit.Height + 15,
  1894.               ButtonWidth, ButtonHeight);
  1895.     DefaultHeight := ButtonHeight;
  1896.     SkinDataName := FButtonSkinDataName;
  1897.     SkinData := CtrlSkinData;
  1898.     Form.ClientHeight := Top + Height + 13;
  1899.     Image.Top := Form.ClientHeight div 2 - Image.Height div 2; 
  1900.   end;
  1901.   if Form.ShowModal = mrOk
  1902.   then
  1903.     begin
  1904.       FPassword1 := Password1Edit.Text;
  1905.       FPassword2 := Password2Edit.Text;
  1906.       Result := True;
  1907.     end
  1908.   else
  1909.     Result := False;
  1910.   finally
  1911.     Form.Free;
  1912.   end;
  1913. end;
  1914. end.