Q&A

  • 정말 안되는뎅.........호출폼에 값되돌리기....????
밑에 질문(10576)을 했었는데 다른 답변을 하셔셔 이렇게 다시 올립니다...

답변해주신분은 폼이 CREATE되어있느냐 아니냐를 아는 방법을 말씀하셨는데요..

그게 아니라

만약 '폼1','폼2','폼3' 이 있다면 '폼1'에서 버튼을 눌러서 '폼3'을 생성시키면

'폼3'의 EDIT박스의 값이 '폼1'의 EDIT박스로 넘어가고 '폼2'에서 버튼을 눌러서 '폼3'을 생성시키면 '폼3'의 EDIT박스의 값이 '폼2'의 EDIT박스로 넘어가고 이런거거든요..

쉽게 말하면 '폼3'을 생성시킨 폼을 어떻게 아느냐 하는겁니다.......

선배고수님들...부디 절 버리지 말아주세요...흑흑...



(최용일님이 말씀하신데로는 정말로 폼의 기본속성(caption,width등등)은 변화가 되는데 폼안의 컴포넌트의 값(예를 들어 Editbox.text)변화가 되지 않읍니다.....)



참 또 한가지있는데...create(self)와 create(application)의 차이가 뭔지요....



7  COMMENTS
  • Profile
    임형호 2000.03.24 21:01
    델초 wrote:

    > 밑에 질문(10576)을 했었는데 다른 답변을 하셔셔 이렇게 다시 올립니다...

    > 답변해주신분은 폼이 CREATE되어있느냐 아니냐를 아는 방법을 말씀하셨는데요..

    > 그게 아니라

    > 만약 '폼1','폼2','폼3' 이 있다면 '폼1'에서 버튼을 눌러서 '폼3'을 생성시키면

    > '폼3'의 EDIT박스의 값이 '폼1'의 EDIT박스로 넘어가고 '폼2'에서 버튼을 눌러서 '폼3'을 생성시키면 '폼3'의 EDIT박스의 값이 '폼2'의 EDIT박스로 넘어가고 이런거거든요..

    > 쉽게 말하면 '폼3'을 생성시킨 폼을 어떻게 아느냐 하는겁니다.......

    > 선배고수님들...부디 절 버리지 말아주세요...흑흑...

    >

    > (최용일님이 말씀하신데로는 정말로 폼의 기본속성(caption,width등등)은 변화가 되는데 폼안의 컴포넌트의 값(예를 들어 Editbox.text)변화가 되지 않읍니다.....)

    >

    > 참 또 한가지있는데...create(self)와 create(application)의 차이가 뭔지요....

    >



    음... 이렇게 해 보시면 어떨까요..

    form1이나 form2에서 form3를 호출할때 showmodal로 호출을 하는겁니다.



    form3을 생성시키는 이벤트에 이렇게 기입을 합니다.

    물론 form3을 생성시킬 form의 uses 절에 생성시킬 폼의 unit을 연결해야 됩니다.



    application.createform(Tform2,form2);

    form2.ShowModal;

    edit1.text:=form2.Edit1.text;



    위와 같이 하는 경우 form2가 modalform으로 생성되고 종료시에 form2의 edit1의 text를 호출한 폼의 edit의 text값으로 변경되게 합니다.

    form3의 close 이벤트에는 그냥 action:=cafree; 로 메모리 해제만 시키면 됩니다.

    따로 처리할 사항은 없습니다.



  • Profile
    최용일 2000.03.24 20:34
    create(self)와 create(application)의 차이는 폼의 주인이 누구인가를 정하

    는 것밖에 없습니다. Self를 넣으면 생성된 폼의 주인은 그 폼을 생성한 컴

    포넌트가 될것이고 Application을 넣으면 생성된 폼의 주인은 메인 프로그램

    이 됩니다.



    폼3를 생성하실때 Create(Self)로 생성하세요. 그럼 폼3의 Owner속성에 이폼을

    생성한 폼이 들어 가니까요...(폼1이거나 폼2이겠죠)



    그리고 폼의 Caption, Width등이 변하는데 폼안의 컴포넌트 속성이 변하지 않

    는다는 것은 말이 안되는데요.. 컴포넌트 속성이 읽기전용인것은 아닐테니까요



    소스를 보여주실 수 있나요? 그렇다면 더 쉽게 알려줄수 있겠는데...

    뭐 중요한 소스면 관두시구요...



    델초 wrote:

    > 밑에 질문(10576)을 했었는데 다른 답변을 하셔셔 이렇게 다시 올립니다...

    > 답변해주신분은 폼이 CREATE되어있느냐 아니냐를 아는 방법을 말씀하셨는데요..

    > 그게 아니라

    > 만약 '폼1','폼2','폼3' 이 있다면 '폼1'에서 버튼을 눌러서 '폼3'을 생성시키면

    > '폼3'의 EDIT박스의 값이 '폼1'의 EDIT박스로 넘어가고 '폼2'에서 버튼을 눌러서 '폼3'을 생성시키면 '폼3'의 EDIT박스의 값이 '폼2'의 EDIT박스로 넘어가고 이런거거든요..

    > 쉽게 말하면 '폼3'을 생성시킨 폼을 어떻게 아느냐 하는겁니다.......

    > 선배고수님들...부디 절 버리지 말아주세요...흑흑...

    >

    > (최용일님이 말씀하신데로는 정말로 폼의 기본속성(caption,width등등)은 변화가 되는데 폼안의 컴포넌트의 값(예를 들어 Editbox.text)변화가 되지 않읍니다.....)

    >

    > 참 또 한가지있는데...create(self)와 create(application)의 차이가 뭔지요....

    >

  • Profile
    델초... 2000.03.24 21:00
    예를 만들어봤읍니다.....새로해봐도 역시 안돼요...제가 어딘가 잘못한거 같은데.....

    폼1 소스(폼3을 호출하는 폼....

    implementation

    uses unit3,unit2;

    {$R *.DFM}



    procedure TForm1.Button1Click(Sender: TObject);

    begin

    Form3 := TForm3.Create(self);

    form3.callform := self;

    end;



    폼2의 소스(폼3을 호출하는 다른 폼......

    implementation

    uses unit3;

    {$R *.DFM}



    procedure TForm2.Button1Click(Sender: TObject);

    begin

    form3 := Tform3.create(self);

    form3.callform := self;

    end;



    폼3의 소스(호출되는 폼.....

    uses

    Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    StdCtrls;



    type

    TForm3 = class(TForm)

    Edit1: TEdit;

    Button1: TButton;



    procedure Button1Click(Sender: TObject);

    private

    { Private declarations }



    public

    { Public declarations }

    callform: TForm; //여기다 정의 하는거 맞나요?.....불안하다...

    end;



    var

    Form3: TForm3;

    implementation

    uses unit1,unit2;

    {$R *.DFM}



    procedure TForm3.Button1Click(Sender: TObject);

    begin

    callform.edit1.text := edit1.text;

    end;



    이런식으로 했거든요... 참....이폼들은 모두 MDI의 child폼들입니다.....

    이렇게 하면 Form3의 button1click함수에서 edit1이 정의되지 않았다고 합니다...

    분명히 edit1이란 이름의 editbox가 폼1,폼2,폼3에 다 있읍니다...

    귀찮으시죠>? 죄송합니다....



  • Profile
    최용일 2000.03.24 21:21
    네 역시 안됩니다. 그렇게 하시면...



    Form3.CallForm이 TForm형인데 그안에 Edit1이란 컴포넌트가 있을리 없죠...



    그럴땐 이름으로 컨트롤을 찾아야 합니다. 그리고 Owner속성에 Self를 넣으

    신다면 CallForm이란 변수를 쓰지 않으셔도 됩니다.( 즉 Create(Self)로 생성... )



    다음과 같이 해보세요..



    procedure TForm3.Button1Click(Sender: TObject);

    var

    MyEdit: TEdit;

    begin

    // Owner에 Self가 아닌 Application을 사용하시면 CallForm이란 변수가 필요하겠죠...

    // 그럴땐 MyEdit := TEdit(TForm(CallForm).FindChildControl('Edit1')); 이렇게...

    MyEdit := TEdit(TForm(Owner).FindChildControl('Edit1'));

    MyEdit.Text := Edit1.Text;

    end;



    폼1과 폼2에 Edit1이란 에디트박스가 반드시 있어야 됩니다.

    안되시면 또 질문하세요...



    델초... wrote:

    > 예를 만들어봤읍니다.....새로해봐도 역시 안돼요...제가 어딘가 잘못한거 같은데.....

    > 폼1 소스(폼3을 호출하는 폼....

    > implementation

    > uses unit3,unit2;

    > {$R *.DFM}

    >

    > procedure TForm1.Button1Click(Sender: TObject);

    > begin

    > Form3 := TForm3.Create(self);

    > form3.callform := self;

    > end;

    >

    > 폼2의 소스(폼3을 호출하는 다른 폼......

    > implementation

    > uses unit3;

    > {$R *.DFM}

    >

    > procedure TForm2.Button1Click(Sender: TObject);

    > begin

    > form3 := Tform3.create(self);

    > form3.callform := self;

    > end;

    >

    > 폼3의 소스(호출되는 폼.....

    > uses

    > Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

    > StdCtrls;

    >

    > type

    > TForm3 = class(TForm)

    > Edit1: TEdit;

    > Button1: TButton;

    >

    > procedure Button1Click(Sender: TObject);

    > private

    > { Private declarations }

    >

    > public

    > { Public declarations }

    > callform: TForm; //여기다 정의 하는거 맞나요?.....불안하다...

    > end;

    >

    > var

    > Form3: TForm3;

    > implementation

    > uses unit1,unit2;

    > {$R *.DFM}

    >

    > procedure TForm3.Button1Click(Sender: TObject);

    > begin

    > callform.edit1.text := edit1.text;

    > end;

    >

    > 이런식으로 했거든요... 참....이폼들은 모두 MDI의 child폼들입니다.....

    > 이렇게 하면 Form3의 button1click함수에서 edit1이 정의되지 않았다고 합니다...

    > 분명히 edit1이란 이름의 editbox가 폼1,폼2,폼3에 다 있읍니다...

    > 귀찮으시죠>? 죄송합니다....

    >

  • Profile
    하얀까마귀 2000.03.24 20:50
    안녕하세요 하얀까마귀 입니다....



    정말 오랜만에 답변 올리는것 같네요...





    최용일님이 말씀하신 것처럼 하시면 자신(폼3)을 생성시킨 폼을 알수 있으니까



    어떤식으로든 원하시는 값을 넘겨 줄수 있겠죠????



    전 조금 다른 말씀 드릴려구 하는데... 설명을 보니까 폼3가 아마 어떤 값을 가져오거나



    계산 등등을 위한 폼 같은데 맞는지요....



    예를 들면 우편번호 찾기 같은 폼요... 어떤 폼에서든 동을 치면 우편번호를 찾아오는



    루틴을 실행하는 그런 폼이라면 (이런걸 주로 많이 쓰니까..) 꼭 폼3에서 폼2로 값을



    넘기는 코딩을 폼3가 아닌 폼2에서 해도 상관 없겠죠....



    물론 어떻게 하느냐는 델초님이 판단하실 문제지만......

    ----------------



    이런 폼의 경우는 ShowModal로 폼을 띄우게 됩니다. 우편번호를 찾는도중에 다른작업이



    전혀 필요 없으니까...

    try

    폼3 := T폼3.create(self);

    폼3.ShowModal;

    finally

    폼3.Free;

    Edit.Text := 폼3.Edit.Text;

    end;



    이런식으로 폼2또는 폼1에 코딩을 하면 값을 넘겨 받을수 있잖아요...



    아 그리고 폼을 생성할때 self와 application의 차이는 주인이 폼이냐 아니냐 하는



    겁니다....



    application이 되면 이건 메인폼과 같은 역활을 하게 되고... 이런 경우에 이 폼의



    free는 프로그래머의 몫이 됩니다... nil의 경우도 마찬가지 입니다...



    nil의 경우 프로그램을 종료하여도 메모리에 남아있을수 있으니 반드시 없애주어야 합



    니다.. 하지만 self와 같이 어떤 특정 폼 또는 그것의 부모를 지정해 주면 그 부모가



    사라질때 같이 없애 줍니다...



    폼이 사라지면 에디트 들도 같이 사라지는게 이것 때문 입니다.... 따라서 폼을 생성할



    때 폼3의 부모를 폼2라고 두셧으면 폼2를 종료해 버리면 폼3또한 같이 없어져 버립니다.



    음... 적어놓고 보니 좀 말이 길어 졌네요.... 별 내용도 없는데....



    아직 약기운 때문에 헤롱헤롱 하네요...



    그럼.. 즐거운 시간 되세요...



    - 하얀까마귀 -







  • Profile
    최용일 2000.03.24 20:56
    헐헐헐... 하얀까마귀님도 저처럼 감기에 걸리셨나보군요... 요즘 감기에



    걸려서 고생하시는 분이 부쩍 늘었습니다. 빠른 쾌유를 빌겠습니다....

  • Profile
    하얀까마귀 2000.03.24 22:11
    그럼.. 최용일님두??? 후후.. 이번 독감 무척 독하네요..... 체력에는 자신이 있는데



    이번 감기로 앓아 누웠을 정도니까요... 흑흑... 최용일님두... 빨리 나으시길....



    • 김문신
    • 2000.03.25 00:58
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이재식
      2000.03.25 01:47
      이재식 Wrote : 안녕하세요? 델파이 관련 출력물 컴포넌트에는 여러가지 있습니다. 크리스탈, 퀵(번들...
    • 하얀까마귀
      2000.03.25 04:06
      안녕하세요 하얀까마귀 입니다... 전반적으로 전 이재식님의 말씀에 동감을 합니다.. 아직 퀵으로 해서 ...
    • 때밀이
    • 2000.03.25 00:53
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 지나가다
      2000.03.30 22:54
      때밀이 wrote: > 예를들어 unix에는 a.sh라는 script가 있고... > 델로 만든 application에서 이 a.sh를 ...
    • 돌맹이
    • 2000.03.25 00:28
    • 1 COMMENTS
    • /
    • 0 LIKES
    • HART
      2000.03.25 02:11
      오라클에서는 아래와 같은 방법으로 해결할 수 있습니다. 다른 디비도 비슷한 방법이 있는지는 잘못라요....
    • 류종택
      2000.03.25 03:58
      Action 이름 대신 화일이름을 지정, Action은 Default:= True로 되어 있어야함.. 그 뒤의 파라메터도 적용...
    • 델초보
    • 2000.03.24 23:41
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.25 02:12
      다음과 같이 이름으로 검사해서 만일 있다면 Show메소드를 이용하여 그 폼을 띄우시면 됩니다. procedu...
    • 최미현
      2000.03.25 01:47
      우선 답변고맙습니다. 근데요..이미 생성되어 있는 폼이 아니라 버튼을 눌렀을때 생성까지 같이 하려면...
    • 최용일
      2000.03.25 03:37
      헐헐헐... 좀 상당히 이상한 걸 하시네요...... 자동생성을 안하셨고 단지 이름만안다.... 허허허... ...
    • hee
    • 2000.03.24 23:05
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 이준해
      2000.03.25 04:10
      폼간에 데이터 교환방법중엔 이런것도 있습니다. 델파이가 Object pascal 기반이니깐, oop 적인 방법을 사...
    • 강인규
      2000.03.25 00:29
      요즘 폼간의 데이터교환이 유행이군요. 아래만 보셔도 알 수 있을텐데....(쩝~); 어느 학교에서 내준 레포...
    • 최용일
      2000.03.25 00:35
      다음과 같이 넣고싶은 값을 항상하던대로 넣어주시면 됩니다. 단지 앞에다 새로 생성된 폼에다 넣으라는것...
    • my
    • 2000.03.24 22:49
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 윤석태
      2000.03.24 23:24
      안녕하세요.. 질문하신 내용을 잘 모르겠네요... 어떤부분이 문제가 되는지를 자세하게 알려주시면 다...
    • 느티나무
      2000.03.24 23:46
      느티나무 wrote: 어디가 문제인지요 한글이 깨져서 나타납니까? = 레지스트리의 NLS_LANG 를 바꾸시...
    • 미정
      2000.05.03 06:39
      느티나무 wrote: > 느티나무 wrote: > 어디가 문제인지요 > 한글이 깨져서 나타납니까? > = 레지스...
    • 최용일
      2000.03.24 22:32
      폼의 OnCloseQuery, OnClose, OnDestroy이벤트중의 하나에서 필요에 맞게하세요... OnCloseQuery에서 하신...
    • 하얀까마귀
      2000.03.24 22:07
      안녕하세요 하얀까마귀 입니다.. 뭐가를 실행한다구요??? 무얼 실행하신다는건지는 모르겠지만...... ...
    • 이수정
      2000.03.24 22:29
      감사합니다..
    • 김종호
    • 2000.03.24 21:12
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 류종택
      2000.03.25 03:05
      아래와 같이 해보세요.. From 류.. --------- Function GetHTTP(URL:String):String; Begin ...
    • 박성훈
    • 2000.03.24 21:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 백록화
      2000.03.24 22:07
      yo~ ^^*^~ 안녕하세요! mySql 은 공개가 아니고, 쉐워 로 알고 있는데.... 상업적으로 사용할려면 ...
    • 델초
    • 2000.03.24 20:25
    • 7 COMMENTS
    • /
    • 0 LIKES
    • 임형호
      2000.03.24 21:01
      델초 wrote: > 밑에 질문(10576)을 했었는데 다른 답변을 하셔셔 이렇게 다시 올립니다... > 답변해주신...
    • 최용일
      2000.03.24 20:34
      create(self)와 create(application)의 차이는 폼의 주인이 누구인가를 정하 는 것밖에 없습니다. Self를 ...
    • 델초...
      2000.03.24 21:00
      예를 만들어봤읍니다.....새로해봐도 역시 안돼요...제가 어딘가 잘못한거 같은데..... 폼1 소스(폼3을 호...
    • 최용일
      2000.03.24 21:21
      네 역시 안됩니다. 그렇게 하시면... Form3.CallForm이 TForm형인데 그안에 Edit1이란 컴포넌트가 있을...
    • 하얀까마귀
      2000.03.24 20:50
      안녕하세요 하얀까마귀 입니다.... 정말 오랜만에 답변 올리는것 같네요... 최용일님이 말씀하신 ...
    • 최용일
      2000.03.24 20:56
      헐헐헐... 하얀까마귀님도 저처럼 감기에 걸리셨나보군요... 요즘 감기에 걸려서 고생하시는 분이 부쩍 ...
    • 하얀까마귀
      2000.03.24 22:11
      그럼.. 최용일님두??? 후후.. 이번 독감 무척 독하네요..... 체력에는 자신이 있는데 이번 감기로 앓아 ...
    • 손정현
    • 2000.03.24 20:09
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 하얀까마귀
      2000.03.24 21:03
      안녕하세요 하얀까마귀 입니다... 그리드에서 지금 말씀하신건 안되구요... DBGrid는 DAtaSource연결 외...
    • 김철환
    • 2000.03.24 20:04
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2000.03.24 20:52
      이곳에 ( http://www.easycash.co.at/comppage.htm )가보시면 백업/리스토어 컴포넌트가 있습니다. 오픈소...
    • 강인규
      2000.03.24 20:19
      이게 답변인지 모르겠습니다. 캐쉬드업데이트를 사용한 예제입니다. 일단 테이블의 CachedUpdate속성을...
    • 윤석태
      2000.03.24 23:15
      인규님 답변 감사합니다. 그런데 답변 내용을 참고해보니 제가 하려는 것과는 좀 틀린 것 같아서요.. 또...
    • 까마귀
      2000.03.26 02:26
      윤석태 wrote: > 인규님 답변 감사합니다. > > 그런데 답변 내용을 참고해보니 제가 하려는 것과는 좀 ...
    • 델파이
    • 2000.03.24 16:33
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 황명하
      2000.03.24 17:41
      물론 있지요. 그러나 프로그램 logic상 권장할 만한건 아닙니다. basic 프로그램을 해보셨나요? "goto...