Q&A

  • popup 에 관하여
popup을 여러곳에서 찾아보구,
NewItem에 대해 찾다가 또 글을 올립니다.
popup을 지금 처음 써보는 건데요...

그리드에 조회된 내용중에 수정하고픈 곳을 오른쪽버튼을 클릭과 동시에
팝업에서 원하는 것을 선택하면 저장이 되게끔 하려고 하고 있어요.

조건은 센터에 속한 코스를 왼쪽gird1에 먼저 불러옵니다. 그 해당 코스를 선택하면 grid2에 내용이 있으면 뜨구요, 거기서 수정해야 되는 코스가 있으면
오른쪽 버튼을 눌러 팝업창에 뜨는 코스를 선택 저장하게 하려 하는겁니다.
popup메뉴에 센타마다 다른 코스들이 자동으로 뜨게는 했어요.

근데 popup메뉴중 하나를 선택하면 젤 첫번째 값만 가지고 있답니다.
즉, 코스1을 선택해도 값이 001 이고, 코스7을 선택해도 값이 001 예요
먼가 중요한 한 부분을 놓친것 같은데,
NewItem부분의 속성중 먼가를 놓친 것 같기도 하고..
근데 도무지 잘 모르겠습니다.
아시는 고수님들 좀 알려주시면 고맙겠습니다.

제가 한 코딩은
========================================================================
procedure TForm1.PopupMenu1Popup(Sender: TObject);
var
   Str,Str1 : String;
begin
   PopupMenu1.Items.Clear ;

   tblCourse.First;
   while not tblCourse.Eof do
    begin
      Str  := tblCourse.FieldByName('co_name').AsString;
      Str1 := tblCourse.FieldByName('co_code').AsString;

      with popupMenu1.Items do
       begin
         Add(NewItem(Str,0,False,True,MenuItem1Click,0,'MenuItem1'));
       end;

      tblCourse.Next;
    end;
end;

=========================================================================
6  COMMENTS
  • Profile
    김주영 2004.01.09 01:28



    이부분..

    NewItem(Str,0,False,True,MenuItem1Click,0,'MenuItem1');


    에서 마지막 파라미터가 popup메뉴의 Item Name 일 터인데,
    모든 item Name이 같게 되겠네요.
    물론 그에 따른 event도 모두 같은 MenuItem1Click를 타는 군요..

    그럼, 코스1~ 코스7 (잘 모르겠지만)의 어떤 것을 선택해도, '코스 1'만 선택 되는 것이 당연한 것 같은데요... ^^;



  • Profile
    한원희 2004.01.09 01:57
    안녕하세요. 한원희입니다.

    Name 속성이 같아서 모두 MenuItem1Click 가 호출되는 것이 아니라, 각 팝업 메뉴를 생성할 당시 이벤트 핸들러를 모두 MenuItem1Click로 지정을 했기 때문입니다. 한 이벤트 핸들러에서 메뉴 항목 각각을 구별하려면, 간단하게는 Sender의 Caption을 비교하면 되겠죠. 아니면, Name 속성에 직접 코스의 번호를 넣어 두고 나중에 이벤트 핸들러에서 이 값들을 비교하는 것이 편하겠죠. 또는 Tag 속성에 각 항목마다 고유의 값을 할당하여 그 값을 가지고 메뉴 항목을 구별해 주면 됩니다.
    저라면, 간단하게 Name 속성에 코스의 번호를 넣어서 구별하는 방법을 택하겠습니다.

    팝업 추가시 다음과 같이 하고,
            Add(NewItem(Str,0,False,True,MenuItem1Click,0,Str1));

    클릭 이벤트 핸들러에서...
    procedure TForm1.MenuItem1Click(Sender: TObject);
    var
      pmiClicked:TMenuItem;
    begin
      pmiClicked:TMenuItem(Sender);

      if pmiClicked.Name='001' then
      begin
        // 코스1에 대한 처리
      end;

      if pmiClicked.Name='007' then
      begin
        // 코스7에 대한 처리
      end;
    end;

    요렇게 해주면 되겠습니다.

    그럼, 즐프~

  • Profile
    쭈~우 2004.01.09 02:24

    그런데요.. 코스1~코스7까지는 정해진 것이 아니거등요.
    센타를 선택해서 코스가 20개가 있을수도 있고 30개가 있을수도 1개나 2개 있을수도 있습니다.
    센타에 속한 코스가 불러와 져서 popup에 뜨는거니까요. popup의
    TMenuItem을 하나도 지정하지 않으니깐 코스가 안불러오구 다운이 되어서
    일단 임의로 2개 만들어 놓구 일단 불러오게는 한것인데,
    그 담이 문제라는 겁니다.
    한 원희 님 말씀대로라면 센타마다 미리 다 코스를 세어 놓고선 코딩을 다 해 놓아햐 하는거 아닌가요? 코스코드를 등록하는 프로그램은 또 따로 있습니다.
    그 프로그램에서 등록, 삭제, 수정 이 되면 자동으로 여기에 popup에
    떠야 되거등요.

    그리고 name속성에는 어떤 수치도 못쓰겠던데요? caption을 말씀하신건가요?
    에궁ㅠ.ㅠ 제가 넘 질문도 못하고 제대로 알아듣지도 못하네요.
    popup의 실지 기능도 잘 모르는데 무작정 쓴다고 하다가
    아주 지금 그 자리에서 생각만 하고 있는데 코딩이 안돼고 있습니다.
    답변 감사드립니다.

  • Profile
    한원희 2004.01.09 03:13
    안녕하세요. 한원희입니다.

    질문의 요지가 Grid2에 있는 항목들을 불러서 Grid1의 팝업에 나타나게 하고, 팝업 메뉴중 하나를 선택하면  Grid1에 선택한 홍목이 들어가야 하는 것이 맞는지요? 맞다면, 아래의 MenuItem1Click이벤트 핸들러를 약간 수정하시면 될 것 같네요.
    그리고, Name 속성이 string형이니까, 코드 값이 숫자라면, IntToStr등으로 변환해서 넣어 주고, 나중에 반대로 StrToInt로 변환해서 사용하시면 됩니다.
    코드 값이 숫자라면, Name에 넣어주기 보다는 Tag 속성에 저장했다가 나중에 이용하는 것이 더 좋을것 같습니다.

    Grid1의 선택된 행에 반영시켜주는 코드로 바꾸면 되겠죠. 구체적인 것은 어떤 내용인지 제가 파악이 안되는 관계로 이만 줄이겠습니다. ^^;


  • Profile
    쭈~우 2004.01.09 03:40
  • Profile
    쭈~우 2004.01.09 01:46

    그렇게 했는데도 popup창에서의 코스는 전부 불러왔그덩요.
    그래서 님께서 찝어주신대로 궁금한 것이 그겁니다.
    저 형식 말고 자동으로 어떤 코스를 불러서 선택할 수 있게 하는거요.
    제가 한 형식으로는 코스를 다 불러오긴 하지만 값은 하나만 선택되니까요
    코스도 다 불러오구 값도 실제 고쳐진 수정된 값을 가질려면 어떻게 해 줘야 하는건지가 궁금합니다.^^

    다시 알려주시면 고맙겠습니다
    • 정대만
    • 2004.01.09 05:26
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2004.01.09 19:34
      작업표시줄 및 시작메뉴속성에 보시면 알림영역에 사용하디 않는 아이콘 숨기기 체크박스가 있고요 사...
    • kht
    • 2004.01.09 04:35
    • 4 COMMENTS
    • /
    • 0 LIKES
    • 이종철
      2004.01.09 05:25
      netsh interface ip add dns 입니다. add로 찾아보시길.. 원하시면 소스도 올려드리죠 -_-/
    • kht
      2004.01.09 10:25
      아래와 같이 DNS 삭제 -> Primary DNS - > 보조 DNS 식으로 작업을 했는데요. Primay 와 보조 DNS 잘...
    • 이대봉
      2004.02.07 22:42
      너무 빨리 다음행이 실행되어서 나타나는 현상입니다. sDns := 'netsh interface ip set dns "로컬 영역...
    • 이종철
      2004.01.10 03:16
      선택된 인터페이스의 ip를 변경하는 소스코드입니다. http://peniar.com/devbeta/ipcsrc.exe 이를 받아...
    • 박희경
    • 2004.01.09 04:33
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 최용일
      2004.01.10 06:13
      안녕하세요. 최용일입니다. 델파이 7에도 gauges.pas 있는데요... ...\Source\Samples 폴더에... gauges...
    • 박희경
      2004.01.10 21:20
    • 김정모
    • 2004.01.09 03:51
    • 0 COMMENTS
    • /
    • 0 LIKES
    • 박동호
    • 2004.01.09 01:57
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 쭈~우
      2004.01.09 02:11
      LoginPrompt 를 false로 놓으세요.
    • 강지형
    • 2004.01.09 01:40
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2004.01.09 02:26
      1. 먼저 SDI로 하시고요 2. Child폼의 속성   Alingn => alClient;   BorderS...
    • 홍왕식
    • 2004.01.09 00:32
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이추형
      2004.01.09 02:46
      그쪽두 안녕하시죠? 저두 예전에 이런질문 많이 올렸었지만... 제일 좋은 책은 직접 서점에 가셔서 눈에 ...
    • 배종윤
      2004.01.13 03:43
      대림출판사 책이 기초에서 고급까지 배울수 있는 좋은 책이라 생각됩니다. 책의 진행도 잘되어 있고 ...
    • 이선주
    • 2004.01.09 00:02
    • 6 COMMENTS
    • /
    • 1 LIKES
    • 김주영
      2004.01.09 01:28
      이부분.. NewItem(Str,0,False,True,MenuItem1Click,0,'MenuItem1'); 에서 마지막 파라미터...
    • 한원희
      2004.01.09 01:57
      안녕하세요. 한원희입니다. Name 속성이 같아서 모두 MenuItem1Click 가 호출되는 것이 아니라, 각 팝업...
    • 쭈~우
      2004.01.09 02:24
      그런데요.. 코스1~코스7까지는 정해진 것이 아니거등요. 센타를 선택해서 코스가 20개가 있을수도 있고 ...
    • 한원희
      2004.01.09 03:13
      안녕하세요. 한원희입니다. 질문의 요지가 Grid2에 있는 항목들을 불러서 Grid1의 팝업에 나타나게 하고...
    • 쭈~우
      2004.01.09 03:40
    • 쭈~우
      2004.01.09 01:46
      그렇게 했는데도 popup창에서의 코스는 전부 불러왔그덩요. 그래서 님께서 찝어주신대로 궁금한 것이 그...
    • 미리내
    • 2004.01.08 22:34
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 장신귀
      2004.01.09 01:19
      PrintMargins 함수를 써보심이 어떠실지... 예전에 제가 짰던 프린트 부분 소스입니다.   ...
    • 이상민
    • 2004.01.08 22:18
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2004.01.08 22:21
      TWinControl에서 파생된 컴포넌트만이 ActiveX 컨트롤이 될 수 있으며 그말은 곧 TWinControl에서 파생되...
    • 소울해커
      2004.01.08 22:38
      1. 에러나는 이유는 TForm2.BtnEnabled_T;라는 코드에서 인자가 빠졌기 때문입니다.    TForm2....
    • 이추형
      2004.01.08 22:34
      실제로 위의 명령을  실행하면 아래와 같지 않을까요? [Error] Unit1.pas(35): Not enough ac...
    • ^^!
    • 2004.01.08 21:20
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 소울해커
      2004.01.08 22:26
      TextOut에서 X, Y는 글자가 쓰여질 X축 값과 Y축 값을 말합니다. X가 100이고 Y가 200이면 아래 코드에선...
    • 김경운
    • 2004.01.08 19:39
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 박상윤
      2004.01.08 22:23
      그거 이미지라이브러리에 있는 컴포인뎅....스카이 라인인가 회사가 그렇거든여 함 구해 깔아보세여.....
    • 한원희
      2004.01.09 01:15
      안녕하세요. 한원희입니다. aaa := aaa or $00000340; 이렇게 하면, 최하위 1바이트의 8비트와 그다...
    • 최용일
      2004.01.10 15:11
      안녕하세요. 최용일입니다. 이름으로 봐선 메모리 할당하는 함수 같은데... GetMem, New, AllocMem등의 ...
    • 이종철
    • 2004.01.08 09:23
    • 1 COMMENTS
    • /
    • 0 LIKES
    • 이종철
      2004.01.08 09:27
      자답입니다. ;; 아까까지 계속안보이다가 (눈이 나쁜듯..) 소스보니 TThread.ThreadProc에서 FreeOnTerm...
    • 미리내
    • 2004.01.08 05:27
    • 2 COMMENTS
    • /
    • 0 LIKES
    • 이중철
      2004.01.09 02:18
      막대그래프 시리즈 옵션중에 [Stack] 탭을 누르시면 거기서 Multibar 옵션중 None으로 하심 될거에요
    • 소울해커
      2004.01.08 23:02
      ChartType에 7 - VtChChartType2dStep 이라는 타입이 있습니다. 해당 타입으로 하고 컬럼을 조정해주면 가...
    • 소울해커
      2004.01.08 21:50
      type TImageComp = class(TImage)   ... ... ... ... 뭐... 이런형태로 TImage를 상속받는...