Formにサイズグリップを描画する
92 FormSizeGrip 動作確認 Delphi2007 更新日 2009/01/15(木)

Form.BorderStyle := bsSizeable;
にして普通にリサイズ可能なFormを作るとき
ステータスバーがない場合でも
右下にサイズグリップがついていると
ユーザーにはリサイズ可能とすぐに伝わるし
マウス操作がしやすいので親切です

サイズグリップというのは
FormのStatusBarには標準で付属する
[//]で三角形になっているマークです。

ということで
表示させてみましょう。

────────────────────
//PaintBoxを使うので、uses ExtCtrls; が必要

type
  TMainForm = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    FormResizeGrip: TPaintBox;
    procedure DrawResizeGrip;
    procedure FormResizeGripMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure FormResizeGripPaint(Sender: TObject);
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.dfm}

{-------------------------------
//  Formの右下にサイズ変更つまみ(=ResizeGrip)を描画します
//------------------------------}
procedure TMainForm.DrawResizeGrip;
begin
  {下:サイズ変更つまみ表示}
  Self.VertScrollBar.Visible := False;
  Self.HorzScrollBar.Visible := False;
  FormResizeGrip := TPaintBox.Create(Self);
  FormResizeGrip.Parent := Self;
  FormResizeGrip.OnMouseDown := FormResizeGripMouseDown;
  FormResizeGrip.OnPaint := FormResizeGripPaint;
  FormResizeGrip.Anchors := [akRight, akBottom];
//  FormResizeGrip.SetBounds(
//    Self.ClientWidth - GetSystemMetrics(SM_CXVSCROLL),
//    Self.ClientHeight- GetSystemMetrics(SM_CXHSCROLL),
//    GetSystemMetrics(SM_CXVSCROLL),
//    GetSystemMetrics(SM_CXHSCROLL) );
  FormResizeGrip.SetBounds(
    Self.ClientWidth - GetSystemMetrics(SM_CXVSCROLL)*2,
    Self.ClientHeight- GetSystemMetrics(SM_CXHSCROLL)*2,
    GetSystemMetrics(SM_CXVSCROLL)*2,
    GetSystemMetrics(SM_CXHSCROLL)*2 );
  FormResizeGrip.Cursor := crSizeNWSE;
end;

//-------------------------------
//サイズグリップのMouseDown処理
procedure TMainForm.FormResizeGripMouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if ssLeft in Shift then
  begin
    ReleaseCapture;
    SendMessage(Self.Handle, WM_SYSCOMMAND, SC_SIZE or 8, MakeLong(X, Y));
  end;
end;

//-------------------------------
//サイズグリップの描画処理
procedure TMainForm.FormResizeGripPaint(Sender: TObject);
begin
  DrawFrameControl(FormResizeGrip.Canvas.Handle, FormResizeGrip.Canvas.ClipRect,
                   DFC_SCROLL, DFCS_SCROLLSIZEGRIP);
end;
//------------------------------

procedure TMainForm.FormCreate(Sender: TObject);
begin
  DrawResizeGrip;
end;
────────────────────

ソースをみたらすぐわかりますが
今回は目立つようにGripを2倍にしてみました。


通常はこちらのサイズです。