Q&A

  • 델파이에서 Form을 Handle로 제어할수 있나요?
A라는 폼에서 B라는 폼을 모달할때

B라는 폼은 A라는 폼이 어떤 폼인지 알수가 없는 상태 입니다.

즉 uses 를 사용할수 없는 상황인데

B.Parent 나 B.Owner 를 사용해도 정상적으로

부모 윈도우를 찾지 못하고 있습니다.

핸들로 제어를 하려고 하는데

폼의 핸들에서 부터 폼에서 제공되는 함수를 사용하는데 까지만

사용하면 될거 같습니다.

핸들로 폼을 제어하는 방법 좀 부탁드립니다.
3  COMMENTS
  • Profile
    바보감자 2003.07.12 03:43
    안녕하세요 언제나 초보 바보감자입니다
    제어가능합니다..
    함수만 이용하실꺼면
    핸들을 찾아서 메세지를 날려주시는게 제일 편하실듯 싶습니다....
    예를들어.. 다른폼의 스트링 그리드를 스크롤 할려면

    procedure TForm2.Button1Click(Sender: TObject);
    var
      wnd: HWND;
    begin
      Wnd := FindWindow(nil, PChar('form1'));
      if Wnd <> 0 then begin
        Wnd := Findwindowex(wnd, 0, 'TStringGrid', '');
        if Wnd <> 0 then begin
          begin
            SendMessage(wnd, WM_VSCROLL, 1, 0);
          end;
        end;
      end;
    end;

    이렇게 메세지를 넣어줍니다.
    그럼 저 form1에있는 스트링그리드가 스크롤이 되지요..밑으로..
    그럼 만약 그 스크롤되었을때 처리하는 이벤트가 있다면
    처리가 되겠지요..

    즐푸하세요 ^^



  • Profile
    칼찬요정 2003.07.12 04:11
    안녕하세요 바보감자님
    근데 form1으로 FindWindow를 하셨는데
    form1인지 알수 없는 상황에서 자기를 부른 부모윈도우(어떤 윈도우인지는 모름)의 핸들을 찾아서 제어를 할수는 없나요?
    그리고 에디트에 값을 넣으려고 하는건데요..
    예를 들면 우편번호 찾기 같은경우에 우편번호 찾기 버튼을 누르면
    새로 다이얼로그 박스가 떠서 그것을 띄운 윈도우의 화면에
    값을 뿌려주는 것 같은 식으로 말입니다
    도움주셔서 감사합니다.
    한번만 더 도와주세요

  • Profile
    바보감자 2003.07.14 19:13
    안녕하세요 언제나 초보 바보감자입니다..
    ^^ 자 이부분을 보십시오..
    Wnd := FindWindow(nil, PChar('form1'));
    실행되고있는 윈도우 중에서
    caption ... 그 윈도우 상단 파란곳에 쓰여있는 글 있죠.?
    그게 form1인것을 찾으라는 뜻입니다..
    그럼 저 위에부분은 그 프로그램에 나와있는것을 넣어 주면 되겠지요

    처음 부분의 인자는 클래스명을 넣어주는곳이구요..
    실행시킬 프로그램의 클래스 이름을 얻을려면, 양병규님의 스파이를 사용하세요 ^^ 다른 프로그램도 많구요..

    델파이의 클래스 이름은 "TAppBuilder"  입니다..

    그리고에디트에 특정 내용을 입력하시려면...
    검색하면 많은데......
    SendMessage(wnd, WM_SETTEXT, 0, LongInt(PChar('akaka')));
    이렇게 실핼해보시면 될듯..
    에디트에 값을 쳐 넣을려면 에디트의 핸들을 찾아야겠지요.?
    제가 스트링 그리드 찾았던거처럼 그 핸들 가지고 다시 한번 찾아야합니다.
    ^^
    도움이 좀 되셨는지...?
    ^^ 수고하세요 !!