하고자 하는 일: 해당폼에서 폼명을 넘겨주며 공동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문을 돌릴수 있는 방법이 없나요?
생성이 안되면 생성시킬 수 있는 방법은 없나요?
위 프로시져를 공동유닛에서 처리하지 못하면 어플내 모든 폼에 프로시져를 코딩해야 할텐데
그 방법은 넘 무식하겠죠?
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); 이넘 한줄로 처리 할 수 있게 되었습니다.
하수는 일주일을 싸매도 안되고 고수는 잠간 생각해보면 안다...헐헐헐...
정말 감사합니다.