안녕하세요 메르세데스입니다.   델파이개발자이고요...


Frame이라는것에 대해 정리해보려고 합니다.


이것은.. 제가 생각할때에는..    visual적인 코드재사용도구?  라고 생각합니다.    


물론 function,procedure를 이용하여 반복적이고 빈번한 코딩의 번거로움을 줄일 수 있으나..     동일한 기능을 하는 버튼을 수십~수백개가 되는 폼에다가 붙어 넣거나 기존의 것을 변경하고자 할 때 정말 유용하게 사용할 수 있습니다.


delphi-Frames


위치는 프로그램의 제일 첫번째.. 그것도 가장 기본중에 기본인 Standard에 있습니다.    참고로 델파이6입니다;;


하지만.. 제가 유지보수하고 있는 소스에는.. 아쉽게도 Frames를 이용하여 처리한 내용이 없더라고요..


그렇다보니 자연스레.. 사용을 안하게 되고  어떤 기능을 하는지에 대해 대략적인 감만있을 뿐입니다.


이번에 기회가되어.. 많지는 않지만.. 프로그램당.. 폼이 50개즘되고..  3개가 있으니까.. 150여개가 되는 폼에 버튼을 하나 올리는 작업을 하는도중 거의 마무리가 되어갈때 즘.. 왜 이런것을 해야하는지 의문이 들더군요...;;   (일찍좀 생각했으면 좋았으련만..)


그래도 나름대로 함수로만들어서  코딩양을 줄여보았지만..   버튼을 달고 그곳의 클릭이벤트에 함수를 호출하는 구문을 집어넣는 작업은 뺄수 없습니다.


이 때 이것을 이용한다면 매우 효율적입니다. 적용한 것을 만족하고 있습니다.


1.프레임 생성하기

  -> New->Frame에 있습니다.     UI는 다르겠지만..

     *컴포넌트에 있는것을 끌어다 폼위에 올리려고하면 create하라고 합니다.



delphi create frame


살펴보면.. 일반폼과 다르게  TFrame에서 생성된 것을 확인하실 수 있습니다.


프레임의 생성



2.만들어진 프레임을 적용하기..


이제 원하는 폼에 올려보려고 클릭하면.. 아래처럼 창이 떠서 집어넣을 수 있는 Frame이 무엇이 있는지 알려줍니다.


frame집어넣기


나중에는 올려져 있는 것을 복사해서 붙여 넣으면 됩니다.



3.프레임 구현하기


소스창으로 돌아가서..  만들어놓은 Frame에 원하는 버튼이나 기능을 구현하시면 됩니다.


근데 중요한 것은.. 델파이도 객체지향 언어이기 때문에  (sender) 라는 연결고리를 통해서 정보를 잘 끌어와 동적으로 처리를 한다면..  반복적인 코딩의 문제를 어느정도 해결할 수 있습니다.


이런문제를 아래처럼.. 조금 고민을 했습니다.



예를든다면.. 이렇습니다.


A,B,C,D,E,F,G 라는 폼에  FR이라는 이름의 프레임을 올렸습니다.  



프레임 예제




공통적으로 모든폼에 aaa.txt라는 텍스트가 있다고 해보세요.. key가 되는 중요한 정보라고 가정할 때


FR-Frame의 입장에서는... 과연 aaa.txt가 대체 어느폼 위에 있는것인지 궁금하겠죠. 그게 아니면... aaa.txt 안에 무슨값이 들어있지? 이런걸 알아낼 수 있다면.. 쉽게 반복적인 문제를 풀어갈 수 있습니다.



버튼의 예를 든다면...  그 버튼을 눌렀을 때 (sender)라는 전달자를 이용해서..  그 부모가 누구인지를 알아낼 수 있습니다.  GetParentComonent를 이용해서요..  그걸로 부족하다면.. 또 그 위의 부모도.. 그 위의부모도 또한 알아낼 수 있습니다.


그 이야기는 바꿔말하면.. 내가 작업중인 폼이 B라면.. 그 위에 올려져 있는 프레임으로 만들어진 버튼을 눌렀네요? 를 알아낼 수 있는이야기죠..


각 폼마다 frame이 올라갈 위치의 부모를 맞춰주시는게 중요합니다.



프레임속 버튼 구현 및 sender 활용


이렇게 완료하면..


작업중인 Form에 있는 Rz_pt_no라는 이름의 컴포넌트의 text값에 무엇이 들어있는지 알아낼 수 있습니다.


그걸.. 가져와 마치 함수의 parameter처럼 조건에 따라 내가 원하는 것을 할 수 있습니다.



사실 이정도라면...  이거 안써도..  각각의 폼위에 버튼올리는게 낫겠네! 하시는 분들도 있을겁니다.  하지만.. 또 하나의 장점은...


그냥 복사해서 붙여넣기만 하면 된다는 것입니다.  이벤트가 Frame내의..버튼에 구현을 해 놨다면.. 그걸 갔다 쓰는 폼에서는 올려놓을 적당한 위치만 있으면 됩니다.


조금만 응용한다면.. 조건에 따라 어느폼에서는 버튼이 보이게 또는 안보이게.. 할 수 있습니다.


버튼을 추가하거나 뺄 때는.. 관련된 프레임만 고치면.. 올려져있는 모든폼에 일괄적용되니.. 세상에서 가장 쉬운일 중에 하나게 될거고요.. ^^; 100개 200개씩 반복작업으로 부터 해방될 수 있습니다. 손가락도 덜아프겠죠..


부디 도움이 되셨으면 좋겠습니다. 감사합니다.










블로그 이미지

delphi개발자 메르세데쓰

C#,delphi,db,network,server,it 개발자 메르세데스입니다

Tag

댓글을 달아 주세요

  • 델파이뉴비 2017.02.27 15:53  댓글주소  수정/삭제  댓글쓰기

    안녕하세요.
    델파이를 공부하고있는 초보개발자입니다.
    좋은글 감사합니다.
    패널위에 폼2를 올린 것과 프레임의 차이가 뭔지 잘 모르겠습니다.
    바쁘시겠지만 답변해주시면 감사드리습니다.

    • Favicon of https://alolomersedess.tistory.com BlogIcon delphi개발자 메르세데쓰 2017.02.27 18:48 신고  댓글주소  수정/삭제

      답변드립니다.
      패널위에 폼을 올리는게 쉽지는 않으실 거라 생각합니다. 물론 방법이 없는것은 아니지만.. 런타임시 올라가게됩니다.

      프레임은 폼위에 쉽게 올릴 수 있습니다. 그냥 프레임형식으로 만들어진 패널이라고 이해하시면 되겠습니다. 개발시에 폼안에 불려온 프레임이 보이기 때문에 직관적이며 많은 코딩이 필요없습니다.

      프레임과 폼의 기능상의 큰 차이는 없습니다. 구조적인 태생 이외엔 말이죠..

      하지만 제가 생각하기엔 폼을 패널안으로 집어넣는게 쉽지 않고, 이렇게 만들어진 코드를 쉽게 재사용을 위해 태어난게 프레임이 아닌가 생각합니다.