动画拖放自定义 Delphi 组件
Posted
技术标签:
【中文标题】动画拖放自定义 Delphi 组件【英文标题】:Animated drag and drop custom Delphi component 【发布时间】:2015-12-06 22:26:56 【问题描述】:当您在 Windows 资源管理器中拖动列标题以对其重新排序(或在 Chrome 中拖动选项卡)时,您会看到一个漂亮的动画,其中其他标题按钮会四处移动以腾出空间。
我正在尝试在我正在编写的标题控件中复制它。标题按钮不是单独的控件,因此我有一个控件,我在其上进行了测试以确定正在单击哪个按钮。除了一些会引入大量闪烁的策略之外,我不确定如何制作这些动画。
【问题讨论】:
TChromeTabs
会做这种动画。
【参考方案1】:
尝试使用自己的绘图缓冲区(如果 DoubleBuffered 不够好):
-
创建缓冲区(TCanvas 或 HDC)
将控件绘制到此缓冲区(OnAnimationTimer 和/或 OnChange)
TMyControl.Paint
:将缓冲区复制到目标画布
[您不仅可以将此缓冲区用于动画]
注意 GDI 对象的数量
类似这样的:
type
TMyControl = class(TWinControl)
private
FAnimationBuffer: TBitmap;
FTimer: Cardinal;
procedure OnTimer(var Message: TMessage); message WM_TIMER;
protected
procedure Paint; override;
procedure Animate(columnA, columnB: Integer; frames: Byte);
end;
procedure TMyControl.OnTimer(var Message: TMessage);
begin
//todo : paint control state to FAnimationBuffer
if Visible then
Invalidate;
end;
procedure TMyControl.Paint;
begin
Canvas.Draw(0,0,FAnimationBuffer);
end;
procedure TMyControl.Animate;
begin
FTimer := SetTimer(Handle, 1, 100, nil);
end;
【讨论】:
以上是关于动画拖放自定义 Delphi 组件的主要内容,如果未能解决你的问题,请参考以下文章