Files
lazarus-ccr/components/jvcllaz/run/JvMM/jvgradientheaderpanel.pas
wp_xxyyzz 3f5a223715 jvcllaz: Less hints and warnings.
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@7466 8e941d3f-bd1b-0410-a28a-d453659cc2b4
2020-05-23 08:13:16 +00:00

513 lines
14 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: 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$
{$mode objfpc}{$H+}
unit JvGradientHeaderPanel;
interface
uses
LMessages, LCLVersion,
SysUtils, Classes, Graphics, Controls, StdCtrls,
JvGradient, JvTypes, JvComponent;
type
{ TJvGradientHeaderPanel }
TJvGradientHeaderPanel = class(TJvCustomControl)
private
FGradient: TJvGradient;
FLabel: TLabel;
FLabelLeft: Integer;
FLabelTop: Integer;
FLabelRight: Integer;
FLabelBottom: 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);
procedure SetLabelLeft(Value: Integer);
procedure SetLabelTop(Value: Integer);
procedure SetLabelRight(Value: Integer);
procedure SetLabelBottom(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);
function GetLabelLayout: TTextLayout;
procedure SetLabelLayout(const Value: TTextLayout);
function GetLabelWordwrap: Boolean;
procedure SetLabelWordwrap(const Value: Boolean);
procedure WMSize(var Msg: TLMSize); message LM_SIZE;
protected
procedure AdjustLabel;
procedure DoAutoAdjustLayout(const AMode: TLayoutAdjustmentPolicy;
const AXProportion, AYProportion: Double); override;
// 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 FLabelLeft write SetLabelLeft default 10;
property LabelTop: Integer read FLabelTop write SetLabelTop default 8;
property LabelRight: Integer read FLabelRight write SetLabelRight default 10;
property LabelBottom: Integer read FLabelBottom write SetLabelBottom 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 LabelAlignment: TAlignment read GetLabelAlignment write SetLabelAlignment default taLeftJustify;
property LabelLayout: TTextLayout read GetLabelLayout write SetLabelLayout default tlTop;
property LabelWordwrap: Boolean read GetLabelWordwrap write SetLabelWordwrap default false;
property ShowHint: Boolean read FHint write SetShowHint default False;
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;
FLabelLeft := 10;
FLabelTop := 8;
FLabelRight := 10;
FLabelBottom := 8;
FGradient := TNoEventGradient.Create(Self);
FGradient.Parent := Self;
FLabel := TNoEventLabel.Create(Self);
FLabel.AutoSize := true;
// FLabel.AutoSize := False; // wp
FLabel.Align := alClient;
FLabel.Parent := Self;
//FGradient.Left := 0;
//FGradient.Top := 0;
FGradient.StartColor := clBlack;
FGradient.EndColor := clWhite;
FGradient.Steps := 100;
LabelColor := clNone;
FOldLabelFontChange := FLabel.Font.OnChange;
FLabel.Font.OnChange := @DoLabelFontChange;
FLabel.Font.Color := clWhite;
FLabel.Caption := RsYourTextHereCaption;
FLabel.BorderSpacing.Left := FLabelLeft;;
FLabel.BorderSpacing.Top := FLabelTop;
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;
procedure TJvGradientHeaderPanel.SetLabelLeft(Value: Integer);
begin
if FLabelLeft <> Value then
begin
if Value < 0 then
FLabelLeft := 0
else
FLabelLeft := Value;
AdjustLabel;
end;
end;
procedure TJvGradientHeaderPanel.SetLabelRight(Value: Integer);
begin
if FLabelRight <> Value then
begin
if Value < 0 then
FLabelRight := 0
else
FLabelRight := Value;
AdjustLabel;
end;
end;
procedure TJvGradientHeaderPanel.SetLabelTop(Value: Integer);
begin
if Value < 0 then
FLabelTop := 0
else
FLabelTop := Value;
AdjustLabel;
end;
procedure TJvGradientHeaderPanel.SetLabelBottom(Value: Integer);
begin
if Value < 0 then
FLabelBottom := 0
else
FLabelBottom := Value;
AdjustLabel;
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;
AdjustLabel;
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;
AdjustLabel;
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;
AdjustLabel;
end;
function TJvGradientHeaderPanel.GetLabelLayout: TTextLayout;
begin
Result := FLabel.Layout;
end;
procedure TJvGradientHeaderPanel.SetLabelLayout(const Value: TTextLayout);
begin
FLabel.Layout := Value;
AdjustLabel;
end;
function TJvGradientHeaderPanel.GetLabelWordWrap: Boolean;
begin
Result := FLabel.WordWrap;
end;
procedure TJvGradientHeaderPanel.SetLabelWordwrap(const Value: Boolean);
begin
FLabel.WordWrap := Value;
Invalidate;
end;
procedure TJvGradientHeaderPanel.WMSize(var Msg: TLMSize);
begin
inherited;
// AdjustLabel;
end;
procedure TJvGradientHeaderPanel.AdjustLabel;
begin
FLabel.BorderSpacing.Left := FLabelLeft;
FLabel.BorderSpacing.Right := FLabelRight;
FLabel.BorderSpacing.Top := FLabelTop;
FLabel.BorderSpacing.Bottom := FLabelBottom;
if FLabel.Alignment = taCenter then
begin
FLabel.BorderSpacing.Left := 0;
FLabel.BorderSpacing.Right := 0;
end;
if FLabel.Layout = tlCenter then
begin
FLabel.BorderSpacing.Top := 0;
FLabel.BorderSpacing.Bottom := 0;
end;
end;
procedure TJvGradientHeaderPanel.DoAutoAdjustLayout(
const AMode: TLayoutAdjustmentPolicy; const AXProportion, AYProportion: Double
);
begin
inherited;
if AMode in [lapAutoAdjustWithoutHorizontalScrolling, lapAutoAdjustForDPI] then
begin
FLabelLeft := round(FLabelLeft * AXProportion);
FLabelTop := round(FLabelTop * AYProportion);
FLabelRight := round(FLabelRight * AXProportion);
FLabelBottom := round(FLabelBottom * AYProportion);
end;
end;
procedure TJvGradientHeaderPanel.DoLabelFontChange(Sender: TObject);
begin
if Assigned(FOldLabelFontChange) then
FOldLabelFontChange(Sender);
AdjustLabel;
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.