Q&A

  • 윈도우의 활성여부 확인
안녕하십니까? 항상 빠른 답변에 감사드립니다.



저는 MDI 형태에서 모든 화면이 Child로 호출이 되지만

한 화면에 대해서는 별개의 Form형태로 호출을 하여야 합니다.



그런데, 계속 Form를 호출하면 메모리가 낭비되기때문에

현재 해당 Form이 활성화 되었는데 뒤로 간 경우에는

bringtoFront로 설정을 주고 활성화가 되지 않은 경우에는

CreateForm을 하고 싶습니다.



MDI내에서는

for li_temp := 0 to MDIChildCount - 1 do

if MDIChildren[li_temp] is Tform1 then ....

으로 해당 윈도우를 찾았지만



MDI에서 NormalForm을 SHow를 통하여 호출하는 경우에 대해서는

어떻게 윈도우의 활성여부를 확인할 수 있는지요?



3  COMMENTS
  • Profile
    하얀까마귀 2000.03.10 19:05
    안녕하세요 하얀까마귀 입니다.

    밑에 다른두분의 답변을 읽어 보았는데.. 저는 조금 다른 생각이어서 몇자 적습니다.

    Form이라해도 이건 하나의 클래스일 뿐이거든요?? 그래서 생성이 되어 있고 이게 메인폼에서 생성된거 겠죠? 그럼 그냥 찾으시면 됩니다.

    SubForm := FindComponent('Form2'); 하시면 됩니다. 들어가는건 콤포넌트 이름 즉 폼명이구요 만약에 메인폼에서 찾으시는게 아니라면 SubForm := FindGlobalComponent('Form2')하시면 됩니다

    리턴값은 Tcomponent이고 못찾으면 nil을 리턴합니다.

    그러니까 nil일때 생성하시구 값이 있으면 (SubForm as TForm)하셔서 뭐 show를 해주시든지 하시면 되겠죠..??

    FindComponent('Form2');

    FindGlobalComponent('Form2');

    그럼 즐거운 시간 되세요

    하얀까마귀





    초보자 wrote:

    > 안녕하십니까? 항상 빠른 답변에 감사드립니다.

    >

    > 저는 MDI 형태에서 모든 화면이 Child로 호출이 되지만

    > 한 화면에 대해서는 별개의 Form형태로 호출을 하여야 합니다.

    >

    > 그런데, 계속 Form를 호출하면 메모리가 낭비되기때문에

    > 현재 해당 Form이 활성화 되었는데 뒤로 간 경우에는

    > bringtoFront로 설정을 주고 활성화가 되지 않은 경우에는

    > CreateForm을 하고 싶습니다.

    >

    > MDI내에서는

    > for li_temp := 0 to MDIChildCount - 1 do

    > if MDIChildren[li_temp] is Tform1 then ....

    > 으로 해당 윈도우를 찾았지만

    >

    > MDI에서 NormalForm을 SHow를 통하여 호출하는 경우에 대해서는

    > 어떻게 윈도우의 활성여부를 확인할 수 있는지요?

    >

  • Profile
    김정선 2000.03.10 15:38
    이러면 어떠하실지...



    uCommon 이라는 유닛에 이렇게 각 폼에 대한 활성화 여부를

    할 수 있는 레코드를 선언하고.



    Type

    TCurrentLoadForm = record

    SetFormPrivilege : boolean;

    BasicInformation : boolean;

    ViewPersonnel : boolean;

    ImpExpPersonnel : boolean;

    ApprovePersonnel : boolean;

    ResignedWorker : boolean;

    end;

    =====================



    메인 유닛에서

    uses uCommon;



    procedure TfrmMain.mnuEdit_Direct_WorkerClick(Sender: TObject);

    begin

    if not CurrentForm.Direct_Worker then

    frmDirect_Worker := TfrmDirect_Worker.Create( Self );



    frmDirect_Worker.Show;

    end;

    ======================



    폼이 생성될 때 : CurrentForm.Direct_Worker := True;

    폼이 종료될 때 : CurrentForm.Direct_Worker := False;



    ========================



    이렇게 해서 해당 폼이 오픈되어 있다면 CurrentForm.Direct_Worker := True;

    와 같이 값이 설정되어 있으면 다시 폼을 오픈하는 명령을 주어도



    // 폼이 오픈되어 있지 않으면 수행한다.

    if not CurrentForm.Direct_Worker then

    frmDirect_Worker := TfrmDirect_Worker.Create( Self );



    frmDirect_Worker.Show;



    폼을 새로 만들지 않고 보여주지 않을까 합니다...



    행복하세요....





    - 어설푼 이 입니다 -





    초보자 wrote:

    > 안녕하십니까? 항상 빠른 답변에 감사드립니다.

    >

    > 저는 MDI 형태에서 모든 화면이 Child로 호출이 되지만

    > 한 화면에 대해서는 별개의 Form형태로 호출을 하여야 합니다.

    >

    > 그런데, 계속 Form를 호출하면 메모리가 낭비되기때문에

    > 현재 해당 Form이 활성화 되었는데 뒤로 간 경우에는

    > bringtoFront로 설정을 주고 활성화가 되지 않은 경우에는

    > CreateForm을 하고 싶습니다.

    >

    > MDI내에서는

    > for li_temp := 0 to MDIChildCount - 1 do

    > if MDIChildren[li_temp] is Tform1 then ....

    > 으로 해당 윈도우를 찾았지만

    >

    > MDI에서 NormalForm을 SHow를 통하여 호출하는 경우에 대해서는

    > 어떻게 윈도우의 활성여부를 확인할 수 있는지요?

    >

  • Profile
    강인규 2000.03.10 07:17
    제가 질문을 이해했다면......



    이런 방법이 있습니다.



    child form의 close event에 아래와 같이 코딩합니다.



    formname := nil;

    action := cafree;



    nil을 할당해준후...(설명이 이상하군.)



    차일드폼이 발생하는 시점에 아래와 같이 코딩합니다.



    if formname = nil then

    application.createform(Tforname,formname)

    else

    formname.windowstate := wsnormal;



    이러면 동일한 차일드폼이 생성되지 않습니다.





    초보자 wrote:

    > 안녕하십니까? 항상 빠른 답변에 감사드립니다.

    >

    > 저는 MDI 형태에서 모든 화면이 Child로 호출이 되지만

    > 한 화면에 대해서는 별개의 Form형태로 호출을 하여야 합니다.

    >

    > 그런데, 계속 Form를 호출하면 메모리가 낭비되기때문에

    > 현재 해당 Form이 활성화 되었는데 뒤로 간 경우에는

    > bringtoFront로 설정을 주고 활성화가 되지 않은 경우에는

    > CreateForm을 하고 싶습니다.

    >

    > MDI내에서는

    > for li_temp := 0 to MDIChildCount - 1 do

    > if MDIChildren[li_temp] is Tform1 then ....

    > 으로 해당 윈도우를 찾았지만

    >

    > MDI에서 NormalForm을 SHow를 통하여 호출하는 경우에 대해서는

    > 어떻게 윈도우의 활성여부를 확인할 수 있는지요?

    >

    • 이호환
    • 2000.03.10 17:02
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.03.10 19:18
      안녕하세요 하얀까마귀 입니다. 말씀하신걸 보니 프로젝트를 하고 계시나 보죠??? 그럼 조금 힘드시겠지만...
    • 이상주
    • 2000.03.10 16:34
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 장은석
      2000.03.11 03:08
      이상주 wrote: > stringgrid에서 특정row 에 콤보박스를 집어넣을려면???? > 단콤보박스에나오는인덱스는...
    • 조복기
      2000.03.10 20:35
      이상주님이 말씀하신 그리드는 인터넷상에 프리웨어 또는 쉐어웨어로 존재를 합니다.. 델파이안에 기본...
    • 초보자
    • 2000.03.10 06:47
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.03.10 19:05
      안녕하세요 하얀까마귀 입니다. 밑에 다른두분의 답변을 읽어 보았는데.. 저는 조금 다른 생각이어서 몇자...
    • 김정선
      2000.03.10 15:38
      이러면 어떠하실지... uCommon 이라는 유닛에 이렇게 각 폼에 대한 활성화 여부를 할 수 있는 레코드를...
    • 강인규
      2000.03.10 07:17
      제가 질문을 이해했다면...... 이런 방법이 있습니다. child form의 close event에 아래와 같이 코딩...
    • 김형선
    • 2000.03.10 06:16
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Castle Road
      2000.03.10 18:11
      김형선 wrote: > > 파일을 복사하는데 그 과정을 보여주고 싶은데요... > > progressbar에 나타내고 ...
    • 참신
    • 2000.03.10 05:38
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 김진호
    • 2000.03.10 04:14
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2000.03.10 05:09
      김진호 wrote: > 안녕 하십니까... > 메모 컨트롤의 글자색을 원하는데로 고치는 방법을 알고 싶습니다.....
    • 하얀까마귀
      2000.03.10 18:41
      안녕하세요 하얀까마귀 입니다. 출력에서 출력범위를 지정하는건 Qreport의 프린트 Setup버튼이 있죠?? 여...
    • 강인규
      2000.03.10 05:24
      2.0k로 패치하세요. 손인호 wrote: > 안녕하세요? > 델파이 3.0 사용자입니다. > 스트링그리드의 내...
    • 이재식
      2000.03.10 05:07
      손인호 wrote: > 안녕하세요? > 델파이 3.0 사용자입니다. > 스트링그리드의 내용을 미리보기로 보고 프...
    • 우민하
    • 2000.03.10 02:51
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 조규춘
      2000.03.10 20:33
      우민하 wrote: > 안녕하세요!! > > 인스톨 쉴드에서 다른건 다 되는데여 인스톨을 마친후 외부프로프로...
    • chobo
    • 2000.03.10 02:41
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 김정선
      2000.03.10 14:32
      이러면 어떠하실지... with Query1 do begin Close; SQL.Clear; SQL.Add('SELECT TBLNAME FR...
    • 김주석
      2000.03.10 03:06
      chobo wrote: > table에서 like를 사용하여 조건에 맞는 값들을 모두 불러 오고자 합니다. > 그래...
    • chobo
      2000.03.10 03:42
      그렇게 next를 주어도, 결국은 제일 처음 값 하나만 보여주게 된답니다.헉~ 김주석 wrote: > chobo ...
    • 손인호
      2000.03.10 04:18
      chobo wrote: > 그렇게 next를 주어도, > 결국은 제일 처음 값 하나만 보여주게 된답니다.헉~ > > >...
    • Paddy
      2000.03.10 21:33
      천진 wrote: > 델초보지만 운영을 맡게 되었습니다. > 그런데, NT서버상 문제가 발생하는 군요. 도움이 ...
    • 구창민
      2000.03.10 02:47
    • 이상학
      2000.03.10 05:07
    • 최용일
      2000.03.10 06:08
    • 이상학
      2000.03.10 21:15
    • 최용일
      2000.03.14 07:02
    • 이상학
      2000.03.11 02:33
    • 최용일
      2000.03.11 02:46
    • • • •
    • 종이학
      2000.03.10 01:55
      착한악마 wrote: > 안녕하세요~~ > 질문은 다름이 아니라....SQL문에서 SELECT하면 약 100개의 열이 나타...
    • 까앙패
    • 2000.03.10 00:56
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 자유인
      2000.03.11 23:05
      까앙패 wrote: > 안녕하세요. > > 저만 그런지 모르겠는데, popupmenu를 사용하면, > > 만약에 아...
    • 최용일
      2000.03.10 01:28
      한번 Delphi 5패치를 깔아보시는것이 어떠실지... 까앙패 wrote: > 안녕하세요. > > 저만 그런지 모...
    • 정연
    • 2000.03.10 00:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.10 01:33
      VK_RETURN입니다. 다른 키값도 windows유닛에 있으니 참조하시길... 엔터키가 들어오면 SetFocus를 이용하...
    • 2000.03.10 00:10
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 종이학
      2000.03.10 02:02
      진 wrote: > dbgrid에 일단 query로 값을 뿌린 후에요 그건 그대로 유지하면서 다시 row를 추가시킬때 말...