본문 바로가기
IT/델파이

TListView에서 마우스가 클릭한 위치의 Item과 Cell Column을 인지하는 방법

by 불멸남생 2023. 2. 8.

 

1. 사용설명


Click된 컬럼은 Caption을 포함한 인덱스 값을 유지한다.

...
Item.Caption = column 0
Item.subitem[0] = column 1
Item.subitem[1] = column 2
...

클릭이벤트를 인지할수 있는 방법

1. TListView의 OnMouseDown 이벤트 핸들러를 이용할 수 있음.

2. 제공된 마우스 X,Y 좌표를 이용해 Item을 얻을 수 있음

3. SubItems의 각 CELL Width를 계산하여 클릭된 컬럼을 인지할수 있음.


아래 예제는 "How to draw a checkbox to column in a TListView" 에 기술된 TListView의 특정 컬럼에 체크박스(TCheckBox)를 표시하는 것와 더불어 사용자 Action에 의해 체크박스를 클릭하는 효과를 얻을 수 있다.

...
procedure TTest1.LVMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
   Item : TListItem;
   Column : Integer;
   Weg: Integer;
begin
   Item:= ListView1.GetItemAt(0, Y);
   if Assigned(Item) then
   begin
      Weg:= 0;
      Column := -1;
      repeat
         Inc(Column);
         Inc(Weg, ListView1.Columns[Column].Width);
      until X< Weg;

      if Column=2 then
      begin
        if Item.SubItems[1]='TRUE' then
          Item.SubItems[1] := 'FALSE'
        else
          Item.SubItems[1] := 'TRUE';
      end;

   end;
end;
...

 

반응형