Delphi 外观无闪烁
Delphi Flicker Free with appearence
如果我创建一个带有绘画框和滚动条的简单应用程序,在绘画框中绘制一些矩形,并使滚动条变化刷新绘画框,我在拖动滚动条时得到无闪烁显示(在表单上设置了 DoubleBuffer):
procedure TMainForm.OnHorzChange(Sender: TObject);
begin
PaintBox.Refresh;
end;
procedure TMainForm.OnPaint(Sender: TObject);
var
x, y: integer;
begin
with PaintBox.Canvas do
begin
Pen.Color := clBlack;
Brush.Color := clGray;
for y := 0 to 9 do
for x := 0 to 9 do
Rectangle(x * 32, y * 32, x * 32 + 24, y * 32 + 24);
end;
end;
如果我然后将外观更改为 Carbon,闪烁 returns:
program test;
uses
Vcl.Forms,
main in 'main.pas' {MainForm},
Vcl.Themes,
Vcl.Styles;
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle('Carbon');
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
那么如何使用外观不闪烁呢?主 window 上的设置双缓冲区不会停止闪烁。
将您的 PaintBox
放在 TPanel
上并将 Panel.ParentBackground
设置为 False。在这种情况下,它不会闪烁。
如果我创建一个带有绘画框和滚动条的简单应用程序,在绘画框中绘制一些矩形,并使滚动条变化刷新绘画框,我在拖动滚动条时得到无闪烁显示(在表单上设置了 DoubleBuffer):
procedure TMainForm.OnHorzChange(Sender: TObject);
begin
PaintBox.Refresh;
end;
procedure TMainForm.OnPaint(Sender: TObject);
var
x, y: integer;
begin
with PaintBox.Canvas do
begin
Pen.Color := clBlack;
Brush.Color := clGray;
for y := 0 to 9 do
for x := 0 to 9 do
Rectangle(x * 32, y * 32, x * 32 + 24, y * 32 + 24);
end;
end;
如果我然后将外观更改为 Carbon,闪烁 returns:
program test;
uses
Vcl.Forms,
main in 'main.pas' {MainForm},
Vcl.Themes,
Vcl.Styles;
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
TStyleManager.TrySetStyle('Carbon');
Application.CreateForm(TMainForm, MainForm);
Application.Run;
end.
那么如何使用外观不闪烁呢?主 window 上的设置双缓冲区不会停止闪烁。
将您的 PaintBox
放在 TPanel
上并将 Panel.ParentBackground
设置为 False。在这种情况下,它不会闪烁。