Q&A

  • MainMenu 컨트롤...
하고자 하는 일: 해당폼에서 폼명을 넘겨주며 공동Unit의 프로시져를 호출하고
공동Unit의 프로시져는 호출한 폼의 메뉴를 컨트롤 하게한다.
(음냐.. 이것이 안되면 모든폼에 코딩을 해져야 하는데.....)
최용일님이 가르쳐 주셨는데 메인메뉴를 못 찾네요...

//해당폼에서 폼명을 넘겨주며 프로시져 호출
procedure TT105fm.FormCreate(Sender: TObject);
begin  
   ...
   ...
   Set_Power(Self); //Self에는 폼으 인스턴스를 넘겨주나요?
end;

//공동Unit의 프로시져 입니다.
Procedure Set_Power(TR_form : TForm); //권한설정프로시져
var i : integer;
begin
   //showmessage(TR_form.Name);  ===> T105fm => OK
   //DB를 읽는 소스는 생략...
   for i := 1 to TR_Form.MainMenu1.Items.Count - 1 do begin
       if TR_Form.MainMenu1.Items[i].Name = 'N1' then
          TR_Form.MainMenu1.Items[i].Enabled := false;
   end;
end;
  
위소스에서 폼명은 생성되지 않아도(? 맞나요?) 가져와 ShowMessage로 확인 할 수 있었습니다
그런데 MainMenu1은 생성되지 않았다고 에러는 내는데요...
최용일님이 '어떻한 경우도 생성되지 않은 걸 건드릴 수 없습니다' 하셨습니다.

공동프로시져에서 저 For문을 돌릴수 있는 방법이 없나요?
생성이 안되면 생성시킬 수 있는 방법은 없나요?
위 프로시져를 공동유닛에서 처리하지 못하면 어플내 모든 폼에 프로시져를 코딩해야 할텐데
그 방법은 넘 무식하겠죠?
3  COMMENTS
  • Profile
    아폴론 2003.03.25 01:44
    //====================일반폼 유닛===============
    procedure TT105fm.FormCreate(Sender: TObject);
    begin
       ..
       ..  
       Set_Power(Self);  //======>공동평션 프로시져 호촐
    end;

    //====================공동유닛===============
    unit PublicFUNC;

    interface
    uses
      Menus;
      
      Procedure Set_Power(TR_form :Tform); //권한설정프로시져

    implementation

    Procedure Set_Power(TR_form : TForm); //권한설정프로시져
    var i : integer;
        TR_main : TMainmenu;
    begin
       //showmessage(TR_form.Name);  
       //TR_main := TR_Form.menu;   ==>이것도 메뉴를 잘 찾네요..
       TR_main := TR_Form.FindComponent('MainMenu1') as TMainmenu;
       if TR_main <> nil then begin
          //여기서 DB를 읽어야 겠네...
          for i := 1 to TR_main.Items.Count - 1 do begin
             if TR_main.Items[i].Name = 'J1' then
                TR_main.Items[i].Enabled := false;
             if TR_main.Items[i].Name = 'M1' then
                TR_main.Items[i].Enabled := false;
          end;
       end;
    end;

    여러 고수님들의 도움으로 해결을 하게 된것 같습니다.
    위소스로 이제 각폼마다 에는 Set_Power(Self); 이넘 한줄로 처리 할 수 있게 되었습니다.
    하수는 일주일을 싸매도 안되고 고수는 잠간 생각해보면 안다...헐헐헐...
    정말 감사합니다.
  • Profile
    박수영 2003.03.24 20:38
    제 생각에는 TMainMenu.Create를 사용하면 될것 같은데요...
  • Profile
    아폴론 2003.03.24 22:58
    Procedure Set_Power(TR_form : TForm); //권한설정프로시져
    var i : integer;
        TR_main : TMainmenu;
        AForm : TForm;  //변수
    begin
       //showmessage(TR_form.Name);

       Aform := Tform.Create(TR_form);  
       TR_main := Aform.Menu.Create(Aform);===>Acceass에러...
       try
         for i := 1 to TR_main.Items.Count - 1 do begin
             if TR_main.Items[i].Name = 'J1' then
                TR_main.Items[i].Enabled := false;
         end;
       Finally
         TR_main.Free;
         Aform.Free;
       end;
    end;

    허접스럽게 폼을 생성하고, 메뉴를 생성했드랬습니다.
    컴파일은 되는데 실행하니 접근에러를 냅니다.
    통 뭐가 뭔애긴지...쩝...