{----------------------------------------------------------------------------- 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: JvExStdCtrls.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) 2003 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: JvExStdCtrls.pas 10883 2006-08-13 13:20:07Z ahuser $ unit JvExStdCtrls; {$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, StdCtrls, {$IFDEF UNITVERSIONING} JclUnitVersioning, {$ENDIF UNITVERSIONING} JvTypes, JvThemes, JVCLVer, JvExControls; type TJvExCustomGroupBox = class(TCustomGroupBox, 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; {$DEFINE HASAUTOSIZE} TJvExCustomLabel = class(TCustomLabel, 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; TJvExLabel = class(TLabel, 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; {$UNDEF HASAUTOSIZE} TJvExCustomEdit = class(TCustomEdit, 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; private FClipboardCommands: TJvClipboardCommands; protected procedure SetClipboardCommands(const Value: TJvClipboardCommands); virtual; property ClipboardCommands: TJvClipboardCommands read FClipboardCommands write SetClipboardCommands default [caCopy..caUndo]; end; TJvExCustomMemo = class(TCustomMemo, 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; private FClipboardCommands: TJvClipboardCommands; protected procedure SetClipboardCommands(const Value: TJvClipboardCommands); virtual; property ClipboardCommands: TJvClipboardCommands read FClipboardCommands write SetClipboardCommands default [caCopy..caUndo]; end; {$IFDEF COMPILER6_UP} TJvExCustomCombo = class(TCustomCombo, 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} TJvExCustomComboBox = class(TCustomComboBox, 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; TJvExButtonControl = class(TButtonControl, 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; TJvExButton = class(TButton, 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; TJvExCustomCheckBox = class(TCustomCheckBox, 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; TJvExRadioButton = class(TRadioButton, 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; TJvExCustomListBox = class(TCustomListBox, 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; TJvExScrollBar = class(TScrollBar, 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; TJvExGroupBox = class(TGroupBox, 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; TJvExCheckBox = class(TCheckBox, 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; TJvExCustomStaticText = class(TCustomStaticText, 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; TJvExStaticText = class(TStaticText, 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 UNITVERSIONING} const UnitVersioning: TUnitVersionInfo = ( RCSfile: '$URL: https://jvcl.svn.sourceforge.net/svnroot/jvcl/tags/JVCL3_32/run/JvExStdCtrls.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 TJvExCustomGroupBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomGroupBox.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 TJvExCustomGroupBox.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 TJvExCustomGroupBox.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 TJvExCustomGroupBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomGroupBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomGroupBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomGroupBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomGroupBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomGroupBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomGroupBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomGroupBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomGroupBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomGroupBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomGroupBox.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 TJvExCustomGroupBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomGroupBox.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 TJvExCustomGroupBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomGroupBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomGroupBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomGroupBox.BoundsChanged; begin end; procedure TJvExCustomGroupBox.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomGroupBox.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomGroupBox.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 TJvExCustomGroupBox.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 TJvExCustomGroupBox.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 TJvExCustomGroupBox.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomGroupBox.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomGroupBox.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomGroupBox.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomGroupBox.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomGroupBox.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomGroupBox.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; //============================================================================ {$DEFINE HASAUTOSIZE} constructor TJvExCustomLabel.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomLabel.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 TJvExCustomLabel.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 TJvExCustomLabel.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 TJvExCustomLabel.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomLabel.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomLabel.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomLabel.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomLabel.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomLabel.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomLabel.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomLabel.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomLabel.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomLabel.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomLabel.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 TJvExCustomLabel.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomLabel.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 TJvExCustomLabel.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomLabel.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomLabel.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomLabel.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 TJvExLabel.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExLabel.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 TJvExLabel.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 TJvExLabel.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 TJvExLabel.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExLabel.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExLabel.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExLabel.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExLabel.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExLabel.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExLabel.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExLabel.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExLabel.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExLabel.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExLabel.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 TJvExLabel.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExLabel.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 TJvExLabel.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExLabel.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExLabel.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExLabel.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; //============================================================================ {$UNDEF HASAUTOSIZE} constructor TJvExCustomEdit.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; FClipboardCommands := [caCopy..caUndo]; end; function TJvExCustomEdit.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 TJvExCustomEdit.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 TJvExCustomEdit.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 TJvExCustomEdit.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomEdit.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomEdit.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomEdit.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomEdit.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomEdit.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomEdit.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomEdit.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomEdit.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomEdit.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomEdit.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 TJvExCustomEdit.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomEdit.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 TJvExCustomEdit.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomEdit.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomEdit.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomEdit.BoundsChanged; begin end; procedure TJvExCustomEdit.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomEdit.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomEdit.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 TJvExCustomEdit.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 TJvExCustomEdit.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 TJvExCustomEdit.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomEdit.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomEdit.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomEdit.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomEdit.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomEdit.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomEdit.SetClipboardCommands(const Value: TJvClipboardCommands); begin FClipboardCommands := Value; end; procedure TJvExCustomEdit.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; WM_CLEAR: if caClear in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; WM_UNDO, EM_UNDO: if caUndo in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; WM_COPY: if caCopy in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; WM_CUT: if caCut in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; WM_PASTE: if caPaste in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ constructor TJvExCustomMemo.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; FClipboardCommands := [caCopy..caUndo]; end; function TJvExCustomMemo.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 TJvExCustomMemo.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 TJvExCustomMemo.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 TJvExCustomMemo.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomMemo.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomMemo.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomMemo.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomMemo.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomMemo.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomMemo.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomMemo.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomMemo.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomMemo.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomMemo.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 TJvExCustomMemo.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomMemo.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 TJvExCustomMemo.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomMemo.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomMemo.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomMemo.BoundsChanged; begin end; procedure TJvExCustomMemo.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomMemo.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomMemo.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 TJvExCustomMemo.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 TJvExCustomMemo.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 TJvExCustomMemo.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomMemo.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomMemo.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomMemo.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomMemo.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomMemo.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomMemo.SetClipboardCommands(const Value: TJvClipboardCommands); begin FClipboardCommands := Value; end; procedure TJvExCustomMemo.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; WM_CLEAR: if caClear in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; WM_UNDO, EM_UNDO: if caUndo in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; WM_COPY: if caCopy in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; WM_CUT: if caCut in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; WM_PASTE: if caPaste in ClipboardCommands then inherited WndProc(Msg) else Msg.Result := 1; else inherited WndProc(Msg); end; if DotNetHighlighting then HandleDotNetHighlighting(Self, Msg, MouseOver, Color); end; end; //============================================================================ {$IFDEF COMPILER6_UP} constructor TJvExCustomCombo.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomCombo.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 TJvExCustomCombo.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 TJvExCustomCombo.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 TJvExCustomCombo.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomCombo.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomCombo.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomCombo.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomCombo.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomCombo.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomCombo.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomCombo.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomCombo.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomCombo.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomCombo.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 TJvExCustomCombo.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomCombo.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 TJvExCustomCombo.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomCombo.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomCombo.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomCombo.BoundsChanged; begin end; procedure TJvExCustomCombo.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomCombo.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomCombo.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 TJvExCustomCombo.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 TJvExCustomCombo.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 TJvExCustomCombo.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomCombo.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomCombo.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomCombo.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomCombo.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomCombo.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomCombo.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 TJvExCustomComboBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomComboBox.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 TJvExCustomComboBox.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 TJvExCustomComboBox.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 TJvExCustomComboBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomComboBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomComboBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomComboBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomComboBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomComboBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomComboBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomComboBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomComboBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomComboBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomComboBox.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 TJvExCustomComboBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomComboBox.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 TJvExCustomComboBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomComboBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomComboBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomComboBox.BoundsChanged; begin end; procedure TJvExCustomComboBox.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomComboBox.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomComboBox.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 TJvExCustomComboBox.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 TJvExCustomComboBox.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 TJvExCustomComboBox.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomComboBox.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomComboBox.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomComboBox.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomComboBox.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomComboBox.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomComboBox.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 TJvExButtonControl.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExButtonControl.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 TJvExButtonControl.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 TJvExButtonControl.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 TJvExButtonControl.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExButtonControl.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExButtonControl.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExButtonControl.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExButtonControl.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExButtonControl.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExButtonControl.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExButtonControl.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExButtonControl.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExButtonControl.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExButtonControl.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 TJvExButtonControl.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExButtonControl.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 TJvExButtonControl.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExButtonControl.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExButtonControl.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExButtonControl.BoundsChanged; begin end; procedure TJvExButtonControl.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExButtonControl.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExButtonControl.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 TJvExButtonControl.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 TJvExButtonControl.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 TJvExButtonControl.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExButtonControl.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExButtonControl.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExButtonControl.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExButtonControl.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExButtonControl.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExButtonControl.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 TJvExButton.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExButton.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 TJvExButton.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 TJvExButton.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 TJvExButton.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExButton.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExButton.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExButton.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExButton.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExButton.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExButton.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExButton.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExButton.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExButton.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExButton.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 TJvExButton.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExButton.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 TJvExButton.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExButton.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExButton.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExButton.BoundsChanged; begin end; procedure TJvExButton.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExButton.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExButton.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 TJvExButton.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 TJvExButton.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 TJvExButton.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExButton.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExButton.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExButton.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExButton.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExButton.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExButton.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 TJvExCustomCheckBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomCheckBox.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 TJvExCustomCheckBox.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 TJvExCustomCheckBox.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 TJvExCustomCheckBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomCheckBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomCheckBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomCheckBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomCheckBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomCheckBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomCheckBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomCheckBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomCheckBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomCheckBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomCheckBox.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 TJvExCustomCheckBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomCheckBox.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 TJvExCustomCheckBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomCheckBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomCheckBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomCheckBox.BoundsChanged; begin end; procedure TJvExCustomCheckBox.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomCheckBox.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomCheckBox.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 TJvExCustomCheckBox.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 TJvExCustomCheckBox.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 TJvExCustomCheckBox.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomCheckBox.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomCheckBox.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomCheckBox.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomCheckBox.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomCheckBox.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomCheckBox.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 TJvExRadioButton.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExRadioButton.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 TJvExRadioButton.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 TJvExRadioButton.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 TJvExRadioButton.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExRadioButton.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExRadioButton.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExRadioButton.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExRadioButton.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExRadioButton.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExRadioButton.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExRadioButton.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExRadioButton.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExRadioButton.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExRadioButton.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 TJvExRadioButton.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExRadioButton.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 TJvExRadioButton.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExRadioButton.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExRadioButton.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExRadioButton.BoundsChanged; begin end; procedure TJvExRadioButton.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExRadioButton.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExRadioButton.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 TJvExRadioButton.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 TJvExRadioButton.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 TJvExRadioButton.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExRadioButton.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExRadioButton.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExRadioButton.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExRadioButton.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExRadioButton.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExRadioButton.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 TJvExCustomListBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomListBox.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 TJvExCustomListBox.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 TJvExCustomListBox.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 TJvExCustomListBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomListBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomListBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomListBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomListBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomListBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomListBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomListBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomListBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomListBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomListBox.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 TJvExCustomListBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomListBox.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 TJvExCustomListBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomListBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomListBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomListBox.BoundsChanged; begin end; procedure TJvExCustomListBox.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomListBox.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomListBox.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 TJvExCustomListBox.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 TJvExCustomListBox.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 TJvExCustomListBox.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomListBox.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomListBox.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomListBox.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomListBox.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomListBox.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomListBox.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 TJvExScrollBar.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExScrollBar.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 TJvExScrollBar.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 TJvExScrollBar.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 TJvExScrollBar.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExScrollBar.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExScrollBar.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExScrollBar.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExScrollBar.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExScrollBar.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExScrollBar.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExScrollBar.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExScrollBar.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExScrollBar.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExScrollBar.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 TJvExScrollBar.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExScrollBar.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 TJvExScrollBar.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExScrollBar.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExScrollBar.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExScrollBar.BoundsChanged; begin end; procedure TJvExScrollBar.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExScrollBar.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExScrollBar.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 TJvExScrollBar.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 TJvExScrollBar.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 TJvExScrollBar.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExScrollBar.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExScrollBar.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExScrollBar.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExScrollBar.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExScrollBar.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExScrollBar.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 TJvExGroupBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExGroupBox.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 TJvExGroupBox.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 TJvExGroupBox.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 TJvExGroupBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExGroupBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExGroupBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExGroupBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExGroupBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExGroupBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExGroupBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExGroupBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExGroupBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExGroupBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExGroupBox.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 TJvExGroupBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExGroupBox.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 TJvExGroupBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExGroupBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExGroupBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExGroupBox.BoundsChanged; begin end; procedure TJvExGroupBox.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExGroupBox.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExGroupBox.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 TJvExGroupBox.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 TJvExGroupBox.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 TJvExGroupBox.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExGroupBox.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExGroupBox.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExGroupBox.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExGroupBox.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExGroupBox.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExGroupBox.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 TJvExCheckBox.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCheckBox.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 TJvExCheckBox.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 TJvExCheckBox.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 TJvExCheckBox.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCheckBox.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCheckBox.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCheckBox.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCheckBox.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCheckBox.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCheckBox.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCheckBox.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCheckBox.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCheckBox.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCheckBox.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 TJvExCheckBox.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCheckBox.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 TJvExCheckBox.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCheckBox.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCheckBox.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCheckBox.BoundsChanged; begin end; procedure TJvExCheckBox.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCheckBox.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCheckBox.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 TJvExCheckBox.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 TJvExCheckBox.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 TJvExCheckBox.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCheckBox.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCheckBox.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCheckBox.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCheckBox.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCheckBox.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCheckBox.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 TJvExCustomStaticText.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExCustomStaticText.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 TJvExCustomStaticText.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 TJvExCustomStaticText.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 TJvExCustomStaticText.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExCustomStaticText.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExCustomStaticText.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExCustomStaticText.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExCustomStaticText.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExCustomStaticText.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExCustomStaticText.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExCustomStaticText.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExCustomStaticText.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExCustomStaticText.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExCustomStaticText.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 TJvExCustomStaticText.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExCustomStaticText.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 TJvExCustomStaticText.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExCustomStaticText.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExCustomStaticText.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExCustomStaticText.BoundsChanged; begin end; procedure TJvExCustomStaticText.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExCustomStaticText.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExCustomStaticText.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 TJvExCustomStaticText.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 TJvExCustomStaticText.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 TJvExCustomStaticText.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExCustomStaticText.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExCustomStaticText.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExCustomStaticText.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExCustomStaticText.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExCustomStaticText.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExCustomStaticText.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 TJvExStaticText.Create(AOwner: TComponent); begin inherited Create(AOwner); FHintColor := clDefault; end; function TJvExStaticText.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 TJvExStaticText.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 TJvExStaticText.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 TJvExStaticText.VisibleChanged; begin BaseWndProc(CM_VISIBLECHANGED); end; procedure TJvExStaticText.EnabledChanged; begin BaseWndProc(CM_ENABLEDCHANGED); end; procedure TJvExStaticText.TextChanged; begin BaseWndProc(CM_TEXTCHANGED); end; procedure TJvExStaticText.FontChanged; begin BaseWndProc(CM_FONTCHANGED); end; procedure TJvExStaticText.ColorChanged; begin BaseWndProc(CM_COLORCHANGED); end; procedure TJvExStaticText.ParentFontChanged; begin BaseWndProc(CM_PARENTFONTCHANGED); end; procedure TJvExStaticText.ParentColorChanged; begin BaseWndProc(CM_PARENTCOLORCHANGED); if Assigned(OnParentColorChange) then OnParentColorChange(Self); end; procedure TJvExStaticText.ParentShowHintChanged; begin BaseWndProc(CM_PARENTSHOWHINTCHANGED); end; function TJvExStaticText.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := BaseWndProc(CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExStaticText.HitTest(X, Y: Integer): Boolean; begin Result := BaseWndProc(CM_HITTEST, 0, SmallPointToLong(PointToSmallPoint(Point(X, Y)))) <> 0; end; function TJvExStaticText.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 TJvExStaticText.MouseEnter(AControl: TControl); begin FMouseOver := True; {$IFDEF VCL} if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); {$ENDIF VCL} BaseWndProc(CM_MOUSEENTER, 0, AControl); end; procedure TJvExStaticText.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 TJvExStaticText.FocusChanged(AControl: TWinControl); begin BaseWndProc(CM_FOCUSCHANGED, 0, AControl); end; {$ENDIF !CLR} {$IFDEF COMPILER5} {$IFNDEF HASAUTOSIZE} procedure TJvExStaticText.CMSetAutoSize(var Msg: TMessage); begin SetAutoSize(Msg.WParam <> 0); end; procedure TJvExStaticText.SetAutoSize(Value: Boolean); begin TOpenControl_SetAutoSize(Self, Value); end; {$ENDIF !HASAUTOSIZE} {$ENDIF COMPILER5} procedure TJvExStaticText.BoundsChanged; begin end; procedure TJvExStaticText.CursorChanged; begin BaseWndProc(CM_CURSORCHANGED); end; procedure TJvExStaticText.ShowingChanged; begin BaseWndProc(CM_SHOWINGCHANGED); end; procedure TJvExStaticText.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 TJvExStaticText.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 TJvExStaticText.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 TJvExStaticText.GetDlgCode(var Code: TDlgCodes); begin end; procedure TJvExStaticText.FocusSet(PrevWnd: THandle); begin BaseWndProc(WM_SETFOCUS, Integer(PrevWnd), 0); end; procedure TJvExStaticText.FocusKilled(NextWnd: THandle); begin BaseWndProc(WM_KILLFOCUS, Integer(NextWnd), 0); end; function TJvExStaticText.DoEraseBackground(Canvas: TCanvas; Param: Integer): Boolean; begin Result := BaseWndProc(WM_ERASEBKGND, Canvas.Handle, Param) <> 0; end; {$IFDEF JVCLThemesEnabledD56} function TJvExStaticText.GetParentBackground: Boolean; begin Result := JvThemes.GetParentBackground(Self); end; procedure TJvExStaticText.SetParentBackground(Value: Boolean); begin JvThemes.SetParentBackground(Self, Value); end; {$ENDIF JVCLThemesEnabledD56} procedure TJvExStaticText.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 UNITVERSIONING} initialization RegisterUnitVersion(HInstance, UnitVersioning); finalization UnregisterUnitVersion(HInstance); {$ENDIF UNITVERSIONING} end.