Q&A

  • MDI내에서...
MDI폼에서 두개의 Form을 띄워 놓구, Form1에서 Form2로 어떤 값을 던져 주면



Form2에서 그 값을 받자 마자 어떤 작업을 실행하고..



이런식으로 작업을 진행하려고 하는데..



이런경우에도 SendMessage가 되는지..



글구 어떤식으로 써야되는지. 좀 알려 주세요..



잘 안되네요. ㅠㅠ

3  COMMENTS
  • Profile
    박덕신 2001.11.19 22:29
    델초보 wrote:

    > MDI폼에서 두개의 Form을 띄워 놓구, Form1에서 Form2로 어떤 값을 던져 주면

    >

    > Form2에서 그 값을 받자 마자 어떤 작업을 실행하고..

    >

    > 이런식으로 작업을 진행하려고 하는데..

    >

    > 이런경우에도 SendMessage가 되는지..

    >

    > 글구 어떤식으로 써야되는지. 좀 알려 주세요..

    >

    > 잘 안되네요. ㅠㅠ





    이건 해 보지는 않은건데.....

    혹시 이렇게 하면 어떨까요....

    Form1에서 Form2의 내용을 넘길때...Function을 호출해서..

    그에 대한 실행 루핑을 돌리면 될 것 같은데...

    그리고 두 개의 폼이 모두 메모리에 올라와 있다면....그 값을 넘기는건

    문제가 되지 않는것으로 알고 있는데....

    일반 SDI에서는 메로리 관리하는데 별로 신경을 써 주지 않아도 되지만...

    MDI 방식에서는 그보다 더 메로리라든가 STACK MEMORY 를 사용함에 있어 반드시

    메로리 해제를 해 주어야 한다는것을 잊지 마세요...



    참고로 아래 문장은 폼을 MDI 방식으로 콜하는 방식입니다....



    function FormCall(var F: TForm; A: TFormClass): Boolean;

    var

    i : Integer;

    MainForm: TForm;

    ChkName: String;

    begin

    Result := True;

    Screen.Cursor := crHourGlass;

    ChkName := A.ClassName;



    MainForm := Application.MainForm;

    with MainForm do

    begin

    // 실행된 MDI Child Window가 있다면

    if MDIChildCount > 0 then

    begin

    // 실행된 MDI Child Window의 수만큼 체크 한다.

    for i := 0 to MDIChildCount - 1 do

    // 실행된 MDI Child Window가 현재 실행하려는 Window와 같으면

    if MDIChildren[i] = F then

    begin

    // Minimized 상태라면 Normal상태로 만들고

    if MDIChildren[i].WindowState = wsMinimized then

    MDIChildren[i].WindowState := wsNormal

    else

    MDIChildren[i].BringToFront;

    Screen.Cursor := crDefault;

    Exit;

    end;

    end;

    end;



    Application.CreateForm(A, F);

    Screen.Cursor := crDefault;

    end;



    호출할때는...



    FormCall(TFORM(Form1), TForm1);

    이런식으로 하면 됩니다.....





    참고로 하세요....저는 이 구문을 Function모음에 모아 놓고 사용합니다...

    그럼 즐코 하세요....

  • Profile
    델초보 2001.11.19 23:27
    저...



    Form1과 Form2를 나눠서 말이져...



    Form1에서는 받은자료를 직접 디비에 Write하지 않고, text로 보관까지만 하구..



    Form2에게 Form1이 '나 Text저장 다 했다!!'일케 신호를 보내면, Form2가 그걸받아서



    Text -> DB로 저장하게 하려고 하거든요. 만약 Form2의 함수를 호출한다는 건..



    Text->DB로 저장하는거 까지 Form1에서 확인하게 되는거니까..



    아예 별개로 돌아가게 하고 싶거든요..



    즉 Form2는 마치 BackGround 프로그램 처럼 Hide시켜 뒷단에서 돌아가게 할



    생각이거든요...



    ㅠㅠ...



    다시한번만 봐 주세요.

  • Profile
    델초보 2001.11.20 01:21
    그냥 BackGround Form의 에디트박스에 던져주구 Change체크하면 되는군여..



    ㅠㅠ 넘 간단한걸갖구 고민했당.. ㅠㅠ