Canvasに文字を表示するには

解決


Taku  2003-01-01 06:41:41  No: 2479

canvas.pen.mode:=pmNot として
MouseMoveで線や円を描いて消してを繰り返し
マウスに追従して線や円が動いて見えるように出来るのですが
文字の場合は、Font.mode なんて無いので、同様のことは無理でしょうか?


Kenji  2003-01-01 09:32:55  No: 2480

文字はペンのモードによる変化がないようです。

ドロー系のソフトであれば線や文字のデータ(座標など)を変数で保存しておき、
毎回再描画する方法が簡単です。

他の方法は2つぐらい。

方法1:
基本的には描く&消すなんですが、ただ四角形で塗りつぶすと線なども消えて
しまうので、再描画させる必要があります。
InvalidateRectなどのAPIを使う方法もありますが、面倒なので

マウスの位置で始点の座標を保存
TextWidth、TextHeightでテキストの幅・高さを求める
CopyRectで他のCanvasに元の画像を保存
普通に文字を描画

としておき、次にマウスが動いたときに元の絵を描画した後、再度上記のことを
するようにしたらいいと思います。

方法2:
他のCanvasに文字を描き、コピーモードをNotなどにしてメインのCanvasに描画
する。最も簡単だと思う。


Taku  2003-01-01 21:55:28  No: 2481

Kenjiさん  新年早々に有難うございます
やはり、線の描画のように簡単には無いのですね

この操作途中にはマウスホイールによる画面の拡大縮小や移動もあり
その都度CopyRectが必要です
文字が描画された後に元画面をCopyするとその文字も入ってしまうので
元画面を書き直してからという事になるのですが、その線要素は数千単位で
処理がMauseMoveに追従しません。

でもアドバイス頂いた、他のCanvasに描く方法を上手く使えば出来そうな感じですので
もう少し、考えてみます


Taku  2003-01-02 23:45:56  No: 2482

Kenjiさん  有難うございました  
他のCanvasに書き込むタイミングを条件によって変えることで、うまく出来ました
CopyRectを頻繁に行うのはパフォーマンスが落ちると思っていましたが
遅いCPUでも問題なく動作してくれました。

最後になりましたが、みなさん本年もよろしくお願いします


※返信する前に利用規約をご確認ください。








  このエントリーをはてなブックマークに追加