ListBox jak w GG

0

Yo! Może odgrzewam stary kotlet, ale wydaje mi się że to dobry temat na mój problem:)
Z rysowaniem radzę sobie bez problemu, ale mam problem z dodatkowym przyciskiem(w tym temacie to jest ta ikonka po prawej stronie).
Jakim sposobem mogę do niego przypisać jakieś zdarzenie czy coś w tym stylu? Myślałem coś o sprawdzeniu w jakim miejscu jest kursor na itemie itp.. ale nawet nie wiem jak to wykonać;D

cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

w onmousedown/up dostajesz x i y.

0
cimak napisał(a)

w onmousedown/up dostajesz x i y.

tylko że te wartości dotyczą całego listboxa, przynajmniej z tego co widzę:> spłodziłem taki kod:

Kopiuj
if (x> 268) and (x<276 ) and (y>6) and (y<20) then
showmessage('witaj!!'); 

Ale to średnio działa, wartości x się nie zmieniają, ale y się zmienia...

cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

listbox ma cos takiego jak ItemAtPos() i ItemRect().
majac xy klikniecia masz index item'u. mozesz sobie wyliczyc w ktorym miejcu na itemie kliknięto.

Kopiuj
procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var index:integer;
    r:TRect;
begin
  index:=listbox1.ItemAtPos(point(x,y), true);
  if index<0
    then exit; //nie kliknieto na zadnego itema.
  r:=listbox1.ItemRect(index);
  x:=x-r.Left;
  y:=y-r.Top;

  //teraz x i y to wspolrzedne klikniecia na itemie a index to index
  caption:=inttostr(x)+','+inttostr(y)+'  - item: '+inttostr(index);
end;

tak samo mozesz zrobic w mousemove i zmieniac kursor listboxa - po najechaniu na "przycisk" kursor bedzie sie zmienial np na crHandPoint.

edytowany 6x, ostatnio: cimak
arasso12
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 5 lat
0

Ja sie jeszcze wtrace... Wlasnie ukonczylem pierwsza wersje swojego komunikatora, tez na TEasyGG i tez mialem problem z lista kontaktow. Moim zdaniem prosciej i chyba ładniej jest uzyc scrollbox'a i na nim tworzyc dynamicznie panele z dynamicznymi kompomentami. Jako tag panelu daje nr gg, pozniej w onclick odwolujesz sie przez TPanel(sender).tag i z glowy. Tak ja to rozwiazalem, ale jeszcze malo wiem wiec Wasz wybor ;)


non omnis moriar i tyle :-)
cimak
  • Rejestracja:ponad 22 lata
  • Ostatnio:ponad 9 lat
  • Postów:1668
0

jesli dobrze pamietam to kiedys juz byla na forum dyskusja na ten temat. nie wiem nawet czy sam nie wspomnialem o takim rozwiazaniu.
ale to ma pewne wady: jesli "kontaktow" bedzie naprawde duzo to czas utworzenia paneli i przyciskow na nich bedzie naprawde spory. listbox jest duzo szybszy, jest wiec bardziej uniwersalny. poza tym,listbox daje chyba wieksze mozliwosci graficzne i obsluge z klawiatury.

arasso12
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 5 lat
0

Racja, czas tworzenia okolo 120 paneli na moim 2rdzeniowym procku jest spory(przynajmniej zauwazalny czyli jakas sekunda). Jednak jest to tylko jednorazowe przy uruchomieniu programu, nastepnie liste odswiezam przez edycje istniejacych paneli, co 3s. Ogolnie nie jest zle ;). Jak cos to pisac na pw, jezeli bede potrafil to pomoge.


non omnis moriar i tyle :-)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.