絵入りカレンダーソフトを作っています.
そこで、画像をロードしたImage.Canvasに直接、文字を書き込みたいのですが、うまくいきません。とりあえず、このサイト(?)にあったInputBoxを利用したものを使っていますが、もし直接書き込みができる方法があれば教えていただきたいのですが。よろしくお願いします。
環境:WindowsXP.Delphi6
どうもよくわからないですけど TStringGrid の InplaceEdit みたいのをお望み
でしたら、自分でインスタンスをつくって OnClick なんかで制御するしかないです。
『書き込みたい』のであればImage.Canvas.TextOutで事足りますが、
もしかしたら『打ち込みたい』のでしょうか?
うーむさんの考えているのは、こんなことでしょうか?
BorderStyle = bsNone のEditを一個非表示にしておいて、
入力が必要になったときに、Editの位置を変えて表示。
あくちぶこんとろーるが、ほかのコントロールに移動したときとか
Enterで文字を確定しる。
このときCanvasの表示も更新。
うーむさん、ちょっと気になったのですがさん、おっさん、さっそくのレスありがとうございます。言葉が足りないようですので補足します。
フォトレタッチ・ソフトによくあるような、画像上でキャレットが点滅する位置に直接「ことば」などを打ち込めるプログラムを教えていただきたいのです。
いま、代用(?)しているのは、image1.Canvas上でマウスクリックすると、inputBoxが出て、そこに'こんにちは!'と書き込みするとクリック位置にその言葉が表示されるもので(image1.Canvas.Brush.style:=bsClearで)、確かこのサイト上にあるものだと思いますが、利用させてもらっています。
よろしくお願いします。
みなさんのレスに答えていないようなので、追加します。
うーむさん、TstringGridは使いませんし、InplaceEditの使用例はどこかにあったようですが、意味があまりよくわかりません。
ちょっと気になったのですがさん、その通りです。『打ち込みたい』のです。
おっさん、のは、後で試してみます。
> その通りです。『打ち込みたい』のです。
それは caret 制御したり、大変そうですね。できたら、わたしも聞きたい。
おっさん、の試してみましたが力量がないのかうまく行きませんでした。
結果的に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;
ちょっと、大変なのでしょうか。
http://homepage1.nifty.com/cosmic/delphi/vcl.html
の、
「背景透明化可能 拡張エディット&メモ」
をImageの上に配置し(背景透明、枠線なし)、
文字入力後、メモのTextをImageのCanvasにTextOutする、
ということをしたことがあります。参考までに・・・・
最初の質問文章では,InputとCanvasへの描画の関係が理解できなかった
のですが...
deldelさんのレスにあるパンタグラフさんのコンポを利用したサンプルを
作ってみました.こういうことなのではないかと思うのですが...
http://homepage2.nifty.com/Mr_XRAY/Delphi/plSamples/T_TextOnImage.htm
deldelさん、ありがとうございました。早速ご指摘のコンポーネントを利用させていただき、実行してみました。ほとんどOK(コンポの移動で背景が一緒に移動してしまうのが解決できなかったのですが)だと思っていたところ、MR.XRAYさんがソースつきで解説をいただき一気に氷解、解決です。MR.XRAYさん、ほんとにありがとうございました。思い通りのカレンダーが作れそうです。
それに、コンポーネン提供者のhttp://homepage1.nifty.com/cosmic/delphi/vcl.htmlのfumika(?)さん、
ありがとうございました。透明なコンポーネントを勉強してみます。
Mr.XRAYさん、仕事がむちゃくちゃ速いですねぇ・・・
驚きです!!見習わねば!!
>Mr.XRAYさん、仕事がむちゃくちゃ速いですねぇ・・・
いや,違うんです.だいぶ前にそのコンポを使用して作成したコードを,
サンプル用に書き直しただけなんです(つまり削った).
# あっ,黙っていた方がいい気分になれたかな.(^^ゞ
ツイート | ![]() |