AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView ColumnRightClick fehlerhaft ?

Ein Thema von fotohase · begonnen am 26. Dez 2005 · letzter Beitrag vom 15. Feb 2006
Antwort Antwort
fotohase
(Gast)

n/a Beiträge
 
#1

ListView ColumnRightClick fehlerhaft ?

  Alt 26. Dez 2005, 12:33
Hallo,
wenn ich in einem ListView über den vertikalen Scrollbalken die Spalten verschiebe, so dass links die ersten Spalten nicht mehr dargestellt werden, liefert ColumnRightClick ein fehlerhaftes Column.

Column.Index ist um die Anzahl der nicht sichtbaren Spalten zu klein. ColumnClick liefert jedoch den richtigen Wert.

Was muss ich machen um auch bei ColumnRightClick den richtigen Wert zu bekommen?
  Mit Zitat antworten Zitat
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
fotohase
(Gast)

n/a Beiträge
 
#3

Re: ListView ColumnRightClick fehlerhaft ?

  Alt 15. Feb 2006, 13:17
Hallo WaSa,
ich habe mir folgendes "zusammengestrickt". Damit klappt es jetzt.
Gruß fotohase



procedure TFmServer.ListView1ColumnRightClick(Sender: TObject;
Column: TListColumn; Point: TPoint);
Var
i,b,IndexC:Integer;
begin
IndexC:=Column.Index;
if ListView1.TopItem.Left < -2 then begin
// Liste wurde verschoben
IndexC:=-1;
b:=Abs(ListView1.TopItem.Left+2)+Point.X;
for i:=0 to Pred(ListView1.Columns.Count) do begin
Inc(IndexC);
Dec(b,ListView1.Columns[i].Width);
if b<=0 then
Break;
end;
end;
// IndexC enthält jetzt den richtigen Spaltenindex

end;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz