关于vcl样式:Delphi闪烁无外观

Delphi Flicker Free with appearence

如果我创建一个带有绘制框和滚动条的简单应用程序,在绘制框中绘制一些矩形,并更改滚动条以刷新绘制框,则拖动滚动条(在表单上设置DoubleBuffer):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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,则闪烁返回:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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.

那么我该如何使用外观而不出现闪烁?在主窗口上设置的双缓冲区不会停止闪烁。


PaintBox放在TPanel上,并将Panel.ParentBackground设置为False。在这种情况下,它对我而言不会闪烁。