로그인시 로그인 폼에서 여러 폼들의 Meinmenu의 아이템들을 컨트롤 하려고 합니다.
그래서 공동Unit에 프로시져를 두고 처리하려 했는데 공동유닛에서는 생성되지 않은 폼을 컨트롤 할 수
없었습니다. 워낙 실력이 딸리는 군요....쩝
아래는 해당폼에서 처리하는 메뉴 컨트롤 방법입니다.
----------------------------------------------------------------------------------
procedure TT105fm.FormCreate(Sender: TObject);
var i,j,Pint : integer;
Mstr,FMstr : string;
begin
//Set_Power((Sender as Tcomponent).Owner.Name);
//프로시져 호출 인데 T105fm이 아니라 메인폼명을 반환하네요
//[질문1] 어찌해야 자기폼 이름을 구 할 수 있을까요?
Set_Power('T105fm'); //그래서 자기폼이름으 적어주며 프로시져를 호출 합니다. 젠장...
end;
--------------------------------------------------------------------------------------
아래 소스는 위의구문을 해당폼의 프로시져로 처리 할려고하는 소스입니다.
private
procedure TR_Power;
procedure TT105fm.FormCreate(Sender: TObject);
begin
TR_Power;//프로시져 호출
end;
procedure TT105fm.TR_Power;
begin
//아래 MainMuin1을 찾을수 없다고 나오네요 그래서모두
// T105fm.MainMenu1.....을 붙여주어도 못찾네요...
//[질문2] 아래 for문을 돌릴 수 있을까요?
for j := 0 to MainMenu1.Items.Count - 1 do begin
end;
end;
[질문3] 공동Unit에서 아래 소스를 돌리고자 합니다. 어찌해야 하나요?
//폼명은 미리 알수 있습니다. 메인메뉴이름은 항상 Mainmenu1 입니다.
STR := 'T105fm;
for i := 0 to str.Mainmenu1.Items.Count - 1 do
if STR.Mainmenu1.Items[i].Name = 'N1' then
STR.Mainmenu1.Items[i].Enabled := false;
end;
왜 이름에 집착하시는지... 걍 인스턴스 넘겨주시면 될텐데...
그리고 어떤한 경우도 생성되지 않은걸 건드릴 수는 없습니다... 참고하세요...
인스턴스와 클래스를 잘 구별하시지 못하시는 것 같은데... 함 책한번 찾아보세요...
procedure TT105fm.FormCreate(Sender: TObject);
begin
......
Set_Power(Self);
end;
공통유닛
procedure Set_Power(AForm: TForm);
var
Index: Integer;
begin
if AForm = nil then
Exit;
for Index := 0 to AForm.MainMenu.Items.Count - 1 do
if AForm.Mainmenu1.Items[Index].Name = 'N1' then
AForm.Mainmenu1.Items[Index].Enabled := false;
end;
end;
^^ 항상 즐코하세요...