항상 도움만 받고 있는데...염치없이 더 큰 도움을 바라고 글 올립니다.
제목데로 리스트 뷰에 있는 내용을 검색해서 선택된 Row가 선택되도록 했습니다.
근데 선택된 Row를 마우스로 클릭하면 다른데로 이동합니다. 전 그 Row를 선택하고 싶은데......
아마도 소스안에서 스크롤을 해서 보여줄때는 어떻게 되었는데......
실제로 선택하니...소스안에서 스크롤 한것이 소용이 없어져 버리는 것 같습니다.
여기까지 코딩한 것도 이 질답에서 겨우겨우 했는데..더 이상....한계가 온 것 같습니다.
상황을 똑같이 만들어서 올립니다. 한 번 보시고 도움 좀 부탁합니다.
주요부분 소스는 여기에 올립니다.
FESVMS : 검색하고자 하는 텍스트를 쓰는 텍스트창
LVVMS : 검색하고자 하는 리스트뷰
( 리스트뷰의 caption 에 있는 것을 검색한답니다. )
procedure TForm1.FESVMSChange(Sender: TObject);
var
i : Integer;
SNum : String;
point : TPoint;
begin
for i := 0 to LVVMS.Items.Count - 1 do begin
SNum := TRIM( StringReplace( FESVMS.Text, '_', '' , [rfReplaceAll] ) );
if StrLComp( PCHAR(LVVMS.Items[i].Caption), PCHAR(SNum), Length(SNum) ) = 0 then begin
LVVMS.DropTarget := nil;
LVVMS.Scroll(0, LVVMS.Items[i].GetPosition.Y-LVVMS.TopItem.GetPosition.y);
LVVMS.DropTarget := LVVMS.Items[i];
exit;
end;
end;
end;
그럼 잘 부탁합니다. 미리 감사말씀드립니다. ^^ 좋은 하루 되세요
procedure TForm1.FESVMSExit(Sender: TObject);
begin
FESVMS.Text := '';
end;
위 Exit를 사용하셨군요, 다른걸 사용하셔도 되지만 이걸 사용하셧다면
수정해보세요.
Exit함수로 포커스가 넘어갈때 FESVMS.Text := '';이 실행되므로
Change가 실행되거든요
잠시 그 Change이벤트를 막아 보시면 조금만 고쳐도 될겁니다.
procedure TForm1.FESVMSExit(Sender: TObject);
begin
FESVMS.OnChange := nil;
FESVMS.Text := '';
FESVMS.OnChange := FESVMSChange;
end;