diff --git a/components/jvcllaz/design/JvMM/images/images.txt b/components/jvcllaz/design/JvMM/images/images.txt index 9d167721e..337373814 100644 --- a/components/jvcllaz/design/JvMM/images/images.txt +++ b/components/jvcllaz/design/JvMM/images/images.txt @@ -1,2 +1,3 @@ tjvgradient.bmp +tjvgradientheaderpanel.bmp tjvspecialprogress.bmp diff --git a/components/jvcllaz/design/JvMM/images/tjvgradientheaderpanel.bmp b/components/jvcllaz/design/JvMM/images/tjvgradientheaderpanel.bmp new file mode 100644 index 000000000..37fcd13fd Binary files /dev/null and b/components/jvcllaz/design/JvMM/images/tjvgradientheaderpanel.bmp differ diff --git a/components/jvcllaz/design/JvMM/jvmmreg.pas b/components/jvcllaz/design/JvMM/jvmmreg.pas index b330b8ffa..c8942f6a4 100644 --- a/components/jvcllaz/design/JvMM/jvmmreg.pas +++ b/components/jvcllaz/design/JvMM/jvmmreg.pas @@ -16,12 +16,12 @@ implementation uses Classes, JvDsgnConsts, PropEdits, Controls, - JvGradient, JvSpecialProgress; + JvGradient, JvGradientHeaderPanel, JvSpecialProgress; procedure Register; begin RegisterComponents(RsPaletteJvcl, [ - TJvGradient, + TJvGradient, TJvGradientHeaderPanel, TJvSpecialProgress ]); end; diff --git a/components/jvcllaz/packages/jvmmlazr.lpk b/components/jvcllaz/packages/jvmmlazr.lpk index 5ad98a6a4..20c109843 100644 --- a/components/jvcllaz/packages/jvmmlazr.lpk +++ b/components/jvcllaz/packages/jvmmlazr.lpk @@ -15,7 +15,7 @@ - + @@ -24,6 +24,10 @@ + + + + diff --git a/components/jvcllaz/resource/jvmmreg.res b/components/jvcllaz/resource/jvmmreg.res index 99db723d5..159b7db3b 100644 Binary files a/components/jvcllaz/resource/jvmmreg.res and b/components/jvcllaz/resource/jvmmreg.res differ diff --git a/components/jvcllaz/run/JvMM/JvGradientHeaderPanel.pas b/components/jvcllaz/run/JvMM/JvGradientHeaderPanel.pas new file mode 100644 index 000000000..0ea092831 --- /dev/null +++ b/components/jvcllaz/run/JvMM/JvGradientHeaderPanel.pas @@ -0,0 +1,446 @@ +{----------------------------------------------------------------------------- +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: JvGradientCaption.PAS, released on 2001-02-28. + +The Initial Developer of the Original Code is Sébastien Buysse [sbuysse att buypin dott com] +Portions created by Sébastien Buysse are Copyright (C) 2001 Sébastien Buysse. +All Rights Reserved. + +Contributor(s): Michael Beck [mbeck att bigfoot dott com]. + +You may retrieve the latest version of this file at the Project JEDI's JVCL home page, +located at http://jvcl.delphi-jedi.org + +Known Issues: +-----------------------------------------------------------------------------} +// $Id$ + +unit JvGradientHeaderPanel; + + +interface + +uses + LMessages, Types, + SysUtils, Classes, Graphics, Controls, StdCtrls, + JvGradient, JvTypes, JvComponent; + +type + TJvGradientHeaderPanel = class(TJvCustomControl) + private + FGradient: TJvGradient; + FLabel: TLabel; + FLabelLeft: Integer; + FHint: Boolean; + FOldLabelFontChange: TNotifyEvent; + function GetGradientCursor: TCursor; + procedure SetGradientCursor(Value: TCursor); + function GetGradientHint: string; + procedure SetGradientHint(const Value: string); + function GetGradientStartColor: TColor; + procedure SetGradientStartColor(Value: TColor); + function GetGradientEndColor: TColor; + procedure SetGradientEndColor(Value: TColor); + function GetGradientSteps: Integer; + procedure SetGradientSteps(Value: Integer); + function GetLabelLeft: Integer; + procedure SetLabelLeft(Value: Integer); + function GetLabelTop: Integer; + procedure SetLabelTop(Value: Integer); + function GetLabelCursor: TCursor; + procedure SetLabelCursor(Value: TCursor); + function GetLabelHint: string; + procedure SetLabelHint(const Value: string); + function GetLabelCaption: string; + procedure SetLabelCaption(const Value: string); + function GetLabelColor: TColor; + procedure SetLabelColor(Value: TColor); + procedure SetShowHint(const Value: Boolean); + function GetLabelFont: TFont; + procedure SetLabelFont(const Value: TFont); + function GetGradientStyle: TJvGradientStyle; + procedure SetGradientStyle(const Value: TJvGradientStyle); + function GetLabelAlignment: TAlignment; + procedure SetLabelAlignment(const Value: TAlignment); + procedure AdjustLabelWidth; + procedure WMSize(var Msg: TLMSize); message LM_SIZE; + protected +// function DoEraseBackground(Canvas: TCanvas; Param: LPARAM): Boolean; override; + procedure DoLabelFontChange(Sender: TObject); + procedure MouseDown(Button: TMouseButton; Shift: TShiftState; + X, Y: Integer); override; + public + constructor Create(AOwner: TComponent); override; + destructor Destroy; override; + published + property GradientCursor: TCursor read GetGradientCursor write SetGradientCursor default crDefault; + property GradientHint: string read GetGradientHint write SetGradientHint; + property GradientStartColor: TColor read GetGradientStartColor write SetGradientStartColor default clBlack; + property GradientEndColor: TColor read GetGradientEndColor write SetGradientEndColor default clWhite; + property GradientSteps: Integer read GetGradientSteps write SetGradientSteps default 100; + property GradientStyle: TJvGradientStyle read GetGradientStyle write SetGradientStyle default grHorizontal; + property LabelLeft: Integer read GetLabelLeft write SetLabelLeft default 10; + property LabelTop: Integer read GetLabelTop write SetLabelTop default 8; + property LabelCursor: TCursor read GetLabelCursor write SetLabelCursor default crDefault; + property LabelHint: string read GetLabelHint write SetLabelHint; + property LabelCaption: string read GetLabelCaption write SetLabelCaption; + // LabelColor sets the background Color of the label (used for text in the control). + // To get a transparent text background, set LabelColor to clNone + property LabelColor: TColor read GetLabelColor write SetLabelColor default clNone; + property LabelFont: TFont read GetLabelFont write SetLabelFont; + property ShowHint: Boolean read FHint write SetShowHint default False; + property LabelAlignment: TAlignment read GetLabelAlignment write SetLabelAlignment; + property Align; + property Anchors; + property AutoSize; +{ + property BevelEdges; + property BevelInner; + property BevelKind; + property BevelOuter; + property BevelWidth; +} + property BorderSpacing; +// property BorderWidth; + property Constraints; + property DockSite; + property DoubleBuffered; + property DragMode; + property Enabled; + property Font; + property ParentShowHint; + property PopupMenu; + property TabOrder; + property TabStop; + property Visible; +// property OnCanResize; + property OnDockDrop; + property OnDockOver; + property OnGetSiteInfo; + property OnUnDock; + property OnClick; + property OnConstrainedResize; + property OnContextPopup; + property OnDblClick; + property OnDragDrop; + property OnDragOver; + property OnEndDrag; + property OnEnter; + property OnExit; + property OnKeyDown; + property OnKeyPress; + property OnKeyUp; + property OnMouseDown; + property OnMouseMove; + property OnMouseUp; + property OnMouseWheel; + property OnMouseWheelDown; + property OnMouseWheelUp; + property OnResize; + property OnStartDrag; + end; + + +implementation + +uses + JvResources; + +type + TNoEventLabel = class(TLabel) + public + procedure Dispatch(var Message); override; + end; + + TNoEventGradient = class(TJvGradient) + public + procedure Dispatch(var Message); override; + end; + +constructor TJvGradientHeaderPanel.Create(AOwner: TComponent); +begin + inherited Create(AOwner); + ControlStyle := ControlStyle + [csOpaque, csAcceptsControls]; + Self.Width := 285; + Self.Height := 30; + FGradient := TNoEventGradient.Create(Self); + FGradient.Parent := Self; + FLabel := TNoEventLabel.Create(Self); + FLabel.AutoSize := False; + FLabel.Parent := Self; + FGradient.Left := 0; + FGradient.Top := 0; + FGradient.StartColor := clBlack; + FGradient.EndColor := clWhite; + FGradient.Steps := 100; + LabelLeft := 10; + FLabel.Top := 8; + LabelColor := clNone; + FOldLabelFontChange := FLabel.Font.OnChange; + FLabel.Font.OnChange := @DoLabelFontChange; + FLabel.Font.Color := clWhite; + FLabel.Caption := RsYourTextHereCaption; + FHint := False; +end; + +destructor TJvGradientHeaderPanel.Destroy; +begin + FGradient.Free; + // FLabel.OnChange := FOldLabelFontChange; + FLabel.Free; + inherited Destroy; +end; + +function TJvGradientHeaderPanel.GetGradientCursor: TCursor; +begin + Result := FGradient.Cursor; +end; + +procedure TJvGradientHeaderPanel.SetGradientCursor(Value: TCursor); +begin + FGradient.Cursor := Value; +end; + +function TJvGradientHeaderPanel.GetGradientHint: string; +begin + Result := FGradient.Hint; +end; + +procedure TJvGradientHeaderPanel.SetGradientHint(const Value: string); +begin + FGradient.Hint := Value; +end; + +function TJvGradientHeaderPanel.GetGradientStartColor: TColor; +begin + Result := FGradient.StartColor; +end; + +procedure TJvGradientHeaderPanel.SetGradientStartColor(Value: TColor); +begin + FGradient.StartColor := Value; +end; + +function TJvGradientHeaderPanel.GetGradientEndColor: TColor; +begin + Result := FGradient.EndColor; +end; + +procedure TJvGradientHeaderPanel.SetGradientEndColor(Value: TColor); +begin + FGradient.EndColor := Value; +end; + +function TJvGradientHeaderPanel.GetGradientSteps: Integer; +begin + Result := FGradient.Steps; +end; + +procedure TJvGradientHeaderPanel.SetGradientSteps(Value: Integer); +begin + FGradient.Steps := Value; +end; + +function TJvGradientHeaderPanel.GetLabelLeft: Integer; +begin + Result := FLabelLeft; +end; + +procedure TJvGradientHeaderPanel.SetLabelLeft(Value: Integer); +begin + if FLabel.Left <> Value then + begin + if Value < 0 then + Value := 0; + FLabel.Left := Value; + FLabelLeft := Value; + AdjustLabelWidth; + end; +end; + +function TJvGradientHeaderPanel.GetLabelTop: Integer; +begin + Result := FLabel.Top; +end; + +procedure TJvGradientHeaderPanel.SetLabelTop(Value: Integer); +begin + if Value < 0 then + Value := 0; + FLabel.Top := Value; +end; + +function TJvGradientHeaderPanel.GetLabelCursor: TCursor; +begin + Result := FLabel.Cursor; +end; + +procedure TJvGradientHeaderPanel.SetLabelCursor(Value: TCursor); +begin + FLabel.Cursor := Value; +end; + +function TJvGradientHeaderPanel.GetLabelHint: string; +begin + Result := FLabel.Hint; +end; + +procedure TJvGradientHeaderPanel.SetLabelHint(const Value: string); +begin + FLabel.Hint := Value; +end; + +function TJvGradientHeaderPanel.GetLabelCaption: string; +begin + Result := FLabel.Caption; +end; + +procedure TJvGradientHeaderPanel.SetLabelCaption(const Value: string); +begin + FLabel.Caption := Value; + AdjustLabelWidth; +end; + +function TJvGradientHeaderPanel.GetLabelColor: TColor; +begin + Result := FLabel.Color; +end; + +procedure TJvGradientHeaderPanel.SetLabelColor(Value: TColor); +begin + FLabel.Color := Value; + FLabel.Transparent := (Value = clNone); +end; + +procedure TJvGradientHeaderPanel.SetShowHint(const Value: Boolean); +begin + FHint := Value; + FLabel.ShowHint := Value; + FGradient.ShowHint := Value; +end; + +function TJvGradientHeaderPanel.GetLabelFont: TFont; +begin + Result := FLabel.Font; +end; + +procedure TJvGradientHeaderPanel.SetLabelFont(const Value: TFont); +begin + FLabel.Font := Value; + AdjustLabelWidth; +end; + +function TJvGradientHeaderPanel.GetGradientStyle: TJvGradientStyle; +begin + Result := FGradient.Style; +end; + +procedure TJvGradientHeaderPanel.SetGradientStyle(const Value: TJvGradientStyle); +begin + FGradient.Style := Value; +end; + +function TJvGradientHeaderPanel.GetLabelAlignment: TAlignment; +begin + Result := FLabel.Alignment; +end; + +procedure TJvGradientHeaderPanel.SetLabelAlignment(const Value: TAlignment); +begin + FLabel.Alignment := Value; + AdjustLabelWidth; +end; + +procedure TJvGradientHeaderPanel.WMSize(var Msg: TLMSize); +begin + inherited; + AdjustLabelWidth; +end; + + +procedure TJvGradientHeaderPanel.AdjustLabelWidth; +var + W, L: Integer; +begin + L := FLabel.Left; + // make as large as we need: + FLabel.AutoSize := True; + FLabel.AutoSize := False; + FLabel.Left := L; + W := FGradient.Width - FLabelLeft - FLabelLeft; + // make bigger if there's room + if W > FLabel.Width then + begin + FLabel.Width := W; + FLabel.Left := FLabelLeft; + end + else + if W < FLabel.Width then // otherwise, just center + begin + FLabel.Left := (Width - FLabel.Width) div 2; + // if (FLabelLeft > FLabel.Left) and then + // FLabelLeft := FLabel.Left; + end; +end; + +procedure TJvGradientHeaderPanel.DoLabelFontChange(Sender: TObject); +begin + if Assigned(FOldLabelFontChange) then + FOldLabelFontChange(Sender); + AdjustLabelWidth; +end; + +procedure TJvGradientHeaderPanel.MouseDown(Button: TMouseButton; + Shift: TShiftState; X, Y: Integer); +begin + inherited MouseDown(Button, Shift, X, Y); + if CanFocus then + SetFocus; +end; + +(* +function TJvGradientHeaderPanel.DoEraseBackground(Canvas: TCanvas; Param: LPARAM): Boolean; +begin + { Reduce flickering FGradient completely fills the TJvGradientHeaderPanel } + Result := True; +end; +*) + +//=== { TNoEventLabel } ====================================================== + +procedure TNoEventLabel.Dispatch(var Message); +begin + with TLMessage(Message) do + if (Parent <> nil) and + (((Msg >= LM_MOUSEFIRST) and (Msg <= LM_MOUSELAST)) or + ((Msg >= LM_KEYFIRST) and (Msg <= LM_KEYLAST))) then + Parent.Dispatch(Message) + else + inherited Dispatch(Message); +end; + + +//=== { TNoEventGradient } =================================================== + +procedure TNoEventGradient.Dispatch(var Message); +begin + with TLMessage(Message) do + if (Parent <> nil) and + (((Msg >= LM_MOUSEFIRST) and (Msg <= LM_MOUSELAST)) or + ((Msg >= LM_KEYFIRST) and (Msg <= LM_KEYLAST))) then + Parent.Dispatch(Message) + else + inherited Dispatch(Message); +end; + + + +end.