Image.Canvasに直接、テキスト文字を書き込むには?

解決


tanuton  2005-10-03 13:54:06  No: 17846  IP: 192.*.*.*

絵入りカレンダーソフトを作っています.
そこで、画像をロードしたImage.Canvasに直接、文字を書き込みたいのですが、うまくいきません。とりあえず、このサイト(?)にあったInputBoxを利用したものを使っていますが、もし直接書き込みができる方法があれば教えていただきたいのですが。よろしくお願いします。

環境:WindowsXP.Delphi6

編集 削除
うーむ  2005-10-03 15:24:42  No: 17847  IP: 192.*.*.*

どうもよくわからないですけど TStringGrid の InplaceEdit みたいのをお望み
でしたら、自分でインスタンスをつくって OnClick なんかで制御するしかないです。

編集 削除
ちょっと気になったのですが  2005-10-03 16:44:46  No: 17848  IP: 192.*.*.*

『書き込みたい』のであればImage.Canvas.TextOutで事足りますが、
もしかしたら『打ち込みたい』のでしょうか?

編集 削除
おっ  2005-10-03 17:58:09  No: 17849  IP: 192.*.*.*

うーむさんの考えているのは、こんなことでしょうか?

BorderStyle = bsNone のEditを一個非表示にしておいて、
入力が必要になったときに、Editの位置を変えて表示。
あくちぶこんとろーるが、ほかのコントロールに移動したときとか
Enterで文字を確定しる。
このときCanvasの表示も更新。

編集 削除
tanuton  2005-10-03 18:24:38  No: 17850  IP: 192.*.*.*

うーむさん、ちょっと気になったのですがさん、おっさん、さっそくのレスありがとうございます。言葉が足りないようですので補足します。
フォトレタッチ・ソフトによくあるような、画像上でキャレットが点滅する位置に直接「ことば」などを打ち込めるプログラムを教えていただきたいのです。
いま、代用(?)しているのは、image1.Canvas上でマウスクリックすると、inputBoxが出て、そこに'こんにちは!'と書き込みするとクリック位置にその言葉が表示されるもので(image1.Canvas.Brush.style:=bsClearで)、確かこのサイト上にあるものだと思いますが、利用させてもらっています。
よろしくお願いします。

編集 削除
tanuton  2005-10-03 18:48:38  No: 17851  IP: 192.*.*.*

みなさんのレスに答えていないようなので、追加します。
うーむさん、TstringGridは使いませんし、InplaceEditの使用例はどこかにあったようですが、意味があまりよくわかりません。
ちょっと気になったのですがさん、その通りです。『打ち込みたい』のです。
おっさん、のは、後で試してみます。

編集 削除
それは  2005-10-03 18:54:44  No: 17852  IP: 192.*.*.*

> その通りです。『打ち込みたい』のです。

それは caret 制御したり、大変そうですね。できたら、わたしも聞きたい。

編集 削除
tanuton  2005-10-03 20:03:15  No: 17853  IP: 192.*.*.*

おっさん、の試してみましたが力量がないのかうまく行きませんでした。
結果的にinputBoxの場合と似たようになってしまいました。
例えば、

procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  pt: TPoint;
  s: string;
begin
  image1.Canvas.Brush.Style := bsClear;

  GetCursorPos(pt);
  pt := image1.ScreenToClient(pt);
  s := Edit1.Text;
  Image1.Canvas.TextOut(pt.x,pt.y,s);
end;

ちょっと、大変なのでしょうか。

編集 削除
deldel  2005-10-04 09:26:39  No: 17854  IP: 192.*.*.*

http://homepage1.nifty.com/cosmic/delphi/vcl.html
の、
「背景透明化可能  拡張エディット&メモ」
をImageの上に配置し(背景透明、枠線なし)、
文字入力後、メモのTextをImageのCanvasにTextOutする、
ということをしたことがあります。参考までに・・・・

編集 削除
Mr.XRAY  URL  2005-10-04 14:30:21  No: 17855  IP: 192.*.*.*

最初の質問文章では,InputとCanvasへの描画の関係が理解できなかった
のですが...
deldelさんのレスにあるパンタグラフさんのコンポを利用したサンプルを
作ってみました.こういうことなのではないかと思うのですが...

http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_TextOnImage.htm

編集 削除
tanuton  2005-10-04 15:27:55  No: 17856  IP: 192.*.*.*

deldelさん、ありがとうございました。早速ご指摘のコンポーネントを利用させていただき、実行してみました。ほとんどOK(コンポの移動で背景が一緒に移動してしまうのが解決できなかったのですが)だと思っていたところ、MR.XRAYさんがソースつきで解説をいただき一気に氷解、解決です。MR.XRAYさん、ほんとにありがとうございました。思い通りのカレンダーが作れそうです。
それに、コンポーネン提供者のhttp://homepage1.nifty.com/cosmic/delphi/vcl.htmlのfumika(?)さん、
ありがとうございました。透明なコンポーネントを勉強してみます。

編集 削除
deldel  2005-10-05 09:37:43  No: 17857  IP: 192.*.*.*

Mr.XRAYさん、仕事がむちゃくちゃ速いですねぇ・・・
驚きです!!見習わねば!!

編集 削除
Mr.XRAY  URL  2005-10-05 11:19:49  No: 17858  IP: 192.*.*.*

>Mr.XRAYさん、仕事がむちゃくちゃ速いですねぇ・・・

いや,違うんです.だいぶ前にそのコンポを使用して作成したコードを,
サンプル用に書き直しただけなんです(つまり削った).
# あっ,黙っていた方がいい気分になれたかな.(^^ゞ

編集 削除