Daje 3 browce (do wyboru, zakladajac ze kazdy nie bedzie mial objetosci > 0,5l :P; odbior w trojmiescie, ew. na jakims zlocie, na ktorym bede ;]) temu, kto wyduma jak wywalic te glupie kropeczki wokol itema w listboksie/listview (ograniczmy sie do listboksa) gdy jest on zaznaczony. Ladnie sobie rysuje na nim canvasem, a te kropeczki mi psuja caly efekt :). Mordowalem sie z tym ladne pare tygodni, szukalem doslownie wszedzie i zadnej wzmianki nie znalazlem, zas komponenty ktore tego ustrojstwa nie posiadaja, sa bez zrodel (nie, nie chce sie na nie przesiasc :P). ClearSelection nie pomaga (przynajmniej tam, gdzie je umieszczalem), ba! - dostawalem w zamian Stack Overflow :D.
Hm.. Jeśli chodzi ci o te kropeczki wokół zaznaczonego itema, to możesz przecież zrobic w OwnerDraw i dać Rectangle <ort>wokuł </ort>itema, tylko zmienić Canvas.Brush.Style na bsNone i wyświetlić na tym wszystkm jeszcze text i <ort>bedzie </ort>spoko :)
if odSelected in state then
begin
listbox1.canvas.brush.color :=clskyblue;
listbox1.canvas.FillRect(Rect);
listbox1.canvas.Brush.Color := clskyblue;
listbox1.canvas.FrameRect(Rect);
listbox1.Canvas.Font.Color:= clblack;
listbox1.Canvas.Brush.Style:=bsClear;
listbox1.Canvas.TextRect(rect,rect.Left+1,rect.Top+1,Listbox1.Items.Strings[index]);
end;
Jak chcesz rysować obrazek obok itema to narysuj go na samym końcu. Już widzę te 3 zimne bronki.
[browar]
CYMES: myślę, że za bardzo się pospieszyłeś z odpowiedzią. Niestety te kropeczki są malowane na samym końcu i to chyba przez windowsa. Jak na razie, jedynym rozwiązaniem, które okazało się skuteczne, jest ustawienie focusa na coś innego, kiedy listbox gop przejmie. No, chyba, ze potrzebujesz focusa...
Hm.. Może windows, ma w jakimś dllku funkcjie DisableKropeczki32 ? albo co.. :p Nie wiem... Ale jeszcze myśle :)
Witam.
Nie chcę żadnego browara bo nie piję, ale podpowiem.
Dla ListBox'a: czy ustawiłeś Style na lbOwnerDrawVariable lub lbOwnerDrawFixed?
Po przestawieniu tryb OwnerDraw zadziała tak jak chcesz - bez tych kropeczek. Przynajmniej u mnie działa. Resztę napisz sam.
Pozdrawiam
Rav
Pregusia, Cymes: probowalem tak juz ladne pare dni temu, efekt jednak nijaki - tak jak napisal thenkles, niezaleznie co sobie tam namaluje, kropki i tak beda :(.
Rav: Tak, ustawilem na lbOwnerDrawVariable, inaczej nie zabardzo bym mogl po nim rysowac ;). Niestety, niezaleznie od tego, czy jest to bOwnerDrawVariable, czy bOwnerDrawVariable kropeczki i tak sie pojawiaja...
Miałem ten sam problem :) a rozwiązałem to ustawiając karetke listboxa przy każdym wciśnięciu buttona myszki w dół:
SendMessage(Handle, LB_SETCARETINDEX, -2, 0);
Wcześniej kombinowałem też z DrawFocusRect(), ale róznie z tym bywało, raz działało, raz nie. Fokus windows zdaje się rysuje tak samo jak DrawFocusRect() (o ile się nie mylę), czyli xoruje kolory. Pomyślałem więc, że narysuje to jeszcze raz i w rezultacie nie będzie żadnego efektu, no ale... tu właśnie teoria mija się z praktyką. No chyba, że robiłem coś źle :-P
Jejq - ale Wy macie problemy... też bym takie chciał mieć....
Ponieważ to nie pierwsze pytanie o usunięcie "kropeczek" więc napisałem specjalnie na tę okazję komponent. Kod źródłowy zarówno w BCB jak i Delphi więc każdy zrozumie.
http://4programmers.net/view_file.php?id=1408
A te Wasze rozwiązania... z całym szacunkiem - jeśli tak wyglądają wszystkie Wasze programy...
Pozdrawiam.
[<font color="blue">dopisane</span>]
Kasę za te 3 browce przekaż jakiemuś stowarzyszeniu charytatywnemu na rzecz głodujących dzieci.
Nie wiem, dlaczego u was nie działa, bo u mnie działa... Oto przykład: