Q&A

  • 컨트롤 z-index 조절..
안녕하세요~

폼에 동적으로 생성한 TImage 가 여러 개 있는데, 이것들의 z-index 를 조절하고 싶습니다.

SendToBack 이나 BringToFront  로는 맨 아래로 내리거나 맨 위로 올릴 수밖에 없는데.. 이 TControl 들의 현재 z-index 를 알아내거나, 아니면 최소한 둘 중에 어느 쪽이 위에 있는지를 알아낼 방법 같은 건 없을까요?

부탁드립니다 ^^
1  COMMENTS
  • Profile
    구창민 2003.01.07 19:07
    안녕하세요~ 구창민입니다.

    우선 두개중에 위에 있는 컴포넌트가 무슨 컴포넌트인지 알려면 아래처럼

    하면 알수 있겠네여.

    아래는 핸들이 없는 컴포넌트를 임시적으로 알아내오므로,

    범용적이지 못합니다. 하지만, 님이 원하시는 대로는 되겠네여.

    범용적으로 만드시려면 WindowFromPoint, GetClassName 등을

    사용하시면 모든 공통 컨트롤의 이름을 알아 낼수 있답니다.

    아뭍든 참고하시고, 즐거운 프로그래밍 하시길~


    //툭종 좌표 아래의 컴포넌트 명을 돌려주는 함수
    function TForm1.ReturnComponentName(ThisPoint : TPoint) : String;
    var
      Ctrl : TControl;
    begin
      Result := '';
      Ctrl := ControlAtPos(ThisPoint, True);
      if (Ctrl <> nil) and (Ctrl is TImage) then
      begin
        Result := Ctrl.Name;
      end;
    end;

    //특정 좌표 아래에 무슨 컴포넌트가 위에 존재하나?
    procedure TForm1.Button1Click(Sender: TObject);
    var
      TargetPoint : TPoint;
    begin
      //예를 들어 Image1 과 Image2 가 겹쳐 있는 위치를 보내면
      //위에 있는 컴포넌트 명을 돌려준다.
      TargetPoint.x := Image1.Top + 10;
      TargetPoint.y := Image1.Left + 10;
      ShowMessage(ReturnComponentName(TargetPoint));
    end;