Q&A

  • [Q]프로시져 또는 함수 만들기
메뉴를 동적으로 생성해주고 각 메뉴를 클릭했을때 해당 폼이 뜨게하려고 합니다

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

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

.....

procedure FormCreate(Sender: TObject);

procedure EditClick(Sender: TObject);

procedure FileClick(Sender: TObject);

procedure CopyClick(Sender: TObject);



var

Form1: TForm1;

MainMenu1: TMainMenu;

....

procedure TForm1.FormCreate(Sender: TObject);

begin

.............

MainMenu1.Items[0][1].OnClick := EditClick;

MainMenu1.Items[0][2].OnClick := FileClick;

MainMenu1.Items[0][3].OnClick := CopyClick;

..............

end;



procedure TForm1.EditClick(Sender: TObject);

begin

Application.CreateForm(TForm2, Form2);

Form2.Show;

end;



procedure TForm1.FileClick(Sender: TObject);

begin

Application.CreateForm(TForm3, Form3);

Form3.Show;

end;



procedure TForm1.CopyClick(Sender: TObject);

begin

Application.CreateForm(TForm4, Form4);

Form4.Show;

end;



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

위와 같은 방법말구

procedure TForm1.FormCreate(Sender: TObject); 에서 파라미터를 넘기고

공통 프로시져나 함수를 콜하고



procedure TForm1.EditClick(Sender: TObject);

procedure TForm1.FileClick(Sender: TObject);

procedure TForm1.CopyClick(Sender: TObject); 는 하나의 프로시져(함수)로 만들면

좋은것 같은데요.....생각만 앞서니...어떻해야 하나요???

프로시져(함수)에서 파라미터 처리는 어떻게 해야하는지........



=<대충이런식으로 되면 좋을것 같은데.......===================================

type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

.....

procedure FormCreate(Sender: TObject);

procedure MenuClick(????);



var

Form1: TForm1;

MainMenu1: TMainMenu;

....

procedure TForm1.FormCreate(Sender: TObject);

begin

.............

MainMenu1.Items[0][1].OnClick := MenuClick(1); <====요기서 자꾸 에러가...

MainMenu1.Items[0][2].OnClick := MenuClick(2);

MainMenu1.Items[0][3].OnClick := MenuClick(3);

..............

end;



procedure TForm1.MenuClick(????);

begin

if ???? = 1 then begin

Application.CreateForm(TForm2, Form2);

Form2.Show;

end;



if ???? = 2 then begin

Application.CreateForm(TForm3, Form3);

Form3.Show;

end;



if ???? = 3 then begin

Application.CreateForm(TForm4, Form4);

Form4.Show;

end;



end;

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

불가능한가????

1  COMMENTS
  • Profile
    델맨 2001.06.27 20:29
    궁금이 wrote:

    > 메뉴를 동적으로 생성해주고 각 메뉴를 클릭했을때 해당 폼이 뜨게하려고 합니다

    > ============================================================

    > type

    > TForm1 = class(TForm)

    > MainMenu1: TMainMenu;

    > .....

    > procedure FormCreate(Sender: TObject);

    > procedure EditClick(Sender: TObject);

    > procedure FileClick(Sender: TObject);

    > procedure CopyClick(Sender: TObject);

    >

    > var

    > Form1: TForm1;

    > MainMenu1: TMainMenu;

    > ....

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    > .............

    > MainMenu1.Items[0][1].OnClick := EditClick;

    > MainMenu1.Items[0][2].OnClick := FileClick;

    > MainMenu1.Items[0][3].OnClick := CopyClick;

    > ..............

    > end;

    >

    > procedure TForm1.EditClick(Sender: TObject);

    > begin

    > Application.CreateForm(TForm2, Form2);

    > Form2.Show;

    > end;

    >

    > procedure TForm1.FileClick(Sender: TObject);

    > begin

    > Application.CreateForm(TForm3, Form3);

    > Form3.Show;

    > end;

    >

    > procedure TForm1.CopyClick(Sender: TObject);

    > begin

    > Application.CreateForm(TForm4, Form4);

    > Form4.Show;

    > end;

    >

    > ============================================================

    > 위와 같은 방법말구

    > procedure TForm1.FormCreate(Sender: TObject); 에서 파라미터를 넘기고

    > 공통 프로시져나 함수를 콜하고

    >

    > procedure TForm1.EditClick(Sender: TObject);

    > procedure TForm1.FileClick(Sender: TObject);

    > procedure TForm1.CopyClick(Sender: TObject); 는 하나의 프로시져(함수)로 만들면

    > 좋은것 같은데요.....생각만 앞서니...어떻해야 하나요???

    > 프로시져(함수)에서 파라미터 처리는 어떻게 해야하는지........

    >

    > =<대충이런식으로 되면 좋을것 같은데.......===================================

    > type

    > TForm1 = class(TForm)

    > MainMenu1: TMainMenu;

    > .....

    > procedure FormCreate(Sender: TObject);

    > procedure MenuClick(????);

    >

    > var

    > Form1: TForm1;

    > MainMenu1: TMainMenu;

    > ....

    > procedure TForm1.FormCreate(Sender: TObject);

    > begin

    > .............

    > MainMenu1.Items[0][1].OnClick := MenuClick(1); <====요기서 자꾸 에러가...

    > MainMenu1.Items[0][2].OnClick := MenuClick(2);

    > MainMenu1.Items[0][3].OnClick := MenuClick(3);

    > ..............

    > end;

    >

    > procedure TForm1.MenuClick(????);

    > begin

    > if ???? = 1 then begin

    > Application.CreateForm(TForm2, Form2);

    > Form2.Show;

    > end;

    >

    > if ???? = 2 then begin

    > Application.CreateForm(TForm3, Form3);

    > Form3.Show;

    > end;

    >

    > if ???? = 3 then begin

    > Application.CreateForm(TForm4, Form4);

    > Form4.Show;

    > end;

    >

    > end;

    > =========================================================

    > 불가능한가????



    OnClick에 넘겨줄수있는건 OnClick과 인자구조가 같은 메소드만 가능합니다.

    위에서 새로만든 MenuClick은 인자구조가 다르므로 사용할수 없습니다.



    여러 이벤트가 하나의 이벤트 메소드를 공유하고자 할때는 Sender를 활용해야 합니다.

    위소스를 수정해보면...



    procedure TForm1.FormCreate(Sender: TObject);

    begin

    .............

    MainMenu1.Items[0][1].OnClick := MenuClick;

    MainMenu1.Items[0][2].OnClick := MenuClick;

    MainMenu1.Items[0][3].OnClick := MenuClick;

    ..............

    end;



    procedure TForm1.MenuClick(Sender: TObject);

    begin

    if Sender = MainMenu1.Items[0][1] then begin

    Application.CreateForm(TForm2, Form2);

    Form2.Show;

    end;



    if Sender = MainMenu1.Items[0][2] then begin

    Application.CreateForm(TForm3, Form3);

    Form3.Show;

    end;



    if Sender = MainMenu1.Items[0][3] then begin

    Application.CreateForm(TForm4, Form4);

    Form4.Show;

    end;

    end;



    이렇게 되겠지요... Sender는 이벤트를 보내는 객체입니다.