6

理想的には直接TPanelを描画する必要があるため、マウスイベントイベントのトラップの邪魔になる別のコンポーネントが上にないようにします(少し「サイズグリップ」を描画したい)。これを行うにはどうすればよいですか?

4

4 に答える 4

10

本当に正しく行うには、おそらく子孫クラスを作成する必要があります。メソッドをオーバーライドしPaintてサイズ変更グリップを描画し、MouseDownMouseUp、およびMouseMoveメソッドをオーバーライドしてサイズ変更機能をコントロールに追加します。

TPanelいくつかの理由から、アプリケーション コードでを描画しようとするよりも、それがより良い解決策だと思います。

  1. Canvasプロパティは で保護されているTPanelため、クラス外からアクセスすることはできません。型キャストでそれを回避できますが、それは不正行為です。
  2. 「サイズ変更可能性」は、アプリケーションの機能というよりもパネルの機能のように聞こえるため、アプリケーションのメイン コードではなく、パネル コントロールのコードに入れます。

ここにあなたが始めるための何かがあります:

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;
于 2009-05-02T05:15:05.540 に答える
7

これは、 RaizeComponentsがあなたの生活を楽にする多くの方法の1つです。Delphiにアクセスし、TRzPanelをドロップして、次のように入力します。

RzPanel1.Canvas.Rectangle..。

他にも解決策があると思いますが、Raizeで探す必要はありません。

(約10年間満足している顧客...)

編集:あなたの目標と、すでにコンポーネントをレイズしているというあなたの声明を考えると、TRzSizePanelがパネルのサイズ変更とOnCanResizeのような便利なイベントを処理することも指摘する必要があります(特定の新しい幅または高さへのサイズ変更を許可するかどうかを決定するため) 。

于 2009-05-02T01:51:11.820 に答える
4

これを行う最も簡単な方法は、パネルにTImageを配置することです。しかし、本当にそれをしたくない場合は、コードエディタにTCanvasと入力し、F1を押して、内部でどのように機能するかを楽しんでください。(私があなたに警告しなかったと言わないでください...)

于 2009-05-02T00:25:47.140 に答える
2

実行時にサイズ変更されるコントロールにサイズ ハンドルを追加する方法: http://delphi.about.com/library/weekly/aa110105a.htm

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

于 2009-05-02T03:42:51.643 に答える