Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Опасен ли CM_RECREATEWND?


Mister Twister ©   (2005-09-10 22:03:00) 

В моей проге заполняется ListView:

 MyListView.Items.BeginUpdate;
 try
... (здесь заполнение)
 finally
   MyListView.Items.EndUpdate;
 end;
 SendMessage(MyListView.Handle, CM_RECREATEWND, 0, 0);

Хотелось бы узнать, насколько корректен вызов CM_RECREATEWND после заполнения списка?
Нет ли тут подводных камней?


Турист   (2005-09-10 23:15:00) [1]

Может быть это "подводные камни" ?


{ ComCtrls.pas }

procedure TCustomListView.CreateWnd;

 procedure ReadCols;
 var
   Reader: TReader;
 begin
   if FColStream = nil then Exit;
   Columns.Clear;
   Reader := TReader.Create(FColStream, 1024);
   try
     Reader.ReadValue;
     Reader.ReadCollection(Columns);
   finally
     Reader.Free;
   end;
   FColStream.Destroy;
   FColStream := nil;
 end;

begin
 inherited CreateWnd;
 ResetExStyles;
 SetTextBKColor(Color);
 SetTextColor(Font.Color);
 SetAllocBy(AllocBy);
 if FMemStream <> nil then
 begin
   Items.BeginUpdate;
   FReading := True;
   try
     Columns.Clear;
     FMemStream.ReadComponent(Self);
     FMemStream.Destroy;
     FMemStream := nil;
     if OwnerData then Items.Count := FOwnerDataCount;
     if FCheckboxes then RestoreChecks;
     ReadCols;
     Font := Font;
   finally
     Items.EndUpdate;
     FReading := False;
   end;
 end;
 Columns.UpdateCols;
 if (LargeImages <> nil) and LargeImages.HandleAllocated then
   SetImageList(LargeImages.Handle, LVSIL_NORMAL);
 if (SmallImages <> nil) and SmallImages.HandleAllocated then
   SetImageList(SmallImages.Handle, LVSIL_SMALL);
 if (StateImages <> nil) and StateImages.HandleAllocated then
   SetImageList(StateImages.Handle, LVSIL_STATE);
 DoAutoSize;
end;

procedure TCustomListView.DestroyWnd;
begin
 if FMemStream = nil then
   FMemStream := TMemoryStream.Create
 else
   FMemStream.Size := 0;
 if OwnerData then FOwnerDataCount := Items.Count;
 FMemStream.WriteComponent(Self);
 FMemStream.Position := 0;
 if FCheckboxes then
   SaveChecks;
 inherited DestroyWnd;
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо