質問

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

役に立ちましたか?

解決

実際に正しく実行するには、おそらく子孫クラスを作成する必要があります。 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;

他のヒント

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

  

RzPanel1.Canvas.Rectangle ...

他の解決策もあると確信していますが、Raizeでそれらを探す必要はありません。

(約10年間の顧客満足度)...

EDIT:目標と、コンポーネントを既に持っているというステートメントを考えると、TRzSizePanelがパネルのサイズ変更とOnCanResizeなどの便利なイベントを処理することを指摘する必要があります(特定の新しい幅にサイズ変更を許可するかどうかを決定するため)または高さ)。

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

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top