Q&A

  • Listview 에서 선택한 셀의 컬럼 얻어오기 질문입니다.
선택한 셀의 컬럼을 얻어오는것은 잘 됩니다.

그런데 문제는 스크롤을 했을 경우입니다.

// 현재 선택한 셀의 컬럼 인덱스를 돌려준다.
function TForm.GetSelectCol : Integer;
var
  aPoint : TPoint;
  i, iLeft : Integer;
begin
  Result := -1;
  
  // get position
  aPoint := ListView1.ScreenToClient(Mouse.CursorPos);

  iLeft := ListView1.Left;
  for i:=0 to ListView1.Columns.Count-1 do
  begin
    iLeft := iLeft + ListView1.Columns[i].Width;
    if aPoint.X <= iLeft then
    begin
      Result := i;
      Break;
    end;
  end;
end;

예를 들면 스크롤이 했을경우 10번째 컬럼의 셀을 선택했는데 리턴되는 값은 8번째 셀이라고 나오는 것처럼요..

1  COMMENTS
  • Profile
    KDDG_Hit 2004.12.16 01:13
    쩝.. 의외로 쉽게 해결했습니다.

    function TForm.GetSelectCol : Integer;
    var
      aPoint : TPoint;
      i, iLeft : Integer;
    begin
      Result := -1;
      
      // get position
      aPoint := ListView1.ScreenToClient(Mouse.CursorPos);

      // 여기 두줄을 추가했습니다.
      if ListQuoteDDe.Selected.Position.x < 0 then
        iLeft := iLeft + ListQuoteDDe.Selected.Position.x;  

      iLeft := ListView1.Left;
      for i:=0 to ListView1.Columns.Count-1 do
      begin
        iLeft := iLeft + ListView1.Columns[i].Width;
        if aPoint.X <= iLeft then
        begin
          Result := i;
          Break;
        end;
      end;
    end;