喫茶XRAYトップページ

[スレッド全体
]

[11447] Re2:世の中には画像作成用ソフトが存在する返信 削除
2017/10/15 (日) 11:39:32 Mr.XRAY
▼ igyさん

> ・[タブ順序の設定]ダイアログ(メニュー[編集]-[タブ順序])

あっ,これ,だいぶ後に気づきました.
フォームあるいはコントロールのポップアップメニューで,
作成したアプリのフォーカス移動の制御に必要なんですよね.

> が表示していれば、サイズ変更できることがわかるのに・・・と思った記憶があります。

確かに.
これがないとサイズ変更可能かの判定ができないですね.
でも,あまり気にならなくなりました (^^;

> で、今、検索してたら、見つけたのですが、
> FMXでは、
> サイズ変更グリップ(SizeGrip)


こんなのがあるんですか.なるほど.

>このサイズ変更グリップコントロールは、一貫性を考慮して、フォームの右下隅に
>置くことをお勧めします。


確かに.
リサイズってだいたいは右下の隅を操作するようですので.


[11448] Re3:世の中には画像作成用ソフトが存在する返信 削除
2017/10/15 (日) 11:49:53 Mr.XRAY
> > ・[タブ順序の設定]ダイアログ(メニュー[編集]-[タブ順序])
>
> あっ,これ,だいぶ後に気づきました.


設定関係のダイアログって,結構リサイズ可能なのがありますね.
サイトの記事の画像作成の時にリサイズすることをゃっていましたが,
最近は矩形範囲で切り取ってしまうのが多いです.


[11451] サイズ変更グリップ返信 削除
2017/10/15 (日) 12:32:41 igy
># 実際、サイズ変更グリップを表示するコンポーネントを作りました。

作ったコンポーネントは、こんな感じです。
13年前に書いたコードでした。今だったら、もっと、スマートな書き方が出来たかもしれないですけど・・・

unit IgySizingMark;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Themes;

type
  TIgySizingMark = class(TGraphicControl)
  private
    { Private 宣言 }
  protected
    { Protected 宣言 }
    procedure Paint; override;
  public
    { Public 宣言 }
    constructor Create(Owner: TComponent); override;
  published
    { Published 宣言 }
    property Align;
    property Anchors;
    property Constraints;
    property DragCursor;
    property DragKind;
    property DragMode;
    property Enabled;
    property ParentShowHint;
    property ShowHint;
    property Visible;
    property OnContextPopup;
    property OnDragDrop;
    property OnDragOver;
    property OnEndDock;
    property OnEndDrag;
    property OnMouseDown;
    property OnMouseMove;
    property OnMouseUp;
    property OnStartDock;
    property OnStartDrag;
  end;

procedure Register;

implementation

const
        MARK_SIZE = 12; // SizingGripのサイズ
        X_ADD = 3;
        Y_ADD = 3;

procedure Register;
begin
        RegisterComponents('Igy', [TIgySizingMark]);
end;

constructor TIgySizingMark.Create(Owner: TComponent);
begin
        inherited Create(Owner);

        // 幅・高さを設定
        Height := MARK_SIZE + 1 + Y_ADD;
        Width  := MARK_SIZE + 1 + X_ADD;

        // 幅・高さを固定
        with Constraints do
        begin
                MaxHeight := MARK_SIZE + 1 + Y_ADD;
                MinHeight := MARK_SIZE + 1;
                MaxWidth  := MARK_SIZE + 1 + X_ADD;
                MinWidth  := MARK_SIZE + 1;
        end;
end;

procedure TIgySizingMark.Paint;
var
        cnt, amari, ln, sx, sy: integer;
        SizingGripShow: boolean;
        r: TRect;
        Details: TThemedElementDetails;
begin
        inherited;

        SizingGripShow := (TForm(Owner).WindowState = wsNormal) and
                                        (not TForm(Owner).HorzScrollBar.IsScrollBarVisible) and
                                        (not TForm(Owner).VertScrollBar.IsScrollBarVisible);

        if SizingGripShow then
        begin
                if not ThemeServices.ThemesEnabled then
                begin // XP 以前かマニフェストが指定されていない場合
                        sx := Width - (MARK_SIZE + 1);
                        sy := Height  - (MARK_SIZE + 1);
                        with Canvas do
                        begin
                                for ln := 0 to MARK_SIZE - 1 do
                                begin
                                        for cnt := 1 to MARK_SIZE - ln do
                                        begin
                                                amari := cnt mod 4;
                                                if amari = 1 then
                                                        Pixels[sx+cnt+ln, sy+MARK_SIZE-ln] := clBtnHighlight
                                                else if amari in [2, 3] then
                                                        Pixels[sx+cnt+ln, sy+MARK_SIZE-ln] := clBtnShadow;
                                        end;
                                end;
                        end;
                end
                else  // テーマに沿った描画を行う
                begin
                        r := ClientRect; // 描画領域の取得
                        Details := ThemeServices.GetElementDetails(tsGripper);        // パーツ&状態に対応するパーツ番号、状態番号を取得
                        ThemeServices.DrawElement(Canvas.Handle, Details, r);        // 描画
                end;
        end;
end;

end.


[11452] Re:サイズ変更グリップ返信 削除
2017/10/15 (日) 18:38:26 Mr.XRAY
▼ igyさん
> ># 実際、サイズ変更グリップを表示するコンポーネントを作りました。

おお,なるほど.
テストコードと実行結果です.
例によって Windows 7 U64(SP1) + Delphi XE(UP1) Pro です.

procedure TForm1.FormCreate(Sender: TObject);
begin
  FResizeGrip := TIgySizingMark.Create(Self);
  FResizeGrip.Parent := Panel1;
end;

procedure TForm1.Panel1Resize(Sender: TObject);
begin
 FResizeGrip.Left := Panel1.Width - FResizeGrip.Width ;
 FResizeGrip.Top := Panel1.Height- FResizeGrip.Height;
end;


[11454] Re2:サイズ変更グリップ返信 削除
2017/10/15 (日) 18:50:06 Mr.XRAY
そうか,これはグリップというわけではなく,マークなんですね.
それで Mark なんですね.なるほど.


[11455] Re3:サイズ変更グリップ返信 削除
2017/10/15 (日) 18:58:48 igy
▼ Mr.XRAYさん
> そうか,これはグリップというわけではなく,マークなんですね.
> それで Mark なんですね.なるほど.


あ、当時、なんて名前を付ければよいか、わからなかったので、マークにしてました・・・
今だったら、TxxxSizingGrip や TxxxSizeGrip とか、
テストコードに書かれているように TxxxResizeGrip のほうがよさそうですね。


[11456] Re4:サイズ変更グリップ返信 削除
2017/10/15 (日) 19:02:29 Mr.XRAY
▼ igyさん

> あ、当時、なんて名前を付ければよいか、わからなかったので、マークにしてました・・・
> 今だったら、TxxxSizingGrip や TxxxSizeGrip とか、テストコードに書かれているように TxxxResizeGrip のほうがよさそうですね。


いや,Mark とかのが適切のような.
FireMonkey は Grip ですが,実際にその部分にマウスカーソルがいくと
リサイズになるようです.つまり実際に「握る」ことになるようです.
Grip のための表示という意味では Grip でもいいのかな ?


[11457] Re5:サイズ変更グリップ返信 削除
2017/10/15 (日) 19:21:53 igy
▼ Mr.XRAYさん
> FireMonkey は Grip ですが,実際にその部分にマウスカーソルがいくと
> リサイズになるようです.つまり実際に「握る」ことになるようです.


たしかに!

SezeGripをフォーム(右下じゃないところ)に置き、
SezeGripのところにマウスカーソルを合わせると、カーソルの表示も変わり、
ドラッグするとフォーム自体がリサイズしますね!!



[▼次のスレッド]
INCM/CMT
Cyclamen v3.82