Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Вниз

Как запретить перерисовку отдельному компоненту?   Найти похожие ветки 

 
Gear   (2004-11-16 19:27) [0]

На форме имею ListBox у которого на методе OnDraw куча формул которые формируют вывод строчек с картинками и т. п. При изменении размеров формы перерисовка листбокса дико тормозит естественно из-за своей нагруженности. Как отключить перерисовку листбокса именно на период изменения размеров формы?


 
Defunct ©   (2004-11-16 19:34) [1]

WM_SETREDRAW


 
novice_man ©   (2004-11-16 19:35) [2]

Блокировка перерисовки:    
   SendMessage(TWinControl.Handle, WM_SETREDRAW, 0, 0)
Разблокировка:
   SendMessage(TWinControl.Handle, WM_SETREDRAW, 1, 0);
   RedrawWindow(TWinControl.Handle, nil, 0,
     RDW_ERASE or RDW_FRAME or RDW_INVALIDATE or RDW_ALLCHILDREN);


 
Gear   (2004-11-16 19:59) [3]

А как определить тот момент при котором я пытаюсь изменять размеры формы мышкой?


 
novice_man ©   (2004-11-16 20:03) [4]

Gear  (16.11.04 19:59) [3]

А как определить тот момент при котором я пытаюсь изменять размеры формы мышкой?



procedure TForm1.FormResize(Sender: TObject);
begin

end;

происходит во впемя изменения формы.


 
Gear   (2004-11-16 20:05) [5]

А как отловить начало и конец этого момента чтобы соответственно послать блокировку и разблокировку?


 
novice_man ©   (2004-11-16 20:10) [6]

Примерно вот так, хотя правильно через сообщения, счас гляну.

procedure TForm1.FormResize(Sender: TObject);
begin
Form1.Caption := "начало";
end;

procedure TForm1.FormConstrainedResize(Sender: TObject; var MinWidth,
 MinHeight, MaxWidth, MaxHeight: Integer);
begin
  Form1.Caption := "конец";
end;


 
novice_man ©   (2004-11-16 20:16) [7]

wm_Size

   Уведомляет окно, что его размер изменился  

   lParamLo: Новая ширина области пользователя
   lParamHi: Новая высота области пользователя


 
Gear   (2004-11-16 20:18) [8]

Спасибо!


 
novice_man ©   (2004-11-16 20:19) [9]

отлавливать примерно так:


type
      TForm1 = class(TForm)
      private
      {Private declarations}
      procedure WMSysCommand(var Msg: TWMSysCommand);
      message WM_SYSCOMMAND;
      public
      {Public declarations}
end;

var
      Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.WMSysCommand;
begin
      if (Msg.CmdType = wm_Size) then

end;


 
novice_man ©   (2004-11-16 20:21) [10]

Да чуть не забыл, добавь inherited;

procedure TForm1.WMSysCommand;
begin
  if (Msg.CmdType = wm_Size) then
inherited;
end;


 
Юрий Зотов ©   (2004-11-16 20:59) [11]

> Gear (16.11.04 19:27)

1. Вводим в форму приватное булевское поле FResizing.

2. Обработчик WM_SIZING (идет изменение размеров):
FResizing := True;
inherited;


3. Обработчик WM_SIZE (изменение размеров закончено):
FResizing := False;
inherited;


4. Обработчик ListBox.OnDraw:
if not FResizing then
begin
 ... // Здесь весь Ваш код.
end;


 
novice_man ©   (2004-11-16 21:10) [12]

Gear  (16.11.04 20:18) [8]
Спасибо!

Ушел, но обещал вернуться!


 
Gear   (2004-11-17 12:18) [13]

Вернулся, спасибо в двойне!:)



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.12.05;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.035 c
6-1096115383
Yuri Btr
2004-09-25 16:29
2004.12.05
Не возникает события OnConnect


3-1099465219
Алексей
2004-11-03 10:00
2004.12.05
Структура БД InterBase


4-1098203270
Grundic
2004-10-19 20:27
2004.12.05
!ПОЛНЫЙ! путь к .EXE через PID или его HANDLE - как?


3-1099816795
Dell3r
2004-11-07 11:39
2004.12.05
TTable


14-1100507751
gn
2004-11-15 11:35
2004.12.05
Шпионы среди нас





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский