Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Блокировка и разблокировка перерисовки компонента

Delphi , Компоненты и Классы , Компоненты

Блокировка и разблокировка перерисовки компонента


procedure LockControl(c: TWinControl; bLock: Boolean); 
begin 
  if (c = nil) or (c.Handle = 0) then Exit; 
  if bLock then 
    SendMessage(c.Handle, WM_SETREDRAW, 0, 0) 
  else 
  begin 
    SendMessage(c.Handle, WM_SETREDRAW, 1, 0); 
    RedrawWindow(c.Handle, nil, 0, 
      RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN); 
  end; 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
  LockControl(DBGrid1, True); 
  try 
    // do convoluted things to the grid 
  finally 
    LockControl(DBGrid1, False); 
  end; 
end;


Некоторые коммпаненты имеют встроенный методы BeginUpdate и EndUpdate;

Это фрагмент кода на Delphi, демонстрирующий, как блокировать и разблокировать перерисовку компонента. Процедура LockControl отправляет сообщение WM_SETREDRAW в handle контрола, что либо блокирует, либо разблокирует перерисовку контрола.

Сюда входят следующие шаги:

  1. Процедура LockControl принимает два параметра: c, который является объектом TWinControl, и bLock, булевое значение, указывающее, нужно ли блокировать (True) или разблокировать (False) перерисовку.
  2. Если c равно nil или его handle равен 0, процедура немедленно выходит из себя.
  3. Если bLock равно True, процедура отправляет сообщение WM_SETREDRAW с параметром wParam, установленным в 0, что блокирует перерисовку контрола.
  4. Если bLock равно False, процедура сначала отправляет сообщение WM_SETREDRAW с параметром wParam, установленным в 1, что разблокирует перерисовку контрола, а затем вызывает RedrawWindow с различными флагами (RDW_ERASE, RDW_FRAME, RDW_INVALIDATE и RDW_ALLCHILDREN) для перерисовки контрола.

Процедура Button1Click является примером использования этого механизма блокировки в реальном сценарии. Когда кнопка нажата, она блокирует перерисовку компонента DBGrid1 с помощью LockControl, выполняет некоторые сложные операции над гридом, а затем разблокирует перерисовку с помощью LockControl снова.

Некоторые компоненты имеют встроенные методы, такие как BeginUpdate и EndUpdate. Эти методы можно использовать для блокировки и разблокировки перерисовки компонента более эффективным способом. Например:

procedure TForm1.Button1Click(Sender: TObject);
begin
  DBGrid1.BeginUpdate;
  try
    // Выполните сложные операции над гридом
  finally
    DBGrid1.EndUpdate;
  end;
end;

В этом случае BeginUpdate блокирует перерисовку грид, а EndUpdate разблокирует ее. Этот подход часто более эффективен, чем использовать LockControl, особенно для компонентов с большим количеством дочерних контролов или сложными макетами.

Блокировка и разблокировка перерисовки компонента - это механизм, позволяющий временно заблокировать перерисовку компонента для выполнения операций с ним, а затем автоматически разрешить перерисовку после завершения операций.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Компоненты ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:15:58/0.005695104598999/1