delphi – 如何在TPanel上绘制

delphi – 如何在TPanel上绘制,第1张

概述我需要在TPanel上绘制,理想情况下是直接的,所以我没有其他组件可以阻止鼠标事件陷阱(我想在它上面画一点“尺寸 – 抓握”).我该怎么做呢? 要真正做到对,你应该写一个后代类.重写Paint方法以绘制大小调整手柄,并覆盖MouseDown,MouseUp和MouseMove方法以向控件添加调整大小功能. 我认为这比尝试在应用程序代码中绘制TPanel更好的解决方案有以下几个原因: > Canva 我需要在TPanel上绘制,理想情况下是直接的,所以我没有其他组件可以阻止鼠标事件陷阱(我想在它上面画一点“尺寸 – 抓握”).我该怎么做呢?解决方法 要真正做到对,你应该写一个后代类.重写Paint方法以绘制大小调整手柄,并覆盖MouseDown,MouseUp和MouseMove方法以向控件添加调整大小功能.

我认为这比尝试在应用程序代码中绘制TPanel更好的解决方案有以下几个原因:

> Canvas属性在TPanel中受到保护,因此您无法从类外部访问它.你可以用类型转换来解决这个问题,但这是作弊行为.
>“可恢复性”听起来更像是面板的一个功能,而不是应用程序的一个功能,因此将其放在面板控件的代码中,而不是应用程序的主代码中.

这是让你入门的东西:

type  TSizablePanel = class(TPanel)  private    fdragOrigin: TPoint;    FSizeRect: TRect;  protected    procedure Paint; overrIDe;    procedure MouseDown(button: TMousebutton; Shift: TShiftState;      X,Y: Integer); overrIDe;    procedure MouseMove(Shift: TShiftState; X,Y: Integer); overrIDe;    procedure MouseUp(button: TMousebutton; Shift: TShiftState;      X,Y: Integer); overrIDe;  end;procedure TSizeablePanel.Paint;begin  inherited;  // Draw a sizing grip on the Canvas property  // There's a size-grip glyph in the Marlett Font,// so try the Canvas.textout method in combination  // with the Canvas.Font property.end;procedure TSizeablePanel.MouseDown;begin  if (button = mbleft) and (Shift = [])       and PtInRect(FSizeRect,Point(X,Y)) then begin    fdragOrigin := Point(X,Y);    // Need to capture mouse events even if the mouse    // leaves the control. See also: ReleaseCapture.    SetCapture(Handle);  end else inherited;end;
总结

以上是内存溢出为你收集整理的delphi – 如何在TPanel上绘制全部内容,希望文章能够帮你解决delphi – 如何在TPanel上绘制所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230612.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存