|
두분 답변 감사합니다.
늘 행운이 같이 하시길 바람니다.
win32 API와 굉장히 복잡한 함수이 나오는 군요...
저도 좀 내공을 빨리 쌓고 싶은데... 부럽습니다.
고맙습니다.
공부하는 이 님이 쓰신 글 :
: 초록물고기 님이 쓰신 글 :
: : 안녕하세요..
: : 리스트 뷰에 (report 스타일) 많은 데이타를 첨가해서 (약 1000 개이상 )
: : 스크롤 바가 생겼습니다.
: :
: :
: : 그런데...특정버튼이 눌리면 , 리스트 뷰의 캡션들을 검사하여,
: : 원하는 row 가 있는 곳 까지 scroll up 시키거나, scroll down 시키려고 합니다.
: : (예를 500번째에 원하는 row 가 있었다면,, scroll bar를 대충 500번째 근처에 갔다 놓으려고 합니다)
: :
: : 즉 원하는 데이타가 화면의 llistview 안에 들어오도록 scroll bar를 자동으로 움직이려 하는데...
: : 이런것이 가능하나요?
: : 도움말에서 scroll 함수가 있어서, scroll (x, y )에서 아무런 좌표를 지정해 보니 ,스크롤 바가 움직입니다.. 문제는 y 좌표를 알아내는 것이 문제인데... 리스스트 뷰에서마우스가 마우스가 움직였을때는, GetItemAt (X,Y )에서 y좌표를 구할 수가 있습니다.
: :
: : 그렇지 않고, 리스트뷰의 특정한 row의 y좌표를 구해서,,, scroll을 시키고 싶은데...
: : y 좌표를 어떻게 알아낼수 있는지요?
: :
: :
: :
: : 수고 하세요.
: :
: :
:
:
: 전 이런 식으로 사용했네요.
: nNo는 화면상에 보시되어야할 특정 Item의 Index입니다.
: 현재 스크롤 한다는 걸 보여주기위해, 리스트뷰의 한 페이지 단위로 여러번 스크롤하는 방식으로 했어요.
: 전 그냥 while 내부에 Application->ProcessMessages();를 사용했는데
: 그보단 스레드나 타이머 쓰시는게 좋을듯;;
: Index만 알면 ListView_GetItemRect매크로로 y값을 구할 수 있으니 이용하시면 될거같습니다.
:
: void TForm1::ScrollTextList()
: {
: RECT rc;
: ListView_GetItemRect(ListView1->Handle, 0, &rc, LVIR_BOUNDS);
: int Dist = rc.bottom - rc.top;
:
: while (nNo < ListView1->TopItem->Index)
: {
: ListView_Scroll(ListView1->Handle, 0, -Dist * ListView1->VisibleRowCount);
: Application->ProcessMessages();
: }
:
: while (nNo > ListView1->TopItem->Index + ListView1->VisibleRowCount)
: {
: ListView_Scroll(ListView1->Handle, 0, Dist * ListView1->VisibleRowCount);
: Application->ProcessMessages();
: }
: }
:
|