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?
A nie ma tam przypadkiem zdarzenia OnColumnClick? :)
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;
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.