LoginSignup
6
2

[Delphi] Skia おさらい

Posted at

はじめに

Delphi 12 Athens から Skia が使える様になりました(FMX / VCL どちらでも使えます)。

この記事はデベロッパーTVで解説した Skia サポートのおさらい記事です。

Skia の使い方

Skia を使う方法は、ProjectManager でプロジェクトのコンテキストメニューから「Skia の有効化」をクリックするだけです。

image.png

Skia を有効にするとプロジェクトファイルが以下のように変更されます。

VCL
sk4d.dll が自動生成され実行時にリンクされます。

FMX
プラットフォーム毎に Skia モジュールが組み込まれます。

OS Skiaのモジュール
Windows sk4d.dll
macOS libsk4d.dylib
Android libsk4d.so
iOS Skia の静的リンク

Skia コントロール

Skia を導入するにあたって、Skia の機能をラッピングし Delphi で扱いやすくした Skia コントロールが搭載されました。
今回は、その Skia コントロールの中で以下の3つを紹介します。

  • TSkLabel
  • TSkAnimatedImage
  • TSkSVG

TSkLabel

TSkLabel は Skia の文字列描画をコントロール化したものです。

従来の TLabel のように単一行のコントロールというわけではなく自動的に改行される複数行表示可能なコントロールです。

追加する文字列ごとにデコレーション(フォントの色等の属性)を設定できます。

TSkLabel は Skia カテゴリにあります。
image.png

TSkLabel はその性質上(複数行表示可能なため)高さが決められません。
そのため、置いた直後は縦の長さが極端に長くなっています。
これでは使い勝手が悪いため、AutoSize を False にしてサイズを調整します。

image.png

使い方

TSkLabel の Words プロパティに示される TWordsItem を選択して文字列を指定します。
TWordsItem クラスの文字列や属性を適切に指定してデコレーションします。
ちなみに TSkLabel.Text プロパティは Words[0].Text プロパティを表わしています。

image.png

WordsItem 毎に文字列や Decoration 背景色などを設定できます。

image.png

WordsItem を追加する場合は右クリック「項目を追加」や「コレクションエディタ」で編集できます。

image.png

WordsItem を増やして、Item 毎に色を付けてみたサンプルです。
image.png

WordsItem 毎にクリックを受け取れます。
WordsItem の OnClick にイベントハンドラを追加するだけです。
image.png

イベントハンドラ
procedure TForm1.SkLabel1Words2Click(Sender: TObject);
begin
  // WordsItem がクリックされると実行される
  ShowMessage((Sender as TSkLabel.TWordsItem).Text);
end;

Words.Add メソッドを使えばコードで WordsItem を追加できます。
Words プロパティは TCollection を継承しているので Clear メソッドや Items プロパティなども利用できます

procedure TForm1.FormCreate(Sender: TObject);
begin
  var Item :=
    SkLabel1.Words.Add(
      sLineBreak + 'Hello, SkLabel!',
      TAlphaColors.Red,
      32,
      TFontWeight.UltraBold,
      TFontSlant.Italic);

  Item.OnClick := SkLabel1Words2Click;
end;

image.png

TSkAnimatedImage

TSkAnimatedImage はアニメーション GIF に代表されるアニメーション画像を表示できます。

image.png

使い方

Source プロパティで画像を指定するだけです。

image.png

表示できる種類は以下の通り

  • Animated GIF (*.gif)
  • Animated WebP (*.webp)
  • Lottie (*.json)
  • Telegram Sticker (*.tgs)

残念ながら APNG / JPEG XL には対応していません
Animation の詳細は Animation プロパティで設定できます。
image.png

TSkSVG

TSkSVG は SVG を表示するコントロールです。
従来の TPath と比べて高機能になっています。
image.png

使い方

Svg プロパティの Source に SVG を指定するだけです。

image.png

最後に

サンプルアプリが非常に判りやすいのでおすすめです。
デフォルトのサンプル格納場所は以下です。

C:\Users\Public\Documents\Embarcadero\Studio\23.0\Samples\Object Pascal\Multi-Device Samples\Skia4Delphi

これでまた Delphi の表現の幅が広がりましたね。

6
2
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
6
2