現在、プリクラのように、画像に文字を貼り付けるものを作っています。
マウスアップイベントで、TImage.Picture.Bitmap.Canvas.TextOutを使用し、表示画像にテキストを出力しています。
と、ここまでは出来たのですが、、、
マウスカーソルにくっついて文字を移動させる方法がわかりません。
カーソルを、その文字列に変更させるイメージなんですが・・・。
教えてください。
よろしくお願いしますっ!!
すいません。
カーソルを変更するのではなく、カーソルのところに貼り付けたい文字がある感じです。
それで、クリックしたら、その場所に、その文字を貼り付けたいんです。
上記方法では、カーソルがある所に文字を描画することは出来るのですが、細かい位置調整とかが出来ないので、今回の方法を実現させたいと思いました。
よくあるスタンプ機能的な感じなんですが。。。
分かり辛いでしょうか・・・?(;^_^A
なんらかのWindowに文字を描画して
リージョンで文字だけ切り抜いて
マウスに追随させたり。
するとよいのではないでしょうか。
私は実装したことないのでなんとも答えにくいのですが。
例えばラベルのドラッグなどは以下のようにしてできますが、
参考にはならないでしょうか?
{ Private 宣言 }
g_boDuringDown: Boolean;
g_iX, g_iY: integer;
procedure TForm1.Label1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
g_boDuringDown := True;
g_iX := X;
g_iY := Y;
end;
procedure TForm1.Label1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if g_boDuringDown then begin
Label1.Left := Label1.Left + (X - g_iX);
Label1.Top := Label1.Top + (Y - g_iY);
end;
end;
procedure TForm1.Label1MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
g_boDuringDown := False;
end;
Fusaさん回答ありがとうございます。
文字だけ別Windowですか、、、考えてませんでした^^;
ちょっとやってみたいと思います!!
deldelさん回答ありがとうございます。
ラベルのドラッグですかっ。
ドラッグではなくて、コンポーネント内に入ったら・・・って感じにすればいけそうな気もしますね。。。
お二方、ありがとうございます。
いやぁ、もうすこし簡単に出来ると思ったんですけどね。。。^^;
頑張ってみます!!
他の方法、ヒントも募集してます。
お願いします☆★
スタンプとは異なりますが、私がとっている方法は、
あるボタンで、文字入力モードに設定し、
文字入力モードであれば、イメージ上のクリックでその位置にテキストボックスを表示・入力させています。
入力中でも、別な位置をクリックすれば テキストボックスはその位置に移動します(調整可能になるの意)もちろん、テキストボックスの内容は
そのままです。
実際の貼り付けは、テキストボックスでEnterキーで、その位置に
TextOutしています。
テキストボックスのフォントを指定しているFontに合わせれば
サイズ・位置関係も正しくわかりますし。
クリックで、貼り付けとはタイミングが違うので どうかとは思いますが
ひとつの方法として。
返事が遅くなり申し訳ありません(ネット環境で問題が^^;)。
皆様、いろいろと参考になる回答、ありがとうございます。
deldelさんの方法をアレンジして実現することにしました。
本当にありがとうございましたm(_ _)m
ツイート | ![]() |