11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DelphiAdvent Calendar 2019

Day 8

Delphiで丸いボタンを作る

Last updated at Posted at 2019-12-07

#はじめに
しばらくDelphiを触っていなかったのですが、Delphi Community Edition の登場でまた勉強を始めました。
FireMonkey学び始めた人による、初心者向けの記事になります。

今回はスマートフォンアプリでよく見かける丸いボタンを、スタイルデザイナにて作成する例です。
Delphi 10.3 Community Edition 上で確認しています。

00.png(こういうやつ)

参考資料
[スタイルを使ったFireMonkeyアプリケーションのカスタマイズ]
(http://docwiki.embarcadero.com/RADStudio/Rio/ja/%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%9F_FireMonkey_%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA)
FireMonkey: 設計時にデフォルトのスタイルを変更する
FireMonkey: 設計時にカスタムスタイルを定義する
FireMonkey: スタイルのプロパティの変更やメソッドの実行を動的に行う

#方針
ボタンを円で表現するには、ビットマップスタイルにて丸い画像を貼り付ける方法と、Shape系コントロールのTCircleを使用する方法があります。今回は後者について説明します。

ビットマップスタイルを使用する方法については、こちらの記事が参考になります。
ビットマップスタイルデザイナの使い方

##手順
###丸の作成

①フォームにTStyleBookを配置し、ダブルクリックします(スタイルデザイナが開きます)。

②パレットからTLayoutをドラッグし、SytleContainerにドロップします。
02.png

③作成されたLayout1Styleをクリックし、オブジェクトインスペクタにて以下のように設定します。
StyleName:AddItemCircleButton
Size.Width:50
Size.Height:50

④パレットからTCircleをドラッグし、AddItemCircleButtonにドロップします。
オブジェクトインスペクタにて、以下のように変更します。
Align:Contents
Fill.Color:任意の色
Stroke.Color:任意の色 (境界線を表示しない場合、Stroke.KindをNoneとします)
HitTest:False
03.png

⑤この状態で適用ボタンを押し、一度フォームデザイン画面上で確認してみましょう。
11.png(適用ボタン)

フォームデザイン画面に戻り、FormのStyleBookプロパティに「StyleBook1」を設定します。
次に、TButtonを配置し、StyleLookUpに「AddItemCircleButton」を設定します。
05.png
06.png 大きさが変えられるかも確認しましょう

###表面の作成
丸ボタンの表面の十字はRoundRectangleを2つ使用して表現します。
(ビットマップで表現することもできます。他のボタンスタイルが参考になります。)

(縦棒)
Fill.Color:White
Stroke.Kind:None
Position.X:22
Position.Y:6
Size.Width:5
Size.Height:37
Alien:Scale
HitTest:False

(横棒)
Fill.Color:White
Stroke.Kind:None
Position.X:6
Position.Y:22
Size.Width:37
Size.Height:5
Alien:Scale
HitTest:False

07.png

※注意 スタイルデザイナ上で要素のコピー&ペーストを行うと、同一要素が生成されてしまい、IDEの挙動がおかしくなります。一回ごとにパレットからドロップするようにしてください。

適用ボタンを押し、フォーム画面にて確認。
今回の方法だと、フォーム上のレイアウトが長方形になっていると十字が崩れるため、正方形になるように注意が必要です。
10.png

###装飾(影をつける)
パレットからTShadowEffectをCircle1Styleにドロップします。
そのままでも良い具合ですが、影の大きさ・方向を変更できます。(割愛)
08.png

###動きの設定
おおよそ完成ですが、クリック時・フォーカスなどに何も反応が無いとボタンとしては寂しい所です。
アニメーション機能を使って、クリック時に大きさを変化させてみます。(拡大方向が右下に偏ってしまいますが・・)
anime.gif

FloatAnimetionをAddItemCircleButtonに2個ドロップします。

StyleName:FloatAnimationXStyle
PropertyName:Scale.X
StartPosition:1
EndPostion:1.1
Inverse:True
Trigger:IsPressed=True;
Interporation:任意の値を設定

StyleName:FloatAnimetionYStyle
Xと同様。PropertyNameをScale.Yにする。

09.png
こちらはフォームデザイナ上では動作を確認できません。プログラムをコンパイルし、クリックしてみてください。

Interporationの設定については、こちらの記事が参考になると思います。
プロパティ値によるアニメーションの違いを調べてみた

これで丸いボタンは完成となります。

##スタイルの保存
折角作ったデザインなので、保存しておきましょう。
12.png

11
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?