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倍にしてみました。
通常はこちらのサイズです。
|