{----------------------------------------------------------------------------- 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: JvExExtCtrls.pas, released on 2004-01-04 The Initial Developer of the Original Code is Andreas Hausladen [Andreas dott Hausladen att gmx dott de] Portions created by Andreas Hausladen are Copyright (C) 2004 Andreas Hausladen. All Rights Reserved. Contributor(s): - 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: JvExExtCtrls.pas 10883 2006-08-13 13:20:07Z ahuser $ unit JvExExtCtrls; {$I jvcl.inc} {MACROINCLUDE JvExControls.macros} {***************************************************************************** * WARNING: Do not edit this file. * This file is autogenerated from the source in devtools/JvExVCL/src. * If you do it despite this warning your changes will be discarded by the next * update of this file. Do your changes in the template files. ****************************************************************************} {$D-} // do not step into this unit interface uses Windows, Messages, {$IFDEF HAS_UNIT_TYPES} Types, {$ENDIF HAS_UNIT_TYPES} SysUtils, Classes, Graphics, Controls, Forms, ExtCtrls, {$IFDEF UNITVERSIONING} JclUnitVersioning, {$ENDIF UNITVERSIONING} JvTypes, JvThemes, JVCLVer, JvExControls; type TJvExShape = class(TShape, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; end; TJvExPaintBox = class(TPaintBox, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; end; TJvExImage = class(TImage, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; end; TJvExBevel = class(TBevel, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; end; TJvExCustomPanel = class(TCustomPanel, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExPubCustomPanel = class(TJvExCustomPanel) published property BiDiMode; property DragCursor; property DragKind; property DragMode; property ParentBiDiMode; property OnEndDock; property OnStartDock; end; TJvExCustomRadioGroup = class(TCustomRadioGroup, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExSplitter = class(TSplitter, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; protected procedure MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); override; end; TJvExCustomControlBar = class(TCustomControlBar, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExControlBar = class(TControlBar, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExPanel = class(TPanel, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExRadioGroup = class(TRadioGroup, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExPage = class(TPage, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExNotebook = class(TNotebook, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExHeader = class(THeader, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; {$IFDEF COMPILER6_UP} TJvExBoundLabel = class(TBoundLabel, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; end; TJvExCustomLabeledEdit = class(TCustomLabeledEdit, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExLabeledEdit = class(TLabeledEdit, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExCustomColorBox = class(TCustomColorBox, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; TJvExColorBox = class(TColorBox, IJvExControl) private FAboutJVCL: TJVCLAboutInfo; FHintColor: TColor; FMouseOver: Boolean; FHintWindowClass: THintWindowClass; {$IFDEF VCL} FOnMouseEnter: TNotifyEvent; FOnMouseLeave: TNotifyEvent; {$ENDIF VCL} FOnParentColorChanged: TNotifyEvent; function BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; overload; function BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; overload; function BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; protected procedure WndProc(var Msg: TMessage); override; {$IFNDEF CLR} procedure FocusChanged(AControl: TWinControl); dynamic; {$ENDIF !CLR} procedure VisibleChanged; reintroduce; dynamic; procedure EnabledChanged; reintroduce; dynamic; procedure TextChanged; reintroduce; virtual; procedure ColorChanged; reintroduce; dynamic; procedure FontChanged; reintroduce; dynamic; procedure ParentFontChanged; reintroduce; dynamic; procedure ParentColorChanged; reintroduce; dynamic; procedure ParentShowHintChanged; reintroduce; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; reintroduce; virtual; function HintShow(var HintInfo: THintInfo): Boolean; reintroduce; dynamic; function HitTest(X, Y: Integer): Boolean; reintroduce; virtual; procedure MouseEnter(AControl: TControl); reintroduce; dynamic; procedure MouseLeave(AControl: TControl); reintroduce; dynamic; {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure CMSetAutoSize(var Msg: TMessage); message CM_SETAUTOSIZE; procedure SetAutoSize(Value: Boolean); virtual; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} property MouseOver: Boolean read FMouseOver write FMouseOver; property HintColor: TColor read FHintColor write FHintColor default clDefault; {$IFDEF VCL} property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} property OnParentColorChange: TNotifyEvent read FOnParentColorChanged write FOnParentColorChanged; public constructor Create(AOwner: TComponent); override; property HintWindowClass: THintWindowClass read FHintWindowClass write FHintWindowClass; published property AboutJVCL: TJVCLAboutInfo read FAboutJVCL write FAboutJVCL stored False; private FDotNetHighlighting: Boolean; protected procedure BoundsChanged; reintroduce; virtual; procedure CursorChanged; reintroduce; dynamic; procedure ShowingChanged; reintroduce; dynamic; procedure ShowHintChanged; reintroduce; dynamic; {$IFNDEF CLR} procedure ControlsListChanging(Control: TControl; Inserting: Boolean); reintroduce; dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); reintroduce; dynamic; {$ENDIF !CLR} procedure GetDlgCode(var Code: TDlgCodes); virtual; procedure FocusSet(PrevWnd: THandle); virtual; procedure FocusKilled(NextWnd: THandle); virtual; function DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; virtual; {$IFDEF JVCLThemesEnabledD56} private function GetParentBackground: Boolean; protected procedure SetParentBackground(Value: Boolean); virtual; property ParentBackground: Boolean read GetParentBackground write SetParentBackground; {$ENDIF JVCLThemesEnabledD56} published property DotNetHighlighting: Boolean read FDotNetHighlighting write FDotNetHighlighting default False; end; {$ENDIF COMPILER6_UP} // SplitterMouseDownFix fixes a bug in the VCL that causes the splitter to no // more work with the control in the left/top of it when the control has a size // of 0. This is actually a TWinControl.AlignControl bug. procedure SplitterMouseDownFix(Splitter: TSplitter); {$IFDEF UNITVERSIONING} const UnitVersioning: TUnitVersionInfo = ( RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_32/run/JvExExtCtrls.pas $'; Revision: '$Revision: 10883 $'; Date: '$Date: 2006-08-13 15:20:07 +0200 (dim., 13 août 2006) $'; LogPath: 'JVCL\run' ); {$ENDIF UNITVERSIONING} implementation constructor TJvExShape.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExShape.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExShape.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExShape.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExShape.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExShape.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExShape.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExShape.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExShape.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExShape.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExShape.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExShape.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExShape.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExShape.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExShape.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExShape.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExShape.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExShape.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExShape.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExShape.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExShape.WndProc(var Msg: TMessage); {$IFDEF CLR} var AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; else inherited WndProc(Msg); end; end; //============================================================================ constructor TJvExPaintBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExPaintBox.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExPaintBox.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExPaintBox.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExPaintBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExPaintBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExPaintBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExPaintBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExPaintBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExPaintBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExPaintBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExPaintBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExPaintBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExPaintBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExPaintBox.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExPaintBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExPaintBox.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExPaintBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExPaintBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExPaintBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExPaintBox.WndProc(var Msg: TMessage); {$IFDEF CLR} var AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; else inherited WndProc(Msg); end; end; //============================================================================ constructor TJvExImage.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExImage.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExImage.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExImage.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExImage.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExImage.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExImage.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExImage.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExImage.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExImage.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExImage.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExImage.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExImage.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExImage.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExImage.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExImage.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExImage.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExImage.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExImage.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExImage.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExImage.WndProc(var Msg: TMessage); {$IFDEF CLR} var AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; else inherited WndProc(Msg); end; end; //============================================================================ constructor TJvExBevel.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExBevel.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExBevel.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExBevel.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExBevel.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExBevel.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExBevel.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExBevel.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExBevel.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExBevel.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExBevel.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExBevel.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExBevel.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExBevel.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExBevel.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExBevel.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExBevel.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExBevel.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExBevel.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExBevel.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExBevel.WndProc(var Msg: TMessage); {$IFDEF CLR} var AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; else inherited WndProc(Msg); end; end; //============================================================================ constructor TJvExCustomPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomPanel.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomPanel.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomPanel.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExCustomPanel.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomPanel.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomPanel.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomPanel.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomPanel.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomPanel.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomPanel.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomPanel.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomPanel.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomPanel.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomPanel.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExCustomPanel.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomPanel.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExCustomPanel.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomPanel.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomPanel.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomPanel.BoundsChanged; begin end; procedure TJvExCustomPanel.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomPanel.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomPanel.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExCustomPanel.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExCustomPanel.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExCustomPanel.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomPanel.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomPanel.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomPanel.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomPanel.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomPanel.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomPanel.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExCustomRadioGroup.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomRadioGroup.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomRadioGroup.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomRadioGroup.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExCustomRadioGroup.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomRadioGroup.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomRadioGroup.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomRadioGroup.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomRadioGroup.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomRadioGroup.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomRadioGroup.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomRadioGroup.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomRadioGroup.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomRadioGroup.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomRadioGroup.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExCustomRadioGroup.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomRadioGroup.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExCustomRadioGroup.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomRadioGroup.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomRadioGroup.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomRadioGroup.BoundsChanged; begin end; procedure TJvExCustomRadioGroup.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomRadioGroup.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomRadioGroup.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExCustomRadioGroup.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExCustomRadioGroup.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExCustomRadioGroup.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomRadioGroup.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomRadioGroup.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomRadioGroup.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomRadioGroup.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomRadioGroup.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomRadioGroup.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExCustomControlBar.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomControlBar.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomControlBar.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomControlBar.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExCustomControlBar.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomControlBar.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomControlBar.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomControlBar.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomControlBar.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomControlBar.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomControlBar.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomControlBar.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomControlBar.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomControlBar.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomControlBar.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExCustomControlBar.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomControlBar.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExCustomControlBar.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomControlBar.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomControlBar.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomControlBar.BoundsChanged; begin end; procedure TJvExCustomControlBar.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomControlBar.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomControlBar.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExCustomControlBar.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExCustomControlBar.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExCustomControlBar.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomControlBar.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomControlBar.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomControlBar.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomControlBar.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomControlBar.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomControlBar.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExControlBar.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExControlBar.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExControlBar.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExControlBar.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExControlBar.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExControlBar.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExControlBar.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExControlBar.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExControlBar.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExControlBar.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExControlBar.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExControlBar.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExControlBar.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExControlBar.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExControlBar.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExControlBar.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExControlBar.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExControlBar.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExControlBar.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExControlBar.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExControlBar.BoundsChanged; begin end; procedure TJvExControlBar.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExControlBar.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExControlBar.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExControlBar.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExControlBar.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExControlBar.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExControlBar.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExControlBar.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExControlBar.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExControlBar.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExControlBar.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExControlBar.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExPanel.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExPanel.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExPanel.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExPanel.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExPanel.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExPanel.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExPanel.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExPanel.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExPanel.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExPanel.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExPanel.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExPanel.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExPanel.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExPanel.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExPanel.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExPanel.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExPanel.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExPanel.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExPanel.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExPanel.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExPanel.BoundsChanged; begin end; procedure TJvExPanel.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExPanel.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExPanel.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExPanel.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExPanel.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExPanel.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExPanel.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExPanel.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExPanel.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExPanel.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExPanel.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExPanel.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExRadioGroup.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExRadioGroup.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExRadioGroup.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExRadioGroup.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExRadioGroup.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExRadioGroup.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExRadioGroup.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExRadioGroup.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExRadioGroup.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExRadioGroup.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExRadioGroup.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExRadioGroup.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExRadioGroup.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExRadioGroup.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExRadioGroup.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExRadioGroup.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExRadioGroup.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExRadioGroup.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExRadioGroup.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExRadioGroup.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExRadioGroup.BoundsChanged; begin end; procedure TJvExRadioGroup.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExRadioGroup.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExRadioGroup.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExRadioGroup.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExRadioGroup.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExRadioGroup.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExRadioGroup.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExRadioGroup.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExRadioGroup.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExRadioGroup.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExRadioGroup.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExRadioGroup.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExPage.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExPage.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExPage.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExPage.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExPage.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExPage.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExPage.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExPage.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExPage.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExPage.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExPage.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExPage.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExPage.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExPage.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExPage.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExPage.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExPage.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExPage.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExPage.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExPage.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExPage.BoundsChanged; begin end; procedure TJvExPage.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExPage.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExPage.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExPage.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExPage.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExPage.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExPage.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExPage.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExPage.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExPage.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExPage.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExPage.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExNotebook.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExNotebook.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExNotebook.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExNotebook.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExNotebook.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExNotebook.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExNotebook.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExNotebook.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExNotebook.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExNotebook.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExNotebook.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExNotebook.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExNotebook.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExNotebook.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExNotebook.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExNotebook.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExNotebook.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExNotebook.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExNotebook.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExNotebook.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExNotebook.BoundsChanged; begin end; procedure TJvExNotebook.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExNotebook.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExNotebook.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExNotebook.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExNotebook.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExNotebook.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExNotebook.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExNotebook.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExNotebook.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExNotebook.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExNotebook.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExNotebook.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExHeader.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExHeader.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExHeader.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExHeader.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExHeader.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExHeader.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExHeader.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExHeader.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExHeader.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExHeader.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExHeader.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExHeader.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExHeader.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExHeader.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExHeader.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExHeader.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExHeader.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExHeader.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExHeader.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExHeader.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExHeader.BoundsChanged; begin end; procedure TJvExHeader.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExHeader.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExHeader.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExHeader.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExHeader.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExHeader.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExHeader.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExHeader.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExHeader.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExHeader.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExHeader.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExHeader.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ {$IFDEF COMPILER6_UP} constructor TJvExBoundLabel.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExBoundLabel.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExBoundLabel.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExBoundLabel.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExBoundLabel.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExBoundLabel.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExBoundLabel.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExBoundLabel.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExBoundLabel.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExBoundLabel.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExBoundLabel.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExBoundLabel.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExBoundLabel.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExBoundLabel.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExBoundLabel.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExBoundLabel.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExBoundLabel.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExBoundLabel.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExBoundLabel.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExBoundLabel.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExBoundLabel.WndProc(var Msg: TMessage); {$IFDEF CLR} var AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; else inherited WndProc(Msg); end; end; //============================================================================ constructor TJvExCustomLabeledEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomLabeledEdit.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomLabeledEdit.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomLabeledEdit.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExCustomLabeledEdit.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomLabeledEdit.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomLabeledEdit.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomLabeledEdit.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomLabeledEdit.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomLabeledEdit.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomLabeledEdit.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomLabeledEdit.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomLabeledEdit.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomLabeledEdit.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomLabeledEdit.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExCustomLabeledEdit.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomLabeledEdit.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExCustomLabeledEdit.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomLabeledEdit.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomLabeledEdit.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomLabeledEdit.BoundsChanged; begin end; procedure TJvExCustomLabeledEdit.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomLabeledEdit.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomLabeledEdit.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExCustomLabeledEdit.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExCustomLabeledEdit.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExCustomLabeledEdit.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomLabeledEdit.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomLabeledEdit.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomLabeledEdit.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomLabeledEdit.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomLabeledEdit.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomLabeledEdit.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExLabeledEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExLabeledEdit.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExLabeledEdit.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExLabeledEdit.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExLabeledEdit.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExLabeledEdit.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExLabeledEdit.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExLabeledEdit.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExLabeledEdit.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExLabeledEdit.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExLabeledEdit.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExLabeledEdit.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExLabeledEdit.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExLabeledEdit.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExLabeledEdit.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExLabeledEdit.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExLabeledEdit.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExLabeledEdit.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExLabeledEdit.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExLabeledEdit.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExLabeledEdit.BoundsChanged; begin end; procedure TJvExLabeledEdit.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExLabeledEdit.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExLabeledEdit.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExLabeledEdit.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExLabeledEdit.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExLabeledEdit.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExLabeledEdit.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExLabeledEdit.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExLabeledEdit.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExLabeledEdit.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExLabeledEdit.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExLabeledEdit.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExCustomColorBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomColorBox.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomColorBox.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExCustomColorBox.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExCustomColorBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomColorBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomColorBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomColorBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomColorBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomColorBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomColorBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomColorBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomColorBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomColorBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomColorBox.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExCustomColorBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomColorBox.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExCustomColorBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomColorBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomColorBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomColorBox.BoundsChanged; begin end; procedure TJvExCustomColorBox.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomColorBox.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomColorBox.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExCustomColorBox.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExCustomColorBox.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExCustomColorBox.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomColorBox.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomColorBox.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomColorBox.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomColorBox.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomColorBox.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomColorBox.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExColorBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExColorBox.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExColorBox.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExColorBox.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExColorBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExColorBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExColorBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExColorBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExColorBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExColorBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExColorBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExColorBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExColorBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExColorBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExColorBox.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExColorBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExColorBox.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExColorBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExColorBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExColorBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExColorBox.BoundsChanged; begin end; procedure TJvExColorBox.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExColorBox.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExColorBox.ShowHintChanged; begin BaseWndProc(CM_SHOWHINTCHANGED); end; {$IFNDEF CLR} { VCL sends CM_CONTROLLISTCHANGE and CM_CONTROLCHANGE in a different order than the CLX methods are used. So we must correct it by evaluating "Inserting". } procedure TJvExColorBox.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; procedure TJvExColorBox.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then BaseWndProc(CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else BaseWndProc(CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)); end; {$ENDIF !CLR} procedure TJvExColorBox.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExColorBox.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExColorBox.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExColorBox.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExColorBox.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExColorBox.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExColorBox.WndProc(var Msg: TMessage); var IdSaveDC: Integer; DlgCodes: TDlgCodes; Canvas: TCanvas; {$IFDEF CLR} AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then begin case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; CM_CURSORCHANGED: CursorChanged; CM_SHOWINGCHANGED: ShowingChanged; CM_SHOWHINTCHANGED: ShowHintChanged; {$IFNDEF CLR} CM_CONTROLLISTCHANGE: if Msg.LParam <> 0 then ControlsListChanging(TControl(Msg.WParam), True) else ControlsListChanged(TControl(Msg.WParam), False); CM_CONTROLCHANGE: if Msg.LParam = 0 then ControlsListChanging(TControl(Msg.WParam), False) else ControlsListChanged(TControl(Msg.WParam), True); {$ENDIF !CLR} WM_SETFOCUS: FocusSet(THandle(Msg.WParam)); WM_KILLFOCUS: FocusKilled(THandle(Msg.WParam)); WM_SIZE: begin inherited WndProc(Msg); BoundsChanged; end; WM_ERASEBKGND: begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against Stock-Objects from Canvas Canvas := TCanvas.Create; try Canvas.Handle := HDC(Msg.WParam); Msg.Result := Ord(DoEraseBackground(Canvas, Msg.LParam)); finally Canvas.Handle := 0; Canvas.Free; RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_PRINTCLIENT, WM_PRINT: // VCL bug fix begin IdSaveDC := SaveDC(HDC(Msg.WParam)); // protect DC against changes try inherited WndProc(Msg); finally RestoreDC(HDC(Msg.WParam), IdSaveDC); end; end; WM_GETDLGCODE: begin inherited WndProc(Msg); DlgCodes := [dcNative] + DlgcToDlgCodes(Msg.Result); GetDlgCode(DlgCodes); if not (dcNative in DlgCodes) then Msg.Result := DlgCodesToDlgc(DlgCodes); end; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ {$ENDIF COMPILER6_UP} constructor TJvExSplitter.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExSplitter.BaseWndProc(Msg: Integer; WParam: Integer = 0; LParam: Longint = 0): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExSplitter.BaseWndProc(Msg: Integer; WParam: Integer; LParam: TControl): Integer; var Mesg: TMessage; begin Mesg := CreateWMMessage(Msg, WParam, LParam); inherited WndProc(Mesg); Result := Mesg.Result; end; function TJvExSplitter.BaseWndProcEx(Msg: Integer; WParam: Integer; var LParam): Integer; var Mesg: TStructPtrMessage; begin Mesg := TStructPtrMessage.Create(Msg, WParam, LParam); try inherited WndProc(Mesg.Msg); finally Result := Mesg.Msg.Result; Mesg.Free; end; end; procedure TJvExSplitter.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExSplitter.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExSplitter.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExSplitter.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExSplitter.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExSplitter.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExSplitter.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExSplitter.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExSplitter.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExSplitter.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExSplitter.HintShow(var HintInfo: THintInfo): Boolean; begin GetHintColor(HintInfo, Self, FHintColor); if FHintWindowClass <> nil then HintInfo.HintWindowClass := FHintWindowClass; Result := BaseWndProcEx(CM_HINTSHOW, 0, HintInfo) <> 0; end; procedure TJvExSplitter.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExSplitter.MouseLeave(AControl: TControl); begin FMouseOver := False; BaseWndProc(CM_MOUSELEAVE, 0, AControl); {$IFDEF VCL} if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); {$ENDIF VCL} end; {$IFNDEF CLR} procedure TJvExSplitter.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExSplitter.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExSplitter.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExSplitter.WndProc(var Msg: TMessage); {$IFDEF CLR} var AHintInfo: THintInfo; {$ENDIF CLR} begin if not DispatchIsDesignMsg(Self, Msg) then case Msg.Msg of CM_DENYSUBCLASSING: {$IFNDEF CLR} Msg.Result := Ord(GetInterfaceEntry(IJvDenySubClassing) <> nil); {$ELSE} Msg.Result := Integer(Supports(Self, IJvDenySubClassing)); {$ENDIF !CLR} CM_DIALOGCHAR: with TCMDialogChar{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Ord(WantKey(CharCode, KeyDataToShiftState(KeyData), WideChar(CharCode))); CM_HINTSHOW: {$IFNDEF CLR} with TCMHintShow(Msg) do Result := Integer(HintShow(HintInfo^)); {$ELSE} with TCMHintShow.Create(Msg) do begin AHintInfo := HintInfo; Result := Integer(HintShow(AHintInfo)); HintInfo := AHintInfo; end; {$ENDIF !CLR} CM_HITTEST: with TCMHitTest{$IFDEF CLR}.Create{$ENDIF}(Msg) do Result := Integer(HitTest(XPos, YPos)); CM_MOUSEENTER: MouseEnter({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_MOUSELEAVE: MouseLeave({$IFDEF CLR}nil{$ELSE}TControl(Msg.LParam){$ENDIF}); CM_VISIBLECHANGED: VisibleChanged; CM_ENABLEDCHANGED: EnabledChanged; CM_TEXTCHANGED: TextChanged; CM_FONTCHANGED: FontChanged; CM_COLORCHANGED: ColorChanged; {$IFNDEF CLR} CM_FOCUSCHANGED: FocusChanged(TWinControl(Msg.LParam)); {$ENDIF !CLR} CM_PARENTFONTCHANGED: ParentFontChanged; CM_PARENTCOLORCHANGED: ParentColorChanged; CM_PARENTSHOWHINTCHANGED: ParentShowHintChanged; else inherited WndProc(Msg); end; end; //============================================================================ procedure TJvExSplitter.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin SplitterMouseDownFix(Self); inherited MouseDown(Button, Shift, X, Y); end; // SplitterMouseDownFix fixes a bug in the VCL that causes the splitter to no // more work with the control in the left/top of it when the control has a size // of 0. This is actually a TWinControl.AlignControl bug. procedure SplitterMouseDownFix(Splitter: TSplitter); var Control: TControl; Pt: TPoint; R: TRect; I, Size: Integer; begin with Splitter do begin if Align in [alLeft, alTop] then begin Control := nil; Pt := Point(Left, Top); if Align = alLeft then Dec(Pt.X) else //if Align = alTop then Dec(Pt.Y); for I := 0 to Parent.ControlCount - 1 do begin Control := Parent.Controls[I]; R := Control.BoundsRect; if Align = alLeft then Size := R.Right - R.Left else //if Align = alTop then Size := R.Bottom - R.Top; if Control.Visible and Control.Enabled and (Size = 0) then begin if Align = alLeft then Dec(R.Left) else // Align = alTop then Dec(R.Top); if PtInRect(R, Pt) then Break; end; Control := nil; end; if Control = nil then begin // Check for the control that is zero-sized but after the splitter. // TWinControl.AlignControls does not work properly with alLeft/alTop. if Align = alLeft then Pt := Point(Left + Width - 1, Top) else // if Align = alTop then Pt := Point(Left, Top + Height - 1); for I := 0 to Parent.ControlCount - 1 do begin Control := Parent.Controls[I]; R := Control.BoundsRect; if Align = alLeft then Size := R.Right - R.Left else //if Align = alTop then Size := R.Bottom - R.Top; if Control.Visible and Control.Enabled and (Size = 0) then begin if Align = alLeft then Dec(R.Left) else // Align = alTop then Dec(R.Top); if PtInRect(R, Pt) then Break; end; Control := nil; end; if Control <> nil then begin // realign left/top control if Align = alLeft then Control.Left := -1 else // if Align = alTop then Control.Top := -1; end; end; end; end; end; {$IFDEF UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); finalization UnregisterUnitVersion(HInstance); {$ENDIF UNITVERSIONING} end.