OnMeasureItem i Items.Objects

0

robię sobie listbox, w którym będę wyświetlał rożne obiekty.
obiekty maja właściwość text, która może zawierać wielolinijkowy tekst (niesamowite!)

robię tak:

 
procedure TfrmNewRozmowa.btnSendTekstClick(Sender: TObject);
begin
  Listbox1.items.addobject(obiekt.nazwa,obiekt); 
  showmessage('jakis komunikat');
end;

procedure TfrmNewRozmowa.Listbox1MeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
var obiekt: TMojObiekt
begin
  // dlaczego tu jeszcze nie ma obiektu??????
  // tzn Listbox1.Items.Objects[index] = NIL.
  if Listbox1.Items.Objects[index] is TMojObiekt then begin
    obiekt := TMojObiekt(Listbox1.Items.Objects[index]);
    height := (obiekt.text.Count+1) * WysokoscLinijkiTekstu;
  end;
end;

Niestety Listbox1MeasureItem jest wywoływane w trakcie addobject jeszcze przed wstawieniem obiektu do Listbox1.Items.Objects....
Jak zatem mam wyznaczyć sobie wysokość itema jeśli jeszcze nie mam obiektu??? zakładam, że taki obiekt może mieć np rozmiar czcionki, co będzie miało istotny wpływ na wysokość...

2
procedure TfrmNewRozmowa.btnSendTekstClick(Sender: TObject);
begin
  Listbox1.Tag:=(obiekt.text.Count+1) * WysokoscLinijkiTekstu; // lub jakaś zmienna w klasie
  Listbox1.items.addobject(obiekt.nazwa,obiekt); 
end;
 
procedure TfrmNewRozmowa.Listbox1MeasureItem(Control: TWinControl; Index: Integer; var Height: Integer);
begin
  height := Listbox1.Tag; // lub jakaś zmienna w klasie
end;

0 użytkowników online, w tym zalogowanych: 0, gości: 0