Hallo
also meines wissens nach kommst du ohne weiteres nicht an die Spalte ran. ich würd mit den Spaltenbreiten arbeiten um zu ermitteln, in welcher Spalte die Maus ist:
auf die Schnelle und zum Denkanstoß so (nich groß getestet, bestimmt noch n Fehler drin

) kannst es ja noch verbessern
Ein Problem sehe ich noch bei Columns.Items[i].Width da kommt Mist raus, wenn du eine Spaltenbreite änderst. Es gibt noch ne andere Möglichkeit, die steht auch in den VCL-Sourcen (hab aber hoier nur ne Standardversion, muß mal zu hause guggn)
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34:
| procedure TForm1.ListView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); Var links, rechts, i,spalte:integer; begin Spalte:=-1; with listview1 do begin x:=x+abs(topitem.Left); links:=0; rechts:=Columns.Items[0].Width; i:=0;
while (i<=Columns.Count-1) do begin if ((x>=links) and (x<=rechts)) then begin Spalte := i; break; end else begin links:=rechts; rechts:=rechts+Columns.Items[i].Width; inc(i); end; end; end; label1.Caption:='Spalte: '+inttostr(spalte); end; |
acho denk aber dran: die caption hat die Spalte 0, das erst subitem hat die Spaltennr 1, aber als Subitemindex die 0, mußt du aufpassen
mfg Frank