Lazarus自定义组件 - 如何将鼠标X,Y标记为标签

时间:2014-05-28 10:22:12

标签: freepascal lazarus

我正在编写最终将成为菜单面板一部分的自定义组件。我目前正在尝试使用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;       

1 个答案:

答案 0 :(得分:1)

LOL我是一个主要的NOOB,它没有更新设计师的标签,但是当我运行该程序时,它运作得很好。

我可能不得不考虑退还我前几天买的1337 T恤!