cAlgo API リファレンス

ControlBase【cAlgo API】

2020年12月17日

cAlgoのコントロール

cBotやインジケーターで、チャート上にボタンを設置したり、テキストボックスを置いたりすることもができます

ボタンやテキストボックスなどを総称してコントロールと呼びます。これらはcAlgo内で定義されたコントロールクラスによって作られたもので、プログラム内から制御可能です。

cAlgoで定義されたコントロールには、このようなユーザーの操作を受け付けるボタンなどの他にも楕円や多角形などの形、画像、カスタムコントロールなど様々な種類のものがあります。

cAlgo内のあらゆるコントロールクラスはすべてControlBaseクラスから継承されます。

 

ControlBaseクラス

すべてのコントロールクラスの親となるクラスです。全コントロールで共通するプロパティが定義されています。

public class ControlBase : Object

 

プロパティ
(double) Height {get; set;}

コントロールの高さを取得設定します。

(double) Width {get; set;}

コントロールの幅を取得設定します。

(double) MaxHeight {get; set;}

コントロールの最大高さを取得設定します。

(double) MaxWidth {get; set;}

コントロールの最大幅を取得設定します。

(double) MinHeight {get; set;}

コントロールの最小幅を取得設定します。

(double) MinWidth {get; set;}

コントロールの最小高さを取得設定します。

(Thickness) Margin {get; set;}

コントロールの周辺余白を設定します。設定はThicknessクラスもしくは数字、文列が使用できます。new Thickness(5), new Thickness(1, 2, 3, 4), 5, "5", "1 2 3 4".など

(HorizontalAlignment) HorizontalAlignment {get; set;}

コントロールの水平位置を取得設定します。

(VerticalAlignment) VerticalAlignment {get; set;}

コントロールの垂直位置を取得設定します。

(double) Opacity {get; set;}

コントロールの不透明度を取得設定します。0(透明)~1(不透明)の間で設定しす。1以上なら1に設定されます。

(double) Top {get; set;}

コントロールの上側位置のY座標を取得設定します。Canvas内でのみ機能します。

(double) Left {get; set;}

コントロールの左側位置のX座標を取得設定します。Canvas内でのみ機能します。

(double) Bottom {get; set;}

コントロールの下側位置のY座標を取得設定します。Canvas内でのみ機能します。

(double) Right {get; set;}

コントロールの右側位置のX座標を取得設定します。Canvas内でのみ機能します。

(Dock) Dock {get; set;}

ドック内での位置を指定します。DockPanel内でのみ機能します。

(Style) Style {get; set;}

コントロールのスタイルを取得設定します。

(bool) IsEnabled {get; set;}

コントロールが有効か無効化を取得設定します。falseだと押したり選択したりできまん。

(bool) IsHitTestVisible {get; set;}

コントロールがマウスイベントを発生させるどうかを取得設定します。falseだマウスを受け付けません。

(bool) IsVisible {get; set;}

コントロールの表示非表示設定を取得設定します。

(Guid) UniqueId

コントロールのユニークIDを取得します。型はC#(.Net)のGuid構造体です。

 

メソッド
(void) ResetPropaty()

すべてのプロパティをデフォルト設定にします。

 

サンプルコード
// コントロールを置くためのパネルを準備
var panel = new StackPanel();
panel.Orientation = Orientation.Vertical;
panel.VerticalAlignment = VerticalAlignment.Center;
panel.HorizontalAlignment = HorizontalAlignment.Center;

// コントロールを準備し、各種設定をする
var button = new Button();
var textbox = new TextBox();
var check = new CheckBox();
var radio = new RadioButton();
button.Width = textbox.Width = check.Width = radio.Width = 80;
button.Height = textbox.Height = check.Height = radio.Height = 25;
button.Margin = textbox.Margin = check.Margin = radio.Margin = 5;
button.Text = "button";
textbox.Text = "textbox";
check.Text = "checkbox";
radio.Text = "radiobutton";
check.IsChecked = radio.IsChecked = true;

//パネルにコントロールを配置
panel.AddChild(button);
panel.AddChild(textbox);
panel.AddChild(check);
panel.AddChild(radio);

//チャートにパネルを設置
Chart.AddControl(panel);

ControlBaseクラスそのものを使うことはありません。プログラム内ではControlBaseクラスを継承したButtonやTextBoxを使い様々な機能を作ります。

参考までに冒頭画像の4つのコントロールをチャートど真ん中に配置するだけのコードを載せておきます。ボタン押したりしてもなにも起きません。

 

IsEnabled IsHitTestVisibleの違いは?

IsEnabledはfalseでもコントロールを無効化するだけで、マウスの当たり判定自体は発生しますが、IsHitTestVisibleがfalseだとマウス自体を無視するため、コントロールを透過できます

例えばコントロールを重ねて表示して、上のコントロールを表示させたまま、下のコントロールを押させたいというときにはIsHitTestVisibleをfalseにします。

 

サンプルコード
var canvas = new Canvas();
var button = new Button();
var label = new TextBlock();
button.Click += (_ => Print("push!!"));
button.Width = label.Width = 50;
button.Height = label.Height = 20;
label.Text = "push!";
label.TextAlignment = TextAlignment.Center;
canvas.AddChild(button);
canvas.AddChild(label);
Chart.AddControl(canvas);

// この行を消すとボタンが押せない
label.IsHitTestVisible = false;

このコードはチャート左上に、ボタンの上にテキストブロックというコントロールを重ねて表示させてます。ボタンを押すと”Push!!"とログに表示されます。

ここでIsHitTestVisibleを設定してる行を消すとボタンが押せなくなります。上にあるTextBlockコントロールがマウスを受け付けてしまうので、下のボタンが押せないんですね。

IsHitTestVisibleをIsEnabledに変更してみても、テキスト色が無効っぽくなるだけで、やっぱりボタンは押せません。OnStart内に貼り付けて試してみてください。

 

 

Thickness構造体

四角形4辺の周りの厚みデータを表します。余白を指定する際に使用します。

public sealed struct Thickness : ValueType

 

プロパティ
(double) Left

左側の厚みを取得します。

(double) Top

上側の厚みを取得します。

(double) Right

右側の厚みを取得します。

(double) Bottom

下側の厚みを取得します。

 

コンストラクタ
Thickness(double left, double top, double right, double bottom)

左、上、右、下の厚みを指定します。

Thickness(double uniformLength)

4辺に同じ厚みを指定します。

 

-cAlgo API リファレンス

© 2021 cTrader's Life Powered by AFFINGER5