こんばんは!
FireMonkeyで試行錯誤状態の私がハマった出来事を書きます。
マヌケな話です(汗
TLayout に 複数の TRectangle を 左寄せ で追加してたのですが、
IDE上で1つずつ Align = Left などと設定を行う事で、
操作した順番に左寄せで並ぶのですが、
コード上から動的生成を行って同様のAlignプロパティを設定しても
生成した順番に並ばない!?
【FMXコード】
unit Unit1;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Controls.Presentation, FMX.StdCtrls, FMX.Objects,
System.UIConsts, FMX.Layouts;
type
TForm1 = class( TForm )
procedure FormCreate ( Sender : TObject );
procedure CreateRectangle( Color : Integer; Align : TAlignLayout );
private
{ private 宣言 }
public
{ public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.fmx}
procedure TForm1.FormCreate( Sender : TObject );
begin
// Rectangleを左寄せで5個追加
CreateRectangle( claBlue , TAlignLayout.Left ); // 青
CreateRectangle( claRed , TAlignLayout.Left ); // 赤
CreateRectangle( claGreen , TAlignLayout.Left ); // 緑
CreateRectangle( claYellow, TAlignLayout.Left ); // 黄
CreateRectangle( claPurple, TAlignLayout.Left ); // 紫
end;
procedure TForm1.CreateRectangle( Color : Integer; Align : TAlignLayout );
var
RectAngle : TRectangle;
begin
RectAngle := TRectAngle.Create( Self );
RectAngle.Parent := Self;
RectAngle.Fill.Color := Color;
RectAngle.Width := 100;
RectAngle.Align := TAlignLayout.Left;
RectAngle.Visible := TRUE;
end;
end.
生成して並べた順番は、青、赤、緑、黄、紫のはずですが、
なぜか下の画像の様になります。
これを正しい順序に行うには、Positionプロパティの座標が鍵でした。
Alignプロパティを設定する前に、
TTAlignLayout.Left なら、右方向の位置に、
TAlignLayout.Top なら、下方向の位置に設定しておく事で解決できました。
【FMXコード】
RectAngle := TRectAngle.Create( Self );
RectAngle.Parent := Self;
RectAngle.Fill.Color := Color;
RectAngle.Width := 100;
RectAngle.Position.X := Integer( Align = TAlignLayout.Left ) * Self.Width;
RectAngle.Position.Y := Integer( Align = TAlignLayout.Top ) * Self.Height;
RectAngle.Align := TAlignLayout.Left;
RectAngle.Visible := TRUE;
※ Mr.XRAY様、投稿番号11212は、途中で送信してしまいました。
削除をお願いします。m(_ _)m
|