我正在编写最终将成为菜单面板一部分的自定义组件。我目前正在尝试使用TCustomPanel.MouseMove将指针的X,Y坐标捕获为TPoint,这样我就可以将它与TRect值进行比较。
目前我正在尝试将X,Y坐标写入标签以检查它是否正常工作,但我无法让它为变量编写动态内容。标签是在“画布”中的正确位置创建的,但它不包含我尝试传递的字符串,并且没有任何更新。
我有一个自定义绘图程序,我是否需要在那里更新标签?
我哪里错了?
接口:
uses
SysUtils, Classes, StdCtrls, Controls, ExtCtrls, Graphics, Forms, Dialogs;
type
TOC_MenuPanel = class(TCustomPanel)
TOC_MenuStrings : TStringList;
private
{ Private declarations }
fLinesText : TStrings;
MenuRects : Array of TRect;
MenuFontHeight : integer;
MousePosX, MousePosY : TPoint;
lbl : TLabel;
procedure SetLinesText(const Value : TStrings);
procedure SetFontHeight(const aNum : integer);
protected
{ Protected declarations }
procedure Paint; override;
procedure MouseMove(Shift:TShiftState; X,Y:Integer); override;
public
{ Public declarations }
procedure SetInitialBounds(aLeft, aTop, aWidth, aHeight : integer); override;
constructor create(AOwner: TComponent); override;
// destructor Destroy; override;
published
{ Published declarations }
property Items : TStrings read fLinesText write SetLinesText;
property FontSize : integer read MenuFontHeight write SetFontHeight;
实现:
constructor TOC_MenuPanel.create(AOwner: TComponent);
begin
inherited Create(AOwner);
fLinesText := TStringList.Create;
lbl := TLabel.Create(AOwner);
lbl.Parent := Self;
lbl.Top := 100;
lbl.Left := Width div 2 - (lbl.Width div 2);
end;
// User actions
procedure TOC_MenuPanel.MouseMove(Shift:TShiftState; X,Y:Integer);
begin
if (X >= 0) and (Y >= 0) and (X < Width) and (Y < Height) then
begin
lbl.Caption := 'X:' + IntToStr(X) + ',' + 'Y:' + IntToStr(Y);
end
else
begin
// Do "move out" stuff over here.
end;
inherited;
end;
答案 0 :(得分:1)
LOL我是一个主要的NOOB,它没有更新设计师的标签,但是当我运行该程序时,它运作得很好。
我可能不得不考虑退还我前几天买的1337 T恤!