Q&A

  • 동적으로 생성한 컴포넌트 이름을 알려면??
질문이 있습니다.
고수님들 한번 봐 주십시요...부탁드립니다.

컴포넌트 이름을 알아내는 기존의 코드들은 이미 사용해 봤습니다.
역시 답이 안나옵니다.

아!제가 본 예제는 마우스좌표 아래에 있는 컴포넌트를 알아내는
것이었습니다.

function ComName(x,y : integer) : string;
var
   p : TPoint;
   w : TWinControl;
begin

     p.x := x;
     p.y := y;
     w:= FindVclWindows~(p);

   if w <> nil then
   begin
       result := w.ComponentName;
   end
   else begin
       result:='';
   end;

end;


그런데 위 코드는 Form1 이라는 메시지만 날릴뿐 동적으로 생성한
Image1 이 가지고 있는 이름은 알아내지 못하더군요.

제 생각에는 TWinControl and TClasses 에러인것으로 봐서는
조상클래스 차이 때문에 이름을 얻어내지 못하는거 같습니다.

TForm <> TImage 차이?

고수님들 제발 도와주십시요...
동적으로 생성한 Image1 이 가지고 있는 이름은 어떻게 알아낼 수
있습니까?

급합니다...
1  COMMENTS
  • Profile
    홍성락 2002.03.21 04:56
    hsr//////////////////////////////////////////////////////////
    말씀하신데로 이미지등 윈도우핸들계통은 위함수로 구하지못합니다.
    저는 아래처럼 해봤는데요(좀 무식하죠)
    다른 좋은방법도 있을겁니다.
    참 동적생성할때 이름부여하셨죠...

    procedure TForm1.Search(OBJ: Longint);
    var
        i : integer;
        ChildControl: TControl;
    begin
        for i := 0 to Form1.ControlCount-1  do begin
            ChildControl := Form1.Controls[i];
            if OBJ = Longint(ChildControl) then begin
               Memo1.Lines.Add(ChildControl.Name);
               exit;
            end;
        end;
    end;

    //선언시    procedure WndProc(var Message: TMessage); override;
    procedure TForm1.WndProc(var Message: TMessage);
    var
       ccc: TControl;
    begin
      //마우스가 들어올때
      if (Message.Msg = CM_MOUSEENTER) then begin
          Search(Message.LParam);
       end
       //마우스가 떠날때
       else if (Message.Msg = CM_MOUSELEAVE) then begin

       end;
       inherited WndProc(Message);
    end;