2012-12-09 6 views
2

사용자 정의 모양으로 설치 프로그램을 만들고 BorderStylebsNone으로 설정하여 제목 표시 줄을 비활성화하려고합니다.제목 표시 줄을 사용할 수 없으면 Inno Setup WizardForm을 움직일 수있게 만듭니다.

이제 더 이상 창을 이동할 수 없습니다. 나는 주위를 둘러 보았다 델파이에 대한 해결책 발견이가 이노 설정에
http://www.chami.com/tips/delphi/010397D.html

을 수행 할 수 있습니까?

MSDN에서 이미 WM_NCHITTEST을 찾았지만이 작업을 수행 할 수있는 방법과 방법을 알 수 없습니다.

편집 : 둘러보고 난 후 advanced compiler 고급 컴파일러를 사용하여 컴파일하고 나왔지만 작동하지 않습니다. 그것은 컴파일하지만 창 안쪽을 클릭하면 끌 수 없습니다.

procedure Dragg(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); 
begin 
    SendMessage(WizardForm.Handle, $F112, $F012, 0); 
end; 

procedure InitializeWizard(); 
begin 
    WizardForm.OnMouseDown := @Dragg; 
end; 

답변

4

번호는 메시지를 처리하거나 컨트롤에 대한 WndProc을 변경하는 방법은 없습니다. this post과 같이 문서화되지 않은 드래그 동작을 구현할 수있는 약간의 기회가 있었지만 불행히도 InnoSetup에는 스크립팅을 위해 마우스 다운 이벤트가 게시되지 않았으므로 일부 외부 라이브러리가 없으면 운이 좋지 않습니다.


언급 한 라이브러리 및 코드를 사용하십시오. ReleaseCapture 함수 호출이 누락되었습니다. 대신에이 스크립트 코드를 사용 (그리고 잊지 마세요, 마법사 형태의 유일한 노출 된 부분은 왼쪽 아래에 있음) :

[Code] 
function ReleaseCapture: BOOL; 
    external '[email protected] stdcall'; 

const 
    SC_DRAGMOVE = $F012; 
    WM_SYSCOMMAND = $0112; 

procedure OnMouseDown(Sender: TObject; Button: TMouseButton; 
    Shift: TShiftState; X, Y: Integer); 
begin 
    ReleaseCapture; 
    WizardForm.Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0); 
end; 

procedure InitializeWizard; 
begin 
    WizardForm.OnMouseDown := @OnMouseDown; 
end; 
+1

그것은 완전히 불가능은 아니지만, 하위 클래스 외부 DLL의 도움이 필요합니다 메인 Inno 창. 그리고 그 방법은 광기를, 그리고/또는 Sparta를 놓습니다. – Miral

+0

@Miral, 그래, 그게 내가 외부 libary *없이이 게시물을 끝낸 이유 야. – TLama

+0

오 그래, 나는 처리 할 수있는 restools.hanzify.org에있는 adinced 컴파일러를 사용하고 있다는 것을 잊어 버렸다. 마우스 다운 이벤트뿐만 아니라 표준 컴파일러가 부족한 많은 다른 기능을 제공합니다. 모든 지원 클래스를 보여주는 txt 파일이 있습니다. 당신은 그것을 여기에서 얻을 수 있습니다 : http://restools.hanzify.org/article.asp?id=89 – user1662035