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

Delphi控件源码

开发平台:

Delphi

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