From: Andreas H. <ah...@us...> - 2004-01-05 17:38:28
|
Update of /cvsroot/jvcl/dev/JVCL3/run In directory sc8-pr-cvs1:/tmp/cvs-serv31870/run Added Files: vExButtons.pas Log Message: New MouseEnter/Leave code and new VCL wrapper units --- NEW FILE: vExButtons.pas --- {----------------------------------------------------------------------------- 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: JvExButtons.pas, released on 2004-01-04 The Initial Developer of the Original Code is Andreas Hausladen [And...@gm...] Portions created by Andreas Hausladen are Copyright (C) 2004 Andreas Hausladen. All Rights Reserved. Contributor(s): - Last Modified: 2004-01-04 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: -----------------------------------------------------------------------------} {$I jvcl.inc} unit JvExButtons; interface uses {$IFDEF VCL} Windows, Messages, Controls, Forms, Buttons, StdCtrls, {$ENDIF VCL} {$IFDEF VisualCLX} QControls, QForms, QButtons, QStdCtrls, {$ENDIF VisualCLX} Classes, SysUtils, JvExControls; type IJvSpeedButtonEvents = interface(IJvControlEvents) ['{3EEBF34C-1B91-49C4-81DF-7DDF2C247698}'] procedure ButtonPressed(Sender: TSpeedButton; GroupIndex: Integer); end; // // -------------------------------------- TJvExSpeedButton = class(TSpeedButton, IJvSpeedButtonEvents, IJvControlEvents) {$IFDEF VCL} protected // TControl procedure VisibleChanged; dynamic; procedure EnabledChanged; dynamic; procedure TextChanged; dynamic; procedure FontChanged; dynamic; procedure ColorChanged; dynamic; procedure ParentFontChanged; dynamic; procedure ParentColorChanged; dynamic; procedure ParentShowHintChanged; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; virtual; function HintShow(var HintInfo : THintInfo): Boolean; dynamic; function HitTest(X, Y: Integer): Boolean; dynamic; procedure MouseEnter(Control: TControl); dynamic; procedure MouseLeave(Control: TControl); dynamic; protected // TJvExSpeedButton procedure ButtonPressed(Sender: TSpeedButton; GroupIndex: Integer); dynamic; public procedure Dispatch(var Message); override; private FOnMouseEnter, FOnMouseLeave: TNotifyEvent; protected property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} {$IFDEF VisualCLX} {$IF not declared(PatchedVCLX)} private FOnMouseEnter, FOnMouseLeave: TNotifyEvent; protected procedure MouseEnter(Control: TControl); override; procedure MouseLeave(Control: TControl); override; property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$IFEND} {$ENDIF} end; // // -------------------------------------- TJvExBitBtn = class(TBitBtn, IJvWinControlEvents, IJvControlEvents) {$IFDEF VCL} protected // TControl procedure VisibleChanged; dynamic; procedure EnabledChanged; dynamic; procedure TextChanged; dynamic; procedure FontChanged; dynamic; procedure ColorChanged; dynamic; procedure ParentFontChanged; dynamic; procedure ParentColorChanged; dynamic; procedure ParentShowHintChanged; dynamic; function WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; virtual; function HintShow(var HintInfo : THintInfo): Boolean; dynamic; function HitTest(X, Y: Integer): Boolean; dynamic; procedure MouseEnter(Control: TControl); dynamic; procedure MouseLeave(Control: TControl); dynamic; protected // TWinControl procedure CursorChanged; dynamic; procedure ShowingChanged; dynamic; procedure ShowHintChanged; dynamic; procedure ControlsListChanging(Control: TControl; Inserting: Boolean); dynamic; procedure ControlsListChanged(Control: TControl; Inserting: Boolean); dynamic; public procedure Dispatch(var Message); override; private FOnMouseEnter, FOnMouseLeave: TNotifyEvent; protected property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$ENDIF VCL} {$IFDEF VisualCLX} {$IF not declared(PatchedVCLX)} private FOnMouseEnter, FOnMouseLeave: TNotifyEvent; protected procedure MouseEnter(Control: TControl); override; procedure MouseLeave(Control: TControl); override; property OnMouseEnter: TNotifyEvent read FOnMouseEnter write FOnMouseEnter; property OnMouseLeave: TNotifyEvent read FOnMouseLeave write FOnMouseLeave; {$IFEND} {$ENDIF} end; implementation // // ----------------------------------------------------------------------------- {$IFDEF VCL} procedure TJvExSpeedButton.VisibleChanged; begin InheritMsg(Self, CM_VISIBLECHANGED); end; procedure TJvExSpeedButton.EnabledChanged; begin InheritMsg(Self, CM_ENABLEDCHANGED); end; procedure TJvExSpeedButton.TextChanged; begin InheritMsg(Self, CM_TEXTCHANGED); end; procedure TJvExSpeedButton.FontChanged; begin InheritMsg(Self, CM_FONTCHANGED); end; procedure TJvExSpeedButton.ColorChanged; begin InheritMsg(Self, CM_COLORCHANGED); end; procedure TJvExSpeedButton.ParentColorChanged; begin InheritMsg(Self, CM_PARENTCOLORCHANGED); end; procedure TJvExSpeedButton.ParentFontChanged; begin InheritMsg(Self, CM_PARENTFONTCHANGED); end; procedure TJvExSpeedButton.ParentShowHintChanged; begin InheritMsg(Self, CM_PARENTSHOWHINTCHANGED); end; function TJvExSpeedButton.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := InheritMsg(Self, CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExSpeedButton.HintShow(var HintInfo: THintInfo): Boolean; begin Result := InheritMsg(Self, CM_HINTSHOW, 0, Integer(@HintInfo)) <> 0; end; function TJvExSpeedButton.HitTest(X, Y: Integer): Boolean; begin Result := InheritMsg(Self, CM_HITTEST, 0, Integer(PointToSmallPoint(Point(X, Y)))) <> 0; end; procedure TJvExSpeedButton.MouseEnter(Control: TControl); begin InheritMsg(Self, CM_MOUSEENTER, 0, Integer(Control)); if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); end; procedure TJvExSpeedButton.MouseLeave(Control: TControl); begin InheritMsg(Self, CM_MOUSELEAVE, 0, Integer(Control)); if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); end; {$ENDIF VCL} {$IFDEF VisualCLX} {$IF not declared(PatchedVCLX)} procedure TJvExSpeedButton.MouseEnter(Control: TControl); begin inherited MouseEnter(Control); if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); end; procedure TJvExSpeedButton.MouseLeave(Control: TControl); begin inherited MouseLeave(Control); if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); end; {$IFEND} {$ENDIF VisualCLX} {$IFDEF VCL} procedure TJvExSpeedButton.ButtonPressed(Sender: TSpeedButton; GroupIndex: Integer); begin InheritMsg(Self, CM_BUTTONPRESSED, GroupIndex, Integer(Sender)); end; procedure TJvExSpeedButton.Dispatch(var Message); begin if not DispatchMsg(Self, Message) then case TMessage(Message).Msg of CM_BUTTONPRESSED: with TMessage(Message) do ButtonPressed(TSpeedButton(LParam), WParam); else inherited Dispatch(Message); end; end; {$ENDIF VCL} // // ----------------------------------------------------------------------------- {$IFDEF VCL} procedure TJvExBitBtn.VisibleChanged; begin InheritMsg(Self, CM_VISIBLECHANGED); end; procedure TJvExBitBtn.EnabledChanged; begin InheritMsg(Self, CM_ENABLEDCHANGED); end; procedure TJvExBitBtn.TextChanged; begin InheritMsg(Self, CM_TEXTCHANGED); end; procedure TJvExBitBtn.FontChanged; begin InheritMsg(Self, CM_FONTCHANGED); end; procedure TJvExBitBtn.ColorChanged; begin InheritMsg(Self, CM_COLORCHANGED); end; procedure TJvExBitBtn.ParentColorChanged; begin InheritMsg(Self, CM_PARENTCOLORCHANGED); end; procedure TJvExBitBtn.ParentFontChanged; begin InheritMsg(Self, CM_PARENTFONTCHANGED); end; procedure TJvExBitBtn.ParentShowHintChanged; begin InheritMsg(Self, CM_PARENTSHOWHINTCHANGED); end; function TJvExBitBtn.WantKey(Key: Integer; Shift: TShiftState; const KeyText: WideString): Boolean; begin Result := InheritMsg(Self, CM_DIALOGCHAR, Word(Key), ShiftStateToKeyData(Shift)) <> 0; end; function TJvExBitBtn.HintShow(var HintInfo: THintInfo): Boolean; begin Result := InheritMsg(Self, CM_HINTSHOW, 0, Integer(@HintInfo)) <> 0; end; function TJvExBitBtn.HitTest(X, Y: Integer): Boolean; begin Result := InheritMsg(Self, CM_HITTEST, 0, Integer(PointToSmallPoint(Point(X, Y)))) <> 0; end; procedure TJvExBitBtn.MouseEnter(Control: TControl); begin InheritMsg(Self, CM_MOUSEENTER, 0, Integer(Control)); if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); end; procedure TJvExBitBtn.MouseLeave(Control: TControl); begin InheritMsg(Self, CM_MOUSELEAVE, 0, Integer(Control)); if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); end; {$ENDIF VCL} {$IFDEF VisualCLX} {$IF not declared(PatchedVCLX)} procedure TJvExBitBtn.MouseEnter(Control: TControl); begin inherited MouseEnter(Control); if Assigned(FOnMouseEnter) then FOnMouseEnter(Self); end; procedure TJvExBitBtn.MouseLeave(Control: TControl); begin inherited MouseLeave(Control); if Assigned(FOnMouseLeave) then FOnMouseLeave(Self); end; {$IFEND} {$ENDIF VisualCLX} {$IFDEF VCL} procedure TJvExBitBtn.CursorChanged; begin InheritMsg(Self, CM_CURSORCHANGED); end; procedure TJvExBitBtn.ShowHintChanged; begin InheritMsg(Self, CM_SHOWHINTCHANGED); end; procedure TJvExBitBtn.ShowingChanged; begin InheritMsg(Self, CM_SHOWINGCHANGED); end; procedure TJvExBitBtn.ControlsListChanging(Control: TControl; Inserting: Boolean); begin if Inserting then InheritMsg(Self, CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else InheritMsg(Self, CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)) end; procedure TJvExBitBtn.ControlsListChanged(Control: TControl; Inserting: Boolean); begin if not Inserting then InheritMsg(Self, CM_CONTROLLISTCHANGE, Integer(Control), Integer(Inserting)) else InheritMsg(Self, CM_CONTROLCHANGE, Integer(Control), Integer(Inserting)) end; {$ENDIF VCL} {$IFDEF VCL} procedure TJvExBitBtn.Dispatch(var Message); begin if not DispatchMsg(Self, Message) then inherited Dispatch(Message); end; {$ENDIF VCL} end. |