掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
OnPintでのCase文 (ID:49743)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
yTakeです。 FMXでTPaintBoxの”OnPaint”でCase文があるとうまく描画されません。 以前、試した時はうまく行った様に思いますが、改めて試すとうまく行きません。 PaintBox1の"ClipChildren"を"True"としています。 テスト1: procedure TForm3.PaintBox1Paint(Sender: TObject; Canvas: TCanvas); var rectF : TRectF; str : String; begin rectF := TRectF.Create( 50, 50, 200, 200 ); Canvas.Clear( claWhite ); Canvas.DrawRect( rectF, 25, 35, ALLCorners, 1.0 ); rectF := TRectF.Create( 50, 100, 50 + 100, 100 + 25 ); str := 'Hello World!!'; Canvas.Fill.Kind := TBrushKind.Solid; Canvas.Fill.Color := claGreen; // Canvas.Clear( claWhite ); Canvas.FillText( rectF, str, False, 1.0, [], TTextAlign.taCenter, TTextAlign.taCenter ); end; テスト2 procedure TForm3.PaintBox1Paint(Sender: TObject; Canvas: TCanvas); var rectF : TRectF; str : String; begin case status of 1: begin rectF := TRectF.Create( 50, 50, 200, 200 ); Canvas.Clear( claWhite ); Canvas.DrawRect( rectF, 25, 35, ALLCorners, 1.0 ); end; 2: begin rectF := TRectF.Create( 50, 100, 50 + 100, 100 + 25 ); str := 'Hello World!!'; Canvas.Fill.Kind := TBrushKind.Solid; Canvas.Fill.Color := claGreen; // Canvas.Clear( claWhite ); Canvas.FillText( rectF, str, False, 1.0, [], TTextAlign.taCenter, TTextAlign.taCenter ); end; else ShowMessage( 'RePaint!' ); end; end; procedure TForm3.Button1Click(Sender: TObject); begin status := 1 ; PaintBox1.OnPaint( Sender, PaintBox1.Canvas ); end; procedure TForm3.Button2Click(Sender: TObject); begin status := 2 ; PaintBox1.OnPaint( Sender, PaintBox1.Canvas ); end; statusはグローバル変数 としています。 テスト1の結果: 実行すると、矩形が描画され文字列も表示されます。 配置されたPaintBox1の原点(左上)を基点に指定された座標に描画表示されます。 テスト2の結果: 実行すると、起動直後に”RePaint!!”が2回表示されます。もちろん、矩形や文字列データは出ません。 しかしながら、Button1をクリックしても矩形は描画されません。Button2をクリックしても文字列は表示されません。 デバッガで追ってみましたが、正しくCase文を通過し、DrawRect、FillTextを実行しています。が、何も出ません。 Case文を外すと、描画表示されます。 ”OnPaint”の中ではCase文は使えないのでしょうか? 根本的に何か間違っているでしょうか? ご教示頂けると幸いです。 当方、32ビットWindows10+DELPHI XE6+FMX
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.