2009-04-20 8 views
1

파일 이름의 목록 상자에있는 항목 위에 마우스를 올려 놓으면 미리보기 이미지 (힌트와 비슷 함)를 표시하려면 어떻게해야합니까? 양식을 보여주고 이미지를로드하려고 시도했지만 미리보기 양식이 표시 될 때 목록 상자의 포커스를 잃습니다. 즉, 마우스를 움직이면 목록의 다음 항목으로 이동하면 미리보기 이미지가 변경되지 않습니다. .목록 상자의 이미지 미리보기

감사합니다. Pieter.


나는, TOndrej의 답변에 따라, 사용자 정의 THintWindow을 구현하려고 노력하지만, Canvas.StretchDraw 매개 변수로 전송되는 비트 맵을 그릴하지 않습니다. 어떤 아이디어가 좋을까요? 텍스트가 정상적으로 표시됩니다.

procedure TFormMain.DisplayPreview(HintImage: TBitmap); 
var 
    CustomHint: THintWindow; 
    Rect: TRect; 
    MousePoint: TPoint; 
begin 
    *{ 
    Based on Source: http://www.chami.com/tips/delphi/112996D.html 
    }* 
    GetCursorPos(MousePoint); 
    with Rect do 
    begin 
     // set the position and size of the hint window 
     Left := MousePoint.X; 
     Top := MousePoint.Y; 
     Right := Left + 50; 
     Bottom := Top + 25; 
    end; 

    CustomHint := THintWindow.Create(Self); 
    try 
    with CustomHint do 
     begin 
     // set the background color 
     //Color := clNone; 
     **Canvas.StretchDraw(Rect, HintImage);** 
     ActivateHint(Rect, 'Hint'); 
     Application.ProcessMessages; 
     // 
     // perform your tasks here 
     // before closing the hint window 
     // 
     Sleep(500); 
     ReleaseHandle; 
     end; 

    finally 
    if Assigned(CustomHint) then 
     CustomHint.Free; 
    end; 
end; 

답변

2

내게는 사용자 지정 힌트 창이 필요합니다. 이렇게하려면 새 THintWindow 자손을 작성하고 Forms 단위의 HintWindowClass 글로벌 변수에 새 클래스를 할당하여 전체 응용 프로그램에 전역으로 설정하거나 CM_HINTSHOW 메시지를 처리 ​​할 사용자 지정 목록 하위 항목을 작성하고 새 클래스를 할당해야합니다 힌트 창 클래스는 HintInfo.HintWindowClass입니다. (HintInfo는 VCL에서 CM_HINTSHOW 메시지로 사용자 컨트롤에 전달한 레코드를 가리 킵니다.)

1

1) 미리보기 창을 예를 들어 대화 상자 (모달 창)로 표시하고 있습니까? 그렇지 않으면 모달이 아닌 창으로 변경하십시오.
2) 미리보기 양식이 나타나면 목록 상자가있는 부모 양식에 포커스가 있고 마우스 이동 이벤트가 목록 상자로 전달되는 방식으로 부모 창으로 다시 포커스를 설정해야합니다.

좋습니다.