Q&A

  • 폼생성에 관한 질문
먼저 라벤더님 관심을 가져주셔서 감사합니다 ^^

제 설명이 부족하여 요지를 알수 없다 하셔서 다시 질문합니당~


폼 사용 방법에 관한 것인데요.(아마도;;;)

HTML 에 비교하면

Frame 으로 상단 하단을 분리하여, 상단은 메뉴. 하단은 메인

이런 느낌으로 프로그래밍 하고 싶습니다.


그래서 제가 메뉴는 두개 (입력,조회) 를 만들었구요.

폼도 두개 필요할꺼 같아서 두개를 만들었습니다.


메뉴는 MenuItem 컴포넌트를 이용하였습니다.

이제 '입력'을 누르면 폼이 하나 생기고

'조회'를 누르면 또 다른 폼이 생기게만 하면 되는데...

이부분을 모르겠습니다.


'입력' 폼을 눌렀을때 조회폼이 닫히고

반대의 경우도 마찬가지 일텐데...


폼이 열리고 닫히는 방법도 어렵구...

폼이 닫힐때...기존의 메인메뉴는 어떻게 처리하여야 되는지...;;;

"하나의 화면에서 작업하는 느낌"으로 될지 궁금합니다.


HTML 도 frame 을 나누면 메뉴를 누를때마다, 불려오는 html 파일은 다르지만

하나의 화면에서 생겼다가 없어졌다가 하잖아요^^;



아...내 생각이 충분히 적혀있는지 모르겠습니다.

알고보면 간단한데..글로 적으니까 힘드네요^^;



그럼 즐거운하루되세요~


//////////////////////////////// 기존의 질문 ////////////////////////////
안녕하세요.

질문의 요지를 정확히.. 알 수 없군요..

폼끼리 정보를 교환하는게 필요하다는 건지요?



>안녕하세요.
>
>얼마전에 공부하기 시작하여, 열심히 하고 있는 초보입니다^^;
>
>델파이 관련 책을 수권이나 빌려서 공부하고 있지만...모르는 점이 너무 많네요..ㅠㅠ
>
>
>폼생성에 관한 질문인데요.
>
>예를 들어 가계부를 만드는데..
>
>MenuItem 컴포넌트를 이용하여
>
>'입력' '조회' 두가지의 폼이 필요하다면..
>
>어떤식으로 폼을 처리해줘야 하는지 모르겠습니다.
>
>열심히 책을 뒤져본 결과 formname.show 라는것을 사용해보니
>
>하나의 폼이 더 생성되버리고...
>
>에..또..그러니까 저는
>
>하나의 폼에서 작업하는 것같은 환경을....만들고 싶거든요~
>
>제 생각에는...formname.show 를 이용하여 하나 생성한후에
>
>하나는 닫아주면 될 줄 알았는데.....그게 마음대로 안되더군요;;;
>
>거기다가 또, 생성된 폼에는 메인메뉴도 복사해야 되는 문제가???
>
>
>그럼 괜찮으시다면 조언부탁드리겠습니다.
>
>즐거운하루되세요`~
>
>

4  COMMENTS
  • Profile
    조현태 2005.04.04 21:25
    이중철 , 라벤더 , Crazy™ 님 답변감사합니다.

    델파이 공부에 많은 도움이 되었습니다^^
  • Profile
    이중철 2005.04.04 20:38
    님이 하고자 하는 방식은 실제로 많이 쓰는 방식입니다.

    이 방식은 코드의 재사용과 소스자체의 분리를 도모할 수 있죠

    제가 10년전에 했던 프로젝트를 기초로 말씀 드리겠습니다. 그때는 VB와 API로 구성했지만..

    메인의 구성을 보겠습니다.

    |    MENUS .....................................
    --------------------------------------------
    |    TOOL BAR & TOOL BUTTONS
    --------------------------------------------
    |
    |     COMMON BASE FORM(Panel로 구성)
    |
    --------------------------------------------
    |
    |
    |     SUB VIEW FORM(Panel로 구성)
    |
    ---------------------------------------------
    |    STATUS BAR
    ---------------------------------------------


    COMMON BASE FORM 은 SUB VIEW FORM 과 함께 공통적으로 보는 폼이겠죠
    SUB VIEW FORM은 메뉴 클릭시 스위칭되는 폼입니다.


    COMMON BASE FORM의 해당하는 부분는 PANEL로 구성하고요(TOPPANEL 로 정함)
    SUB VIEW FORM도 PANEL로 구성합니다.(SUBPANEL 로 정함)


    그럼 실제 스위칭은 어떻게 할까요 ?

    이 SUBPANEL로만 기초에서 서술

    버튼 클릭시 로직은
      조회버튼 클릭
         1. SUBPANEL 에 이미 오픈되어 있는 폼 삭제
         2. 조회폼 오픈하여 SUBPANEL 에 귀속
      입력버튼 클릭
         1. SUBPANEL 에 이미 오픈되어 있는 폼 삭제
         2. 입력폼 오픈하여 SUBPANEL 에 귀속
       ........


    이경우 메인폼에 기본적으로 있어야 Function은 두가지 입니다.
    바로 삭제와 귀속이죠

    [미리 알아야 할 상식]
      Control들은 ChildControl을 가질 수 있다.
      TForm에서 상속된 폼들은 is TFORM 하면 모두 TRUE 이다.
      <- 이거 몰라서 노가다 하시는 분 많아요 일일히 정의된 폼클래스 다 집어넣고 .. ㅋㅋ ->

    Procedure TFmMain.ClearFormOfPannel(TargetPanel : TPanel);
    var i : integer;
    begin
       For i := 0 to TargetPanel.ControlCount - 1 do
         if TargetPanel.Controls[i] is TFORM then
           TFORM(TargetPanel.Controls[i]).Close;
    end;    

    Procedure TFmMain.OpenFormOfPannel(TargetPanel : TPanel; SourceForm : TFORM);
    begin
      SourceForm.BorderStyle := bsNone;   // 캡션을 없앤다.
      SourceForm.Align := AlClient; // 부모의 영역에 꽉 채운다.(이거 말고 Windowstate 를 바꾸어도 상관없음)
      SourceForm.Parent := TargetPanel;
      TargetPanel.Show;
    end;    


    그럼 실제버튼 클릭시 어떻게 쓸까
    조회예)
    Procedure TFmMain.BtnSearchClick(Sener : TObject);
    begin
      ClearFormOfPannel(SUBPANEL);  // 들어갈 패널을 클리어 한다.
      OpenFormOfPannel(SUBPANEL, TFMSearch.Create(Self));
    end;
    입력예)
    Procedure TFmMain.BtnSearchClick(Sener : TObject);
    begin
      ClearFormOfPannel(SUBPANEL);  // 들어갈 패널을 클리어 한다.
      OpenFormOfPannel(SUBPANEL, TFMInsert.Create(Self));
    end;


    어느정도 설명이 되었는지 모르겠네요(따로 테스트는 안해 보았지만 되겠죠)
  • Profile
    라벤더 2005.04.04 19:47



    안녕하세요 ^^

    님 생각 충분히 알았구요 ^-^ ;

    근데.. 아무래도 폼을 두 개 생성하는 것 보다는

    Panel을 사용하는 것이 쉬울 듯 하네요-

    메뉴 Change에 이벤트를 걸어서

    Panel 두 개에 대한 Visible속성을 바꿔주면 되겠죠 -

    그럼 즐코하세요~
  • Profile
    Crazy™ 2005.04.04 19:01
    안녕하세요.
    결정은 님이 하시겠지만 제 생각으론 폼을 왜 2개를 만들어서 할까??라는 의문이 듭니당...
    여튼 머..
    방법은 많을것 같습니다.
    폼2개모두 mdi 로 하시고 메뉴클릭 이벤트에서 폼 사이즈와 위치만 처리하면 되겠죠...

    <!--CodeS-->
    procedure TForm1.Button1Click( sender : TObject );
    begin
            if FindForm('from3' ) then
            begin
                     Form3.Close;
            end;
            Form2 := TForm2.Create( Application );
            Form2.Show;
    end;

    function TForm1.FindForm(const ActForm: string): Boolean;
    var
      I: Integer;
    begin
      Result := False;
      for I := 0 to MDIChildCount - 1 do
        if UpperCase( MDIChildren[I].Name ) = UpperCase( ActForm ) then
        begin
          Result := True;
          Break;
        end;
    end;
    <!--CodeE-->
    개인적인 생각인데..글쎄요 저라면 판때기를 이용하거나 스플리터를 이용하는게..낫지 않을까 합니다
    즐프하세욤.


    • 단아
    • 2005.04.05 07:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김경우
      2005.04.06 19:34
      일단 질문하신 내용에서 레이블은 스크롤 기능을 지원하지 않습니다. 굳이 하셔야 한다면 레이블 컴포넌...
    • 이종택
    • 2005.04.05 05:13
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김병윤
      2005.04.05 05:32
      <!--CodeS--> SQL.Text := 'update main_table set   f1='''+Edit2.text+''' where f2='+...
    • 이종택
      2005.04.05 05:39
      답글 고맙습니다.. 그런데 여기서 만약에 f2필드가 정수형이어서 문제이거든요.. 어케 처리를 할까요? ...
    • 김병윤
      2005.04.05 06:18
      정수형이라서 이렇게 쓴거에요....f2필드 <!--CodeS--> SQL.Text := 'update main_table set ...
    • 가딘
    • 2005.04.05 00:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이재봉
      2005.04.05 04:13
      if Assigned(BROWA) and (CUSGSList <> nil) begin   BROWA.CUSGSList.Add(PCUSRecord);...
    • 가딘
      2005.04.05 04:38
      답변 감사하구요 모달폼인 browb의  값을 browa 폼의 tlist 로 저장을 할려고 하는데 님이 가...
    • 하나로
    • 2005.04.04 23:41
    • 1 COMMENTS
    • /
    • 0 LIKES
    • Crazy™
      2005.04.08 19:01
      소스 조금 수정하시면 될듯 싶네요.. 프린터 바꾸는 건데 기본프린터 바꾸셔셔 출력때리면 될듯 싶습니다....
    • 조현태
    • 2005.04.04 21:52
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 이수열
      2005.04.04 20:53
      커뮤니티 사이트에서 기초강의까지 하는건 한계가 있습니다. 일단 책 한권 사서 보시는게 제일 좋겠군요...
    • 이도훈
      2005.04.06 03:52
      친절한 답변 감사드립니다^^
    • Park JH
    • 2005.04.04 06:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 라벤더
      2005.04.04 18:38
      안녕하세요 ^-^ 저도 델파이를 시작한지 얼마 되지 않았지만 ;; 버전에 맞는 책을 한 권사서 ...
    • 조현태
    • 2005.04.03 22:22
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 혼자이고 싶어요
      2005.04.04 18:44
      파라독스 입력할때는 YYYY-MM-DD로 하면 되는데요 조회할때는 MM-DD-YYYY으로 해야 합니다...
    • Crazy™
      2005.04.04 18:25
      FindComponent, ComponentCount 로 검색해 보세요.
    • 조현태
    • 2005.04.03 05:10
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 조현태
      2005.04.04 21:25
      이중철 , 라벤더 , Crazy™ 님 답변감사합니다. 델파이 공부에 많은 도움이 되었습니다^^
    • 이중철
      2005.04.04 20:38
      님이 하고자 하는 방식은 실제로 많이 쓰는 방식입니다. 이 방식은 코드의 재사용과 소스자체의 분리를 ...
    • 라벤더
      2005.04.04 19:47
      안녕하세요 ^^ 님 생각 충분히 알았구요 ^-^ ; 근데.. 아무래도 폼을 두 개 생성하는 것 보다...
    • Crazy™
      2005.04.04 19:01
      안녕하세요. 결정은 님이 하시겠지만 제 생각으론 폼을 왜 2개를 만들어서 할까??라는 의문이 듭니당... ...
    • 이영주
    • 2005.04.03 02:39
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 델사랑
    • 2005.04.02 19:46
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 라벤더
      2005.04.02 20:48
      안녕하세요. DefaultMonitor는 폼이 나타날 모니터를 지정하는 것입니다. dmPrimary는 폼을 나...
    • 델사랑
      2005.04.02 21:45
      모니터 목록이라는게 어떻게 지정해 주죠? 제가 지금 모니터 2개를 연결하고 속성을 defalultmonitor속성...
    • 라벤더
      2005.04.02 22:39
      Forms에 보면 TMonitor라는 클래스가 있습니다. TScreen이 더 효육적이겠네요 ^-^ 자세한건 도움말...
    • 델사랑
      2005.04.02 23:33
      TMonitor.MonitorNum := 1; 이렇게 하니까 Read Only 속성이라고 나옵니다 도대체 어떻게 지정해 주어야 ...
    • 단아
    • 2005.04.02 05:15
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 라벤더
      2005.04.02 20:42
      안녕하세요 ^^ 일단 http://www.progdigy.com/modules.php?name=DSPack 여기서 DSPack 최신버전...
    • 라벤더
      2005.04.02 02:18
      안녕하세요. 그러니까..   'ListView에서 파일을 선택하고 버튼을 하나만들어 이벤트...
    • 델초보-arumi
      2005.04.02 02:25
      먼저두 답변주셨었는데...정말 감사합니다...꾸벅~ CopyFile을 하게 되면 ListView에 파일이 남아 있지 않...
    • 라벤더
      2005.04.02 02:36
      그렇다면 CopyFile과 DeleteFile을 함께 쓰면 되겠습니다. 혹은 더 간단하게 ShellApi에 있는 SHF...
    • 이종만
    • 2005.04.02 01:43
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 도끼로이마까
      2005.04.07 01:49
      델파이에서 dll을 작성한 후에 다른언어, 예를들면 비주얼 C++에서 가져다 쓰실 경우, 함수 호출 규약...
    • 권태훈
      2005.04.02 19:28
      115200 이상으로 작동해야되고 그렇게 연결되는 장비가 모가 있나요? 시리얼로 연결되는 장비중에 그리 ...
    • 이중철
      2005.04.04 19:39
      안녕하세요 이중철입니다. 어싱크프로 PAS화일만 수정하면 되겠더군요 옛날에도 그렇게 썼던것 같고 ...
    • 이중철
      2005.04.02 02:25
      3~4개월 같은 질문이 계속 올라오고 있네요 사실 Asyncpro 하나만 가지고는 어떻게 할 수 없을거에요 ...
    • 혼자이고 싶어요
      2005.04.02 01:29
      제목에 질문이라고 하시는 것이 좋을듯 하구요... in을 사용하면 됩니다. select * from table...
    • 버미천사
      2005.04.02 02:39
      혹시 TNotebook 컴포넌트를 있다면 동적 언어 변환이 안되는지 궁금한점이 더 생겼네요. 왜냐하면 지금 ...
    • 정경철
    • 2005.04.01 21:50
    • 0 COMMENTS
    • /
    • 0 LIKES