Delphi 外观无闪烁

niwlg2el  于 2022-11-04  发布在  其他
关注(0)|答案(2)|浏览(158)

如果我创建了一个简单的应用程序,其中包含一个绘画框和一个滚动条,在绘画框中绘制一些矩形,并使滚动条更改刷新绘画框,那么当我拖动滚动条时(在窗体上设置了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.

那么我怎样才能使用外观而不闪烁呢?主窗口上的双缓冲区设置并不能阻止闪烁。

jjhzyzn0

jjhzyzn01#

把你的PaintBox放在TPanel上,并把Panel.ParentBackground设为False。在这种情况下,它不会闪烁。

hjqgdpho

hjqgdpho2#

另一个对我有效的解决方案是从TPanelTScrollBox组件的StyleElements属性中删除seClient标志。

相关问题