ListBox, OwnerDraw, odświe?żanie

0

3 problemy:
1.
Mam problem z odświeżaniem ListBoxa do którego wrysowałem sobie ikonki i tekst z różnym formatowaniem (niektóre kolorki są pogrubione a niektóre nie oraz używam dwóch różnych kolorów).
Problem jest taki że podczas gdy kliknę na jakimś itemie i nie puszczając klawisza myszy przesunę myszkę w dół lub górę to pozostają takie jakby ramki na poszczególnych itemach.
Gdy klikam na pojedynczym itemie to wtedy na moment robi się też taka ramka ale w OnClick dałem repaint-a i trochę pomogło.
Do wrysowywania ikonek i tekstu używam następującej procedurki:
w OnDrawItem ListaBoxa:

   with ListBox do
     begin
       Canvas.Font.Color := KolorTyt;
       Canvas.Font.Style := Canvas.Font.Style + [fsBold];
       ImageList.Draw(ListBox.Canvas, Rect.Left+2, Rect.Top+1, 7);
       Canvas.TextOut(Rect.Left+22, Rect.Top+1, TabReg[index]);
     end;

a do odświeżania używam w OnClick:

       ListBox.Repaint;

Czy jest jakiś sposób aby pozbyć się tego denerwującego błędu odświeżania?

  1. Normalnie jak użyjesz ListBoxa i dodasz jakieś itemki to gdy klikasz na poszczególnym to wtedy zaznaczona zostaje calutka linia od lewej strony ListBoxa do jego końca a gdy używam wpisania poprzez Canvas.TextOut to wtedy zostaje zaznaczona linijka tylko na długość tekstu. Czy jest możliwość aby została zaznaczona calutka linijka?

  2. Mam jeszcze problem ze zrobieniem aby po najechaniu myszką (wystarczy że kursor znajdzie się nad itemem i nie muszę w niego kliknąć) został on podświetlony (item a nie ListBox ;) )

Za wszystkie podpowiedzi serdecznie dziękuję.

ps. jeżeli już gdzieś był taki temat to przepraszam ale mam ograniczony do 3 godzin dziennie ostatnio czas dostępowy w pracy, a w hacie netu nie mam a wyświetliło mi się tyle stron że nie mogłem wszystkiego dokładnie przejrzeć. Przejrzałem w całości tylko FAQ i arty do delphi ale tam nic nie znalazłem co by mi pomogło.

dopisane:
właśnie zabawiłem się komponentem ListBoxNoAnts ściagniętym z serwisu 4programmers ale nie wiem dlaczego nie chce mi po nim w ogóle rysować a używam tych samych procedur co dla zwykłego ListBoxa czyli OnDrawItem. Możliwe że ja coś robię nie tak z tym komponentem.
Z kolei komponent MyListBox (komponent też jest tu na serwisie) ma te same wady co zwykły ListBox.
Czyli dalej jestem w kropce.

0

Odpowiedź na wszystkie moje bolączki znalazłem w źródłach programu:
menu ListBox (źródła do ściagnięcia na 4programmers)
tak więc temat uważam za zamknięty a wszystkich którym by się to przydało zachęcam do przeanalizowania kodu tego programiku (jest naprawdę malutki bo tylko jedna procedurka ListBox1DrawItem) a zawiera odpowiedzi na wszystkie zadane przeze mnie pytania.

Pozdrówka

[green]

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