git-svn-id: https://192.168.0.254/svn/Componentes.Terceros.jvcl@12 7f62d464-2af8-f54e-996c-e91b33f51cbe
438 lines
12 KiB
ObjectPascal
438 lines
12 KiB
ObjectPascal
{-----------------------------------------------------------------------------
|
|
The contents of this file are subject to the Mozilla Public License
|
|
Version 1.1 (the "License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
http://www.mozilla.org/MPL/MPL-1.1.html
|
|
|
|
Software distributed under the License is distributed on an "AS IS" basis,
|
|
WITHOUT WARRANTY OF ANY KIND, either expressed or implied. See the License for
|
|
the specific language governing rights and limitations under the License.
|
|
|
|
The Original Code is: JvGradEdit.PAS, released on 2002-07-04.
|
|
|
|
The Initial Developers of the Original Code are: Fedor Koshevnikov, Igor Pavluk and Serge Korolev
|
|
Copyright (c) 1997, 1998 Fedor Koshevnikov, Igor Pavluk and Serge Korolev
|
|
Copyright (c) 2001,2002 SGB Software
|
|
All Rights Reserved.
|
|
|
|
You may retrieve the latest version of this file at the Project JEDI's JVCL home page,
|
|
located at http://jvcl.sourceforge.net
|
|
|
|
Known Issues:
|
|
-----------------------------------------------------------------------------}
|
|
// $Id: JvGradientCaptionForm.pas 10610 2006-05-19 13:35:08Z elahn $
|
|
|
|
unit JvGradientCaptionForm;
|
|
|
|
{$I jvcl.inc}
|
|
|
|
interface
|
|
|
|
uses
|
|
SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Mask,
|
|
{$IFDEF COMPILER6_UP}
|
|
RTLConsts, DesignIntf, DesignEditors, VCLEditors,
|
|
{$ELSE}
|
|
LibIntf, DsgnIntf,
|
|
{$ENDIF COMPILER6_UP}
|
|
JvFormPlacement, JvGradientCaption, JvListBox, JvCtrls,
|
|
JvComponent, JvToolEdit, JvAppStorage, JvAppRegistryStorage, JvExMask;
|
|
|
|
type
|
|
TGradCaptionsEditor = class(TJvForm)
|
|
ApplyButton: TButton;
|
|
CancelButton: TButton;
|
|
OkButton: TButton;
|
|
GroupBox2: TGroupBox;
|
|
Label1: TLabel;
|
|
Label3: TLabel;
|
|
CaptionText: TEdit;
|
|
CaptionInactiveColor: TComboBox;
|
|
GroupBox1: TGroupBox;
|
|
NewButton: TButton;
|
|
DeleteButton: TButton;
|
|
CaptionParentFont: TCheckBox;
|
|
CaptionGlueNext: TCheckBox;
|
|
CaptionVisible: TCheckBox;
|
|
Label2: TLabel;
|
|
FontDialog: TFontDialog;
|
|
ColorDialog: TColorDialog;
|
|
GradientCaption: TJvGradientCaption;
|
|
FormStorage: TJvFormStorage;
|
|
CaptionList: TListBox;
|
|
CaptionFont: TJvComboEdit;
|
|
AppStorage: TJvAppRegistryStorage;
|
|
procedure FormCreate(Sender: TObject);
|
|
procedure CaptionListClick(Sender: TObject);
|
|
procedure CaptionListDragDrop(Sender, Source: TObject; X, Y: Integer);
|
|
procedure CaptionListDragOver(Sender, Source: TObject; X, Y: Integer;
|
|
State: TDragState; var Accept: Boolean);
|
|
procedure NewButtonClick(Sender: TObject);
|
|
procedure DeleteButtonClick(Sender: TObject);
|
|
procedure OkButtonClick(Sender: TObject);
|
|
procedure ApplyButtonClick(Sender: TObject);
|
|
procedure CaptionInactiveColorDblClick(Sender: TObject);
|
|
procedure ControlExit(Sender: TObject);
|
|
procedure CaptionTextChange(Sender: TObject);
|
|
procedure CaptionFontButtonClick(Sender: TObject);
|
|
procedure CheckBoxClick(Sender: TObject);
|
|
private
|
|
FComponent: TJvGradientCaption;
|
|
FDesigner: IDesigner;
|
|
FUpdating: Boolean;
|
|
procedure AddColorItem(const ColorName: string);
|
|
procedure EnableControls(Enable: Boolean);
|
|
procedure UpdateCaptionList(Index: Integer);
|
|
procedure ReadControls;
|
|
procedure UpdateControls;
|
|
procedure ClearControls;
|
|
function GetActiveCaption: TJvCaption;
|
|
procedure ApplyChanges;
|
|
public
|
|
procedure SetGradientCaption(Component: TJvGradientCaption;
|
|
Designer: IDesigner);
|
|
property ActiveCaption: TJvCaption read GetActiveCaption;
|
|
end;
|
|
|
|
TJvGradientCaptionEditor = class(TComponentEditor)
|
|
public
|
|
procedure Edit; override;
|
|
procedure ExecuteVerb(Index: Integer); override;
|
|
function GetVerb(Index: Integer): string; override;
|
|
function GetVerbCount: Integer; override;
|
|
end;
|
|
|
|
function EditGradientCaption(Component: TJvGradientCaption;
|
|
ADesigner: IDesigner): Boolean;
|
|
|
|
implementation
|
|
|
|
uses
|
|
JvJVCLUtils, JvBoxProcs, JvConsts, JvDsgnConsts;
|
|
|
|
{$R *.dfm}
|
|
|
|
function EditGradientCaption(Component: TJvGradientCaption;
|
|
ADesigner: IDesigner): Boolean;
|
|
begin
|
|
with TGradCaptionsEditor.Create(Application) do
|
|
try
|
|
SetGradientCaption(Component, ADesigner);
|
|
Result := ShowModal = mrOk;
|
|
finally
|
|
Free;
|
|
end;
|
|
end;
|
|
|
|
//=== { TJvGradientCaptionEditor } ===========================================
|
|
|
|
procedure TJvGradientCaptionEditor.Edit;
|
|
begin
|
|
EditGradientCaption(TJvGradientCaption(Component), Designer);
|
|
end;
|
|
|
|
procedure TJvGradientCaptionEditor.ExecuteVerb(Index: Integer);
|
|
begin
|
|
if Index = 0 then
|
|
Edit;
|
|
end;
|
|
|
|
function TJvGradientCaptionEditor.GetVerb(Index: Integer): string;
|
|
begin
|
|
if Index = 0 then
|
|
Result := RsCaptionDesigner
|
|
else
|
|
Result := '';
|
|
end;
|
|
|
|
function TJvGradientCaptionEditor.GetVerbCount: Integer;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
//=== { TGradCaptionsEditor } ================================================
|
|
|
|
procedure TGradCaptionsEditor.UpdateCaptionList(Index: Integer);
|
|
var
|
|
I, Save: Integer;
|
|
begin
|
|
if Index >= 0 then
|
|
Save := Index
|
|
else
|
|
Save := CaptionList.ItemIndex;
|
|
CaptionList.Items.BeginUpdate;
|
|
try
|
|
CaptionList.Items.Clear;
|
|
for I := 0 to GradientCaption.Captions.Count - 1 do
|
|
CaptionList.Items.Add(Format('%s[%d]', [RsGradientCaptions, I]));
|
|
if Save < 0 then
|
|
Save := 0;
|
|
if Save >= CaptionList.Items.Count then
|
|
Save := CaptionList.Items.Count - 1;
|
|
finally
|
|
CaptionList.Items.EndUpdate;
|
|
CaptionList.ItemIndex := Save;
|
|
end;
|
|
end;
|
|
|
|
function TGradCaptionsEditor.GetActiveCaption: TJvCaption;
|
|
var
|
|
I: Integer;
|
|
begin
|
|
Result := nil;
|
|
I := CaptionList.ItemIndex;
|
|
if (I >= 0) and (I < GradientCaption.Captions.Count) then
|
|
Result := GradientCaption.Captions[I];
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.SetGradientCaption(Component: TJvGradientCaption;
|
|
Designer: IDesigner);
|
|
begin
|
|
FComponent := Component;
|
|
FDesigner := Designer;
|
|
if Component <> nil then
|
|
with GradientCaption do
|
|
begin
|
|
Active := False;
|
|
Font := Component.Font;
|
|
DefaultFont := Component.DefaultFont;
|
|
FontInactiveColor := Component.FontInactiveColor;
|
|
GradientActive := Component.GradientActive;
|
|
GradientInactive := Component.GradientInactive;
|
|
StartColor := Component.StartColor;
|
|
HideDirection := Component.HideDirection;
|
|
GradientSteps := Component.GradientSteps;
|
|
Captions := Component.Captions;
|
|
if Component.Name <> '' then
|
|
FormCaption := Format('%s.%s', [Component.Name, RsGradientCaptions])
|
|
else
|
|
FormCaption := Format('%s.%s', [Component.ClassName, RsGradientCaptions]);
|
|
Active := True;
|
|
end;
|
|
UpdateCaptionList(-1);
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.ApplyChanges;
|
|
begin
|
|
ReadControls;
|
|
if Assigned(FComponent) then
|
|
begin
|
|
FComponent.Captions := GradientCaption.Captions;
|
|
if Assigned(FDesigner) then
|
|
FDesigner.Modified;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.AddColorItem(const ColorName: string);
|
|
begin
|
|
CaptionInactiveColor.Items.Add(ColorName);
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.UpdateControls;
|
|
begin
|
|
if ActiveCaption = nil then
|
|
begin
|
|
ClearControls;
|
|
EnableControls(False);
|
|
end
|
|
else
|
|
with ActiveCaption do
|
|
begin
|
|
FUpdating := True;
|
|
try
|
|
FontDialog.Font := Font;
|
|
CaptionText.Text := Caption;
|
|
CaptionInactiveColor.ItemIndex := -1;
|
|
CaptionInactiveColor.Text := ColorToString(InactiveColor);
|
|
CaptionFont.Text := Font.Name;
|
|
CaptionParentFont.Checked := ParentFont;
|
|
CaptionGlueNext.Checked := GlueNext;
|
|
CaptionVisible.Checked := Visible;
|
|
EnableControls(True);
|
|
finally
|
|
FUpdating := False;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.EnableControls(Enable: Boolean);
|
|
begin
|
|
CaptionText.Enabled := Enable;
|
|
CaptionInactiveColor.Enabled := Enable;
|
|
CaptionFont.Enabled := Enable;
|
|
CaptionParentFont.Enabled := Enable;
|
|
CaptionGlueNext.Enabled := Enable;
|
|
CaptionVisible.Enabled := Enable;
|
|
DeleteButton.Enabled := Enable;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.ClearControls;
|
|
begin
|
|
FUpdating := True;
|
|
try
|
|
CaptionText.Text := '';
|
|
CaptionInactiveColor.ItemIndex := -1;
|
|
CaptionInactiveColor.Text := '';
|
|
CaptionFont.Text := '';
|
|
CaptionParentFont.Checked := False;
|
|
CaptionGlueNext.Checked := False;
|
|
CaptionVisible.Checked := False;
|
|
finally
|
|
FUpdating := False;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.ReadControls;
|
|
begin
|
|
if not FUpdating and (ActiveCaption <> nil) then
|
|
begin
|
|
GradientCaption.Captions.BeginUpdate;
|
|
FUpdating := True;
|
|
try
|
|
with ActiveCaption do
|
|
begin
|
|
Caption := CaptionText.Text;
|
|
InactiveColor := StringToColor(CaptionInactiveColor.Text);
|
|
ParentFont := CaptionParentFont.Checked;
|
|
GlueNext := CaptionGlueNext.Checked;
|
|
Visible := CaptionVisible.Checked;
|
|
end;
|
|
finally
|
|
GradientCaption.Captions.EndUpdate;
|
|
FUpdating := False;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.FormCreate(Sender: TObject);
|
|
begin
|
|
AppStorage.Root := SDelphiKey;
|
|
CaptionInactiveColor.Items.BeginUpdate;
|
|
try
|
|
GetColorValues(AddColorItem);
|
|
finally
|
|
CaptionInactiveColor.Items.EndUpdate;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.CaptionListClick(Sender: TObject);
|
|
begin
|
|
if not FUpdating then
|
|
UpdateControls;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.CaptionListDragDrop(Sender, Source: TObject;
|
|
X, Y: Integer);
|
|
var
|
|
I: Integer;
|
|
begin
|
|
I := CaptionList.ItemAtPos(Point(X, Y), True);
|
|
if (I >= 0) and (I < CaptionList.Items.Count) and
|
|
(I <> CaptionList.ItemIndex) then
|
|
begin
|
|
GradientCaption.MoveCaption(CaptionList.ItemIndex, I);
|
|
CaptionList.ItemIndex := I;
|
|
if not FUpdating then
|
|
UpdateControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.CaptionListDragOver(Sender, Source: TObject;
|
|
X, Y: Integer; State: TDragState; var Accept: Boolean);
|
|
begin
|
|
BoxDragOver(CaptionList, Source, X, Y, State, Accept, CaptionList.Sorted);
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.NewButtonClick(Sender: TObject);
|
|
begin
|
|
if GradientCaption.Captions.Add <> nil then
|
|
begin
|
|
UpdateCaptionList(GradientCaption.Captions.Count - 1);
|
|
UpdateControls;
|
|
if CaptionText.CanFocus then
|
|
ActiveControl := CaptionText;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.DeleteButtonClick(Sender: TObject);
|
|
begin
|
|
if ActiveCaption <> nil then
|
|
begin
|
|
ActiveCaption.Free;
|
|
UpdateCaptionList(-1);
|
|
UpdateControls;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.OkButtonClick(Sender: TObject);
|
|
begin
|
|
ApplyChanges;
|
|
ModalResult := mrOk;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.ApplyButtonClick(Sender: TObject);
|
|
begin
|
|
ApplyChanges;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.CaptionInactiveColorDblClick(Sender: TObject);
|
|
begin
|
|
with ColorDialog do
|
|
begin
|
|
Color := StringToColor(CaptionInactiveColor.Text);
|
|
if Execute then
|
|
begin
|
|
CaptionInactiveColor.Text := ColorToString(Color);
|
|
if not FUpdating and (ActiveCaption <> nil) then
|
|
ActiveCaption.InactiveColor := Color;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.ControlExit(Sender: TObject);
|
|
begin
|
|
if not FUpdating then
|
|
ReadControls;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.CaptionTextChange(Sender: TObject);
|
|
begin
|
|
if not FUpdating and (ActiveCaption <> nil) then
|
|
ActiveCaption.Caption := CaptionText.Text;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.CaptionFontButtonClick(Sender: TObject);
|
|
begin
|
|
if ActiveCaption <> nil then
|
|
begin
|
|
with FontDialog do
|
|
begin
|
|
Font := ActiveCaption.Font;
|
|
Font.Color := ColorToRGB(ActiveCaption.Font.Color);
|
|
if Execute then
|
|
begin
|
|
FUpdating := True;
|
|
try
|
|
CaptionFont.Text := Font.Name;
|
|
ActiveCaption.Font := Font;
|
|
CaptionParentFont.Checked := ActiveCaption.ParentFont;
|
|
finally
|
|
FUpdating := False;
|
|
end;
|
|
end;
|
|
end;
|
|
end
|
|
else
|
|
Beep;
|
|
end;
|
|
|
|
procedure TGradCaptionsEditor.CheckBoxClick(Sender: TObject);
|
|
begin
|
|
if not FUpdating then
|
|
ReadControls;
|
|
end;
|
|
|
|
end.
|
|
|