[Delphi] OnClick na kolumnie w ListView

0

Jak wykryc klikniecie na ListView ale tylko na wybranej kolumnie? Np na itemie sie da (ItemIndex) ale jak zrobić żeby zdarzenie OnClick było dodatkowo wykonywane gdy klikniecie nastepuje na itemach tylko w obrębie jakies kolumny?

0

A nie ma tam przypadkiem zdarzenia OnColumnClick? :)

0

Tak tylko ze to oddzialywuje na klikniecie u góry nazwy kolumny a mi chodzi o klikniecie itemów w danej kolumnie. Napisalem wstepny kod ale to dziala w itemach wszystkich kolumn, a powinno w pierwszej

rocedure TForm1.ListView1DblClick(Sender: TObject);
begin
  if ListView1.Items.Item[ListView1.ItemIndex].ImageIndex=-1 then
    begin
    if ListView1.Column[0].Index=0 then ListView1.Items.Item[ListView1.ItemIndex].ImageIndex:=0;
    end else
        if ListView1.Column[0].Index=0 then ListView1.Items.Item[ListView1.ItemIndex].ImageIndex:=-1;
end;
0

OnMouseDown ma parametry punktu kliknięcia x i y. Znając (lub sprawdzając) szerokości kolumn można sobie poradzić.

Ja to zrobiłem tworząc właściwość formy:

property SessionsMarkerFieldSize : Integer read GetSessionsMarkerFieldSize;

metoda dostępowa wyglada tak:

function TFormMain.GetSessionsMarkerFieldSize : Integer;
//access method for read only property of FormMain
//creturns current width of first eight columns of ListViewSessions
//these columns contain marker information
var i:Integer;
begin
  Result:=0;
  for i:=0 to 7 do
   Inc(Result, ListViewSessions.Column[i].Width);
end;

i oblicza sumaryczną szerokość pierwszych 8 kolumn

a obsługa kliknięcia:

procedure TFormMain.ListViewSessionsMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
 //allows quick access to setting markers by right-click on
 //ListViewSessions's marker area

begin
  if (ListViewSessions.ItemIndex<>-1)   //and anything is selected
      and (Button=mbRight)                   //and right-click
      then
         if (x<=SessionsMarkerFieldSize)    //checks if in marker area
         then
           SetMarkers.Click
         else
           ListViewSessions.PopupMenu.Popup
             (ListViewSessions.ClientToScreen(Point(x,y)).X,
              ListViewSessions.ClientToScreen(Point(x,y)).y);


end;//TFormMain.ListViewSessionsMouseDown

Jak widać, jeśli kliknięcie jest w pierwszych 8 kolumnach, wtedy uruchamiana jest metoda Click obiektu SetMarkers (który nawiasem mówiąc jest MenuItemem), natomiast kliknięcie poza pierwszymi 8 kolumnami wyrzuca PopupMenu. Kliknięcie prawym, oczywiście, tylko jeśli jest zaznaczenie na ListView.

1 użytkowników online, w tym zalogowanych: 0, gości: 1