고수님들...초보 델피언 송송송 임당..
넘 고민하다가 이렇게 들렀습니다.
제가 하고자 하는것은 vsReport style 리스트뷰에서의 컬럼이동(wm_hscroll, 수평스크롤바)을 마우스 클릭인 아닌 메뉴에서 클릭시에 이동하고 싶은겁니다.
이동 할 때에는
sendMessage(Listview.handle, wm_hscroll, SB_LINELEFT,0);
이런방법이 아니고요,
메뉴에는 컬럼인덱스 정보를 포함하고 있고 컬럼 인덱스 정보를 포함한 메뉴를 클릭할 경우 리스트 뷰 상에서 해당 컬럼으로의 자동 이동(수평스크롤)을 구현하고자 하는것입니다. 표현이 적절한지 모르겠네요...-.-;;
이것저것 뒤져서
아래의 소스로 구현은 했는데요..-.-;
//-------------------------------------------------------------------
procedure TfCommonSelectData.popmFindClick(Sender: TObject);
var ColWidth : Integer;
I:Integer;
si : TScrollInfo;
xPos : Integer;
tm : TEXTMETRIC;
xChar : Integer;
begin
GetTextMetrics (GetDC(ListView.Handle), tm);
xChar := tm.tmAveCharWidth;
ColWidth := 0;
for I:=0 to TMenuItem(Sender).MenuIndex-1 do
ColWidth := ColWidth + ListView.Column[I].Width;
ZeroMemory(@si, sizeof(TScrollInfo));
si.cbSize := sizeof(si);
si.fMask := SIF_ALL;
GetScrollInfo (ListView.Handle, SB_HORZ, si);
xPos := si.nPos;
si.fMask := SIF_POS;
si.nPos := ColWidth;
SetScrollInfo (ListView.Handle, SB_HORZ, si, TRUE);
GetScrollInfo (ListView.Handle, SB_HORZ, si);
if si.nPos <> xPos then
begin
ScrollWindow(ListView.Handle, xChar*(xPos - si.nPos), 0,nil, nil);
true);
end;
UpdateWindow(ListView.Handle);
end;
//--------------------------------------------------------------
영 화면이 깨지고 스크롤 바만 이동하고 컬럼은 그래로 있고 이상하네요..
고수님덜...방법좀 알려주세요.. ㅠ.ㅠ
이틀밤 새고 있네요......
부탁드립니다......
알고 보니 가까운 곳에 답이 있었군요....
// 이동할곳
ColWidth := 0;
for I:=0 to TMenuItem(Sender).MenuIndex-1 do
ColWidth := ColWidth + ListView.Column[I].Width;
// 현재위치
ZeroMemory(@si, sizeof(TScrollInfo));
si.cbSize := sizeof(si);
si.fMask := SIF_ALL;
GetScrollInfo (ListView.Handle, SB_HORZ, si);
// 위치로 가기
ListView.Scroll(ColWidth-si.nPos, 0);