一个使用可视化元件的实例
- 编辑:admin -一个使用可视化元件的实例
将FcapsLock、FonTop、Fupdating设置为False,我们对动静的一部门做了改变。
当建设一个新工具时,本文将介绍如安在不建设新类的环境下动态改变原生Delphi可视化控件的行为。
所以从本质上讲,首先说明一下,让控件认为我们按下的是大写字母键。
以便当Gap大概Onop属性被修改时我们可以改变LinkedLabel的位置, StdCtrls; type TLinkedLabel = class(TLabel) private // 相连控件. FAssociate: TControl; // 将 FAssociate 置为全大写模式 FCapsLock: Boolean; // 标签与关联控件之间的距离 FGap: Integer; // 标签在关联控件顶端时为true FOnTop: Boolean; // 生存 FAssociate.WindowProc的原始值 FOldWinProc: TWndMethod; // 用于防备无限更新循环 FUpdating: Boolean; protected procedure Adjust(MoveLabel: Boolean); procedure SetGap(Value: Integer); procedure SetOnTop(Value: Boolean); procedure SetAssociate(Value: TControl); procedure NewWinProc(var Message: TMessage); procedure Notification(AComponent: TComponent; Operation: TOperation); override; procedure WndProc(var Message: TMessage); override; public constructor Create(AOwner :TComponent); override; destructor Destroy; override; published property Associate: TControl read FAssociate write SetAssociate; property CapsLock: Boolean read FCapsLock write FCapsLock; property Gap: Integer read FGap write SetGap default 8; property OnTop: Boolean read FOnTop write SetOnTop; end; 此刻让我们来仔细看看这个控件中的差异要领,固然我们在OnTop中只提供了两种可能的选择,我们在把WindowProc指向NewWinProc之前把FoldWinProc设置为WindowProc的当前值, , 如你所见, procedure TLinkedLabel.SetGap(Value: Integer); begin if (FGap Value) then begin FGap := Value; Adjust(True); end; end; procedure TLinkedLabel.SetOnTop(Value: Boolean); begin if (FOnTop Value) then begin FOnTop := Value; Adjust(True); end; end;