Питання # 488 …e властивість DoubleBuffered З повагою, Авдошин Олексій Віталійович… (Робота з

Спільнота програмістів Спілкування, допомога, обмін досвідом

Delphi.int.ru Expert

Інші розділи порталу

Перехід до питання:

Статистика за сьогодні:

Найкращі експерти

Питання # 488

Здрастуйте, шановні експерти! Як встановити у Timage властивість DoubleBuffered

З повагою, Авдошин Олексій Віталійович

Відповідь #1. Відповідає експерт:Dron

Вітаю. Властивість DoubleBuffered (Boolean) є тільки у форми. У решти компонентів його немає. Воно автоматично застосовується до всього, що ця форма належить. Тому слід написати так: Form1.DoubleBuffered:=True; І це досить лише один раз - зазвичай, під час запуску програми, тобто. на подію OnCreate() форми. Властивість справді прибирає мерехтіння при анімації. Нехай і не повністю, але результат дуже помітний. Бажаю удачі!

Відповідь #2. Відповідає експерт:min@y™

Властивість DoubleBuffered є не тільки у форми, а й у всіх класів, успадкованих від TWinControl. Якщо TImage лежить, наприклад, на TPanel, можна поставити Panel.DoubleBuffered:= True;

У додатку залишаю функцію встановлення властивості DoubleBuffered всіх віконних компонентів, що лежать на компоненті Parent, включаючи його самого.

  1. procedure SetDoubleBuffered(Parent: TWinControl; const DoubleBuffered: Boolean);
  2. var
  3. Control: TControl;
  4. Index: Integer;
  5. begin
  6. if not Assigned(Parent)
  7. then Exit;
  8. Parent.DoubleBuffered:=DoubleBuffered;
  9. для Index:=0 to Parent.ControlCount-1 do
  10. begin
  11. Control:=Parent.Controls[Index];
  12. ifControl is TWinControl
  13. end;
  14. end;

Міні-форум питання

Я не займаюся анімацією, я просто тягаю компонент за мишею. При русі компонента формою залишається слід від малюнка (у випадку Form1.DoubleBuffered:=True

Хм. Але взагалі без необхідності включати цю властивість не потрібно. Воно не для цих цілей. Перетягування компонентів повинно нормально здійснюватися. Може проблема у коді перетягування?