Q&A

  • 폼을 항상 위에...
5(실행파일 이름을 a,b,c,d,e 라고 할때)개의 실행화일이 있는데 모두 델파이로 만든거구여 각각의 폼 스타일은 fsNormal 입니다.



근데 이 5개중 1개(a 실행파일로 열린 폼)는 항상 b,c,d,e 폼 밑에 있어야 되거든요. 어떻게 방법이 없나요? 물론 각각의 폼 스타일은 StayOnTop로 하지 말구요.



방법좀 알려주세요. 자세한 설명과 함께...



많은 도움 부탁 드립니다.

3  COMMENTS
  • Profile
    이성윤 2000.12.03 01:55
    및에 답변 주신 분들께서 모두 setwindowpos이용을 답변주셨는데

    제가 그방법은 않된다라고 말씀드리려니 조금 민망하네요.



    델파이에서 기본적으로 만들어 주는 form에는 setwindowpos가 vb에서처럼

    적용되지 못합니다.

    이유는 main form(프로그램실행시 제일 먼저 실행하는 창 즉, 이 창을 닫으면 프로그램이 종료되는 창) 을 제외한 나머지 창들은 주창과 생성방식이 다른것 같습니다.



    때문에 vb에서는 각각의 보조창을 띄워도 작업표실줄에 나타나는데,

    델파이 만든 보조창은 작업표시줄에 않나타납니다.

    이렇게 작업표시줄에 나타나지 않는 폼에 setwindowpos명령을 걸면

    잠깐 앞으로 나온듯하지만 다른프로그램이 위로 엎고 나면 setwindowpos명령준것이

    허사가 되어버립니다.



    이경우

    procedure CreateParams( var Params: TCreateParams );override;

    를 이용하시면 폼스타일을 바꾸는 것이 가능합니다.





    예제는 다음과 같습니다.



    tform2 =class(tform)

    private

    procedure CreateParams( var Params: TCreateParams );override;

    ..



    end;



    procedure tform2.CreateParams( var Params: TCreateParams );

    var

    WndClass:TWndClass ;



    begin

    inherited CreateParams( Params );

    with Params do

    begin

    style:=ws_popupwindow or style or WS_SIZEBOX ;

    ExStyle:=ws_ex_appwindow or ExStyle or WS_EX_TOPMOS ;

    // 몇개씩 빼고 실험해보시면 대충 아십니다.

    WndParent := form1.Handle; //먼저만든 윈도우의 핸들

    end;

    end;





    더욱 자세한 정보를 알고 싶으시면

    createwindow와 createwindowex api를 참조하세요

    createparams자체가 그놈들을 하나의 함수로 합친것이니까요

    exstyle에 들어가는 속성은 createwindowex에서 하는놈의 속성이고

    style에 들어가는 속성은 createwindow에서 하는 놈의 속성입니다.



    그럼 즐거운 시간 되세요



  • Profile
    컴맹... 2000.12.01 18:23
    요렇게 하묜..

    최상위 폼이 되구여..

    SetWindowPos(Handle,HWND_TOPMOST,left,Top,Width,Height,SWP_SHOWWINDOW);



    SetWindowPos(Handle,HWND_NoTOPMOST,left,Top,Width,Height,SWP_SHOWWINDOW);

    또이건 그걸 해제 하는것이여용~

    도움이 되셨나여..?



    그럼 20000



    이민철 wrote:

    > 5(실행파일 이름을 a,b,c,d,e 라고 할때)개의 실행화일이 있는데 모두 델파이로 만든거구여 각각의 폼 스타일은 fsNormal 입니다.

    >

    > 근데 이 5개중 1개(a 실행파일로 열린 폼)는 항상 b,c,d,e 폼 밑에 있어야 되거든요. 어떻게 방법이 없나요? 물론 각각의 폼 스타일은 StayOnTop로 하지 말구요.

    >

    > 방법좀 알려주세요. 자세한 설명과 함께...

    >

    > 많은 도움 부탁 드립니다.

  • Profile
    델파이 나도초보 2000.12.01 08:33
    제가 비베에서 자주사용해왔기 때문에 될거에요.

    Setwindowpos(

    HWND hWnd, // handle of window

    HWND hWndInsertAfter, // placement-order handle

    int X, // horizontal position

    int Y, // vertical position

    int cx, // width

    int cy, // height

    UINT uFlags // window-positioning flags

    )

    사용방법(플래그처리)은 5년전에 마지막으로 사용했기에 잘모르겠어요.