如果我创建了一个简单的应用程序,其中包含一个绘画框和一个滚动条,在绘画框中绘制一些矩形,并使滚动条更改刷新绘画框,那么当我拖动滚动条时(在窗体上设置了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;
如果我将外观更改为碳色,则闪烁返回:
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.
那么我怎样才能使用外观而不闪烁呢?主窗口上的双缓冲区设置并不能阻止闪烁。
2条答案
按热度按时间jjhzyzn01#
把你的
PaintBox
放在TPanel
上,并把Panel.ParentBackground
设为False。在这种情况下,它不会闪烁。hjqgdpho2#
另一个对我有效的解决方案是从
TPanel
或TScrollBox
组件的StyleElements
属性中删除seClient
标志。