문제

이상적으로는 직접 tpanel을 그려야하므로 마우스 벤트 이벤트 트래핑을 방해하는 다른 구성 요소가 없습니다 (약간의 "크기 그립"을 그리고 싶습니다). 어떻게해야합니까?

도움이 되었습니까?

해결책

실제로 올바르게하려면 아마도 자손 수업을 작성해야 할 것입니다. 무시하십시오 Paint 사이징 그립을 그리는 방법을 사용하고 MouseDown, MouseUp, 그리고 MouseMove 제어에 크기 조정 기능을 추가하는 방법.

나는 그것이 TPanel 몇 가지 이유로 응용 프로그램 코드에서 다음과 같습니다.

  1. 그만큼 Canvas 속성은 보호됩니다 TPanel, 따라서 수업 외부에서 액세스 할 수 없습니다. 당신은 타입 캐스팅으로 그것을 둘러 볼 수 있지만 그것은 부정 행위입니다.
  2. "Resizability"는 응용 프로그램의 기능보다 패널의 기능처럼 들리므로 응용 프로그램의 기본 코드가 아닌 패널 컨트롤을위한 코드에 넣으십시오.

시작할 것이 있습니다.

type
  TSizablePanel = class(TPanel)
  private
    FDragOrigin: TPoint;
    FSizeRect: TRect;
  protected
    procedure Paint; override;
    procedure MouseDown(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
    procedure MouseMove(Shift: TShiftState; X, Y: Integer); override;
    procedure MouseUp(Button: TMouseButton; Shift: TShiftState;
      X, Y: Integer); override;
  end;

procedure TSizeablePanel.Paint;
begin
  inherited;
  // Draw a sizing grip on the Canvas property
  // There's a size-grip glyph in the Marlett font,
  // so try the Canvas.TextOut method in combination
  // with the Canvas.Font property.
end;

procedure TSizeablePanel.MouseDown;
begin
  if (Button = mbLeft) and (Shift = []) 
      and PtInRect(FSizeRect, Point(X, Y)) then begin
    FDragOrigin := Point(X, Y);
    // Need to capture mouse events even if the mouse
    // leaves the control. See also: ReleaseCapture.
    SetCapture(Handle);
  end else inherited;
end;

다른 팁

이것은 많은 방법 중 하나입니다 구성 요소를 습격하십시오 당신의 삶을 더 쉽게 만들 수 있습니다. 방금 델파이로 가서 trzpanel을 떨어 뜨리고 다음을 입력합니다.

rzpanel1.canvas.rectangle ...

다른 솔루션이 있다고 확신하지만 Raize와 함께 찾을 필요는 없습니다.

(약 10 년 동안 만족 한 고객 ...)

편집 : 귀하의 목표와 귀하가 이미 구성 요소를 습격했다는 성명서를 감안할 때, TRZSIZEPANEL은 패널의 크기 조정 및 OnCanresize와 같은 유용한 이벤트를 처리한다는 점을 지적해야합니다 (특정 새로운 폭 또는 높이로 크기 조정을 허용할지 여부를 결정). .

가장 간단한 방법은 패널에 시계를 두는 것입니다. 그러나 실제로 그렇게하고 싶지 않다면 Tcanvas를 코드 편집기에 입력하고 F1을 누르고 후드 아래에서 작동하는 방법에 대해 재미있게 배우십시오. (내가 당신에게 경고하지 않았다고 말하지 마세요 ...)

런 타임시 크기 핸들을 추가하는 방법 : 런타임에 크기가 조정됩니다.http://delphi.about.com/library/weekly/aa110105a.htm

Tadvpanel :http://www.tmssoftware.com/site/advpanel.asp

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top