Einzelnen Beitrag anzeigen

WaSa

Registriert seit: 31. Jan 2005
2 Beiträge
 
Delphi 2005 Professional
 
#2

Re: ListView ColumnRightClick fehlerhaft ?

  Alt 14. Feb 2006, 16:24
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
  Mit Zitat antworten Zitat