Если я создаю простое приложение с красящим полем и полосой прокрутки, нарисуйте в прямоугольнике прямоугольники и сделайте изменение полосы прокрутки, обновите окно с краской, я получу мерцающий дисплей, когда я перетащите полосу прокрутки (с DoubleBuffer устанавливается на форме):Delphi Flicker Free с появлением
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.
Так как я могу использовать внешний вид и не получить мерцает? Установка двойного буфера в главном окне не останавливает мерцание.
Возможно, вы не должны использовать двойную буферизацию. Вы должны использовать Invalidate, а не Refresh. И стили VCL мерцают. Прекратите использование стилей VCL, и все будет хорошо. –
Решение похоже на использование FMX, так как у него есть графика без мерцания – imekon
Из сковороды и в огонь –