Hallo fotohase
Ich plage mich auch gerade damit herum.
Zitat:
Was muss ich machen um auch bei ColumnRightClick den richtigen Wert zu bekommen?
Eine Lösung habe ich nicht, nur einen sog. "Workaround". Zusätzlich habe ich noch ein Popup-Menu, das du getrost ignorieren kannst.
Delphi-Quellcode:
procedure TForm1.lvColumnRightClick(Sender: TObject; Column: TListColumn; Point: TPoint);
var xPoint : TPoint;
begin
xPoint := ClientToScreen ( Point ); // Screen-Koordinaten zu Koordinaten der Applikation
inc ( xPoint.X, lv.Left ); // Applikations-Koord. zu Komponenten-Koord.
inc ( xPoint.Y, lv.Top );
// fColInd -> index von lv.Columns (lv ist meine ListView)
fColInd := CalcColumnInd ( -lv.Items [ 0 ].Left + Point.X ); // fColInd -> irgend int integer
if fColInd >= 0 then PopupMenu2.popup ( xpoint.x, xpoint.y );
end;
Delphi-Quellcode:
// +10, -10: gewisser ungültiger Range spezifiziert um die Kolonnengrenzen herum
// result >= 0 für gültigen Kolonne, -1 wenn ungültig
function TForm1.CalcColumnInd(aX: integer): integer;
var xI, xSum : integer;
begin
xSum := 0;
result := -1;
for xI := 0 to lv.Columns.Count - 1 do begin
if xSum + 10 < aX then begin
xSum := xSum + lv.Columns [ xI ].Width;
if xSum - 10 > aX then begin
result := xI;
break;
end;
end;
end;
end;
Den Tip mit "lv.items [0].left" habe ich von
dsdt info. Ist also nicht alles auf meinem Mist gewachsen.
Aber trotzdem, das ganze ist ein riesen Murks, ein Paradebeispiel einer schlecht gestalteten und schlecht implementierten Komponente. Sorry.
Gruss
Walter