Q&A

  • Mainmenu관련입니다
로그인시 로그인 폼에서 여러 폼들의 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;
2  COMMENTS
  • Profile
    최용일 2003.03.22 02:27
    안녕하세요. 최용일입니다.

    왜 이름에 집착하시는지... 걍 인스턴스 넘겨주시면 될텐데...

    그리고 어떤한 경우도 생성되지 않은걸 건드릴 수는 없습니다... 참고하세요...
    인스턴스와 클래스를 잘 구별하시지 못하시는 것 같은데... 함 책한번 찾아보세요...

    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;

    ^^ 항상 즐코하세요...

  • Profile
    빵빵빵 2003.03.22 18:45
    저의 경험으로 메뉴활성화에서요.
    이런 걸 해봤었거든요.

    for  i:=0 to frmMain.Mainmenu1.items.count-1 do
      for j:=0 to frmMain.MainMenu1.items[i].items.count-1 do
        with Query1 do
        begin
          first
          while not(EOF) do
          begin
            if frmMain.Mainmenu1.items[i].items[j].name <> FieldByName('menu_name').asstring then
              frmMain.Mainmenu1.items[i].items[j].enable := false;
              next;
          end;
        end;

    암튼 이런식이였습니다. 즉 사용자별로 사용자가 사용할 메뉴를 디비에 저장해 놓고요. 로그인을 하면 그 사용자가 사용할 메뉴들을 메뉴아이템과 비교하여 enable 을 false ,true 주었거든요.

    그런데 아무리 저렇게 해도 안되더라구요. enable이 false가 되어야되는데, true로만 보이더군요.

    그래서 방법을 바꿔서 모든 메뉴를 enable false로 기본지정하고요.

    그리고 if문을

    if frmMain.Mainmenu1.items[i].items[j].name = FieldByName('Menu_name').Asstring then
       frmMain.Mainmenu1.items[i].items[j].enable := true;

    이렇게 바꾸니까 제대로 되더군요.

    무슨 이유로 그러는지 궁금합니다.

    • KDDG_Drop
      2003.03.22 19:58
      안녕하세요. 주삼식입니다. 먼저, JPEG이미지를 Bitmap으로 바꾸세요. 그리고, 그 비트맵에 Canvas.Draw...
    • 최인권
    • 2003.03.22 09:33
    • 0 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Drop
    • 2003.03.22 09:27
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_Drop
      2003.03.25 03:32
      안녕하세요. 주삼식입니다.   역시 볼랜드 제품은 우수합니다. 결론은 제 실수였습니다.  ...
    • 장범상
    • 2003.03.22 08:29
    • 1 COMMENTS
    • /
    • 0 LIKES
    • KDDG_RNStone
      2003.03.22 18:50
      일반적인 TImage에서는 gif 형식의 파일을 로딩할 수 없습니다. TGifImage라는 컴포넌트를 함 써 보시죠...
    • 김태진
    • 2003.03.22 08:00
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 김태진
      2003.03.22 08:33
      쯔압~~~ 자료실에 Varian Async32 Components 있길래 테스트해봤는데 델파이 7.0에서 아무 문제없이 잘 ...
    • 권봉진
    • 2003.03.22 05:03
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 박장용
      2003.03.22 06:41
      ...
    • 권봉진
      2003.03.24 19:05
      그건 델파이 타입이구요. 타입라이브러리에서 델파이 TColor 에 맞는 속성타입을 정하잖아요? 그게 뭔...
    • 콤보
    • 2003.03.22 02:50
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.22 04:20
      안녕하세요. 최용일입니다. PCom이라는 패키지에 Scped002라는 유닛을 추가해주시면 됩니다. 아마 PC...
    • 콤보
      2003.03.27 03:34
      최용일님 답변 정말 감사합니다.
    • 박준하
    • 2003.03.22 02:41
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.03.22 03:05
      OS 가 무엇인가여? 저는 그런경험이 없는데, 우선 RichEdit 이 WordWrap 되는 시점에 즉, 크기가...
    • 박준하
      2003.03.22 03:19
      win2000 server에서 compile 했습니다 win98에서 테스트 해 보았구요 winNT에서만 정상적으로 동작하...
    • 구창민
      2003.03.22 03:47
      이곳에서는 윈도그2000 프로페셔널을 사용중인데 정상적으로 동작합니다. 제가 답변드린 코드를 기술...
    • 박준하
      2003.03.22 04:01
      화면을 첨부 합니다. --------------- TRichEdit1 TRichEdit2 티리치에디터1 티리치에디터2 ----...
    • 윤성필
    • 2003.03.22 02:08
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 구창민
      2003.03.22 02:17
      ExistsDirectory(); MkDir();
    • 한원희
      2003.03.22 10:58
      안녕하세요. 한원희입니다. 한 가지 덧붙이자면, 폴더가 여러 경로를 타고 들어간다면... 일일이 재귀함...
    • 아폴론
    • 2003.03.22 00:59
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.22 02:27
      안녕하세요. 최용일입니다. 왜 이름에 집착하시는지... 걍 인스턴스 넘겨주시면 될텐데... 그리고 어...
    • 빵빵빵
      2003.03.22 18:45
      저의 경험으로 메뉴활성화에서요. 이런 걸 해봤었거든요. for  i:=0 to frmMain.Mainmenu1.i...
    • 혜월
      2003.03.22 00:43
      var     wnd: HWND; begin     WinExec( 'C:Program FilesMic...
    • 구창민
      2003.03.21 22:59
      System 탭의 OleContainer 컴포넌트를 사용해보세요. 메뉴도 병합시킬수 있답니다. 그럼~ 즐거운 프...
    • 최남선
      2003.03.22 01:32
      SetProcessAffinityMask API를 사용하시면 되여...
    • 구창민
      2003.03.22 03:18
      남선님 안녕하세요 구창민입니다. 그 함수에 대해 찾아보니 몇몇 정보가 있긴 했습니다. 남선님이 ...
    • 최남선
      2003.03.22 03:49
      급하게 만들어 봤읍니다. 작업관리자로 CPU사용내용을 확인해보세여... 3번째 CPU만 선호도를 설정하려...
    • 김영대
      2003.03.22 00:36
      // 안녕하세요 김영대(http://www.howto.pe.kr) 입니다 아마 힘들지 않을까 합니다 CPU 스케쥴링은...
    • 구창민
      2003.03.22 00:45
      음훼훼 워찌나 똑똑한지 .. 근디 멀티 쓰레드 작업을 할때 듀얼 시피유가 나름대로 똑똑하게 작...
    • 이진우
    • 2003.03.21 20:02
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.21 20:28
      안녕하세요. 최용일입니다. Delete함수를 이용해서 하실 수도 있구, StringReplace함수를 쓰셔두 되구요...
    • 이진우
      2003.03.21 20:33
      감사합니다...^^
    • 델사랑
    • 2003.03.21 08:16
    • 3 COMMENTS
    • /
    • 0 LIKES
    • 김병곤
      2003.03.21 19:14
      음...질문은 정확하게 올리셔야죠. 실행파일명으로 보아 서버소켓을 오픈시키는 프로그램인듯한데 실행시...
    • 델사랑
      2003.03.21 21:26
      말씀 감사합니다 그런데 바꿀수 잇는 옵션이 어디있나요? 아무리 찾아봐도 모르겠어요 죄송한데 방법을 ...
    • 구창민
      2003.03.21 23:09
      보니깐 그 프로그램이 델파이7/bin 디렉토리에 있군여. 저는 그게 머하는 프로그램인지 모르겟는데, ...
    • 이재훈
    • 2003.03.21 06:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • KDDG_RNStone
      2003.03.21 19:02
      두개의 프로그램 상에서 넘겨 주고 받는 데이터가 이미 약속된 것이라면 걍 실행파일 뒤에 적으면 되지여 ...
    • 이재훈
      2003.03.21 23:36
      11
    • 조경모
    • 2003.03.21 06:00
    • 3 COMMENTS
    • /
    • 0 LIKES
    • yosule
      2003.03.21 11:08
      case combobox.itmeindex of 0:begin       opendialog1.InitialDir :='...
    • 조경모
      2003.03.21 18:46
    • 구창민
      2003.03.21 23:22
      -_-+ @?$#%? 제가 테스트 해봤는데 잘되던데여? 코드는 잘못된 점이 없어 보이니 다른 문제가 있을듯...
    • 김민아
    • 2003.03.21 05:48
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 티모니
      2003.03.21 19:27
      프로그램 중복 실행 시키는 소스 부분을 DLL 호출시에 추가 하시면 됩니다. ^^ 소스는 팁게시판에 가시...
    • 이태환
    • 2003.03.21 03:46
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2003.03.21 20:21
      안녕하세요. 최용일입니다. Free메소드 호출하시면 되는데요... 인스턴스 := 클래스.Create(...); ....
    • 이태환
      2003.05.07 03:58
      *^^*
    • 호롱불
    • 2003.03.21 03:36
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장태원
      2003.04.01 19:06
      말도 안되는 작업을 하실려고 하는군요.. ㅡㅡ; 비추입니다. 스토워프로시져는 모드 코딩으로 바꿔야 하...