分割位置を決めるため画像上のマウスカーソルをラインにするには

解決


武田  2006-08-15 22:58:08  No: 22917

いつもお世話になっています。環境はWindows XP Delphi 6 Personalです。
画像を分割するプログラムを作成していますが、
画像の分割位置を決めるためのカーソルラインの表示方法を教えていただけませんか。
フォームにScrollBoxを貼り付けて、その上にImageコンポーネントを貼り付けて、
Form2.SetViewForm(BMP画像ファイルのフルパスとファイル名);
Form2.ShowModalで表示させています。
マウスの移動についてくる縦線、または横線を表示させる。あたかもマウスの矢印を縦線、横線に変えた感じで。
目的は縦線表示、横線表示を選択して画像の上で分割位置を決めたいのです。
次のようにやってみたのですが、これでは、画面にラインを書いてしまうし、動きもカクカクと動いてしまいます。

procedure TForm2.imgViewMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin
   Xa:=Trunc(X); Ya:=Trunc(X);
   VerticalLine(Xa,Ya);
end;

//縦線を引く
procedure TForm2.VerticalLine(XX,YY:integer);
begin
  imgView.Canvas.MoveTo(XX, 0);
  imgView.Canvas.LineTo(XX, 高さ);
end;
参考として「画文作文」  http://www.vector.co.jp/soft/dl/win95/net/se119753.html
のラインカーソルにしたいのですが。
よろしくお願いいたします。


anan  2006-08-16 07:12:41  No: 22918

その1:Bevelを使う。
その2:Pen.Modeを pmXORに。


deldel  2006-08-16 20:12:53  No: 22919

Bevel1は横線、Bevel2は縦線の形にして・・・

procedure TForm1.FormCreate(Sender: TObject);
begin
  Bevel1.Enabled := False;
  Bevel2.Enabled := False;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Bevel1.Top  := Image1.Top  + Y;
  Bevel2.Left := Image1.Left + X;
end;


武田  2006-08-17 22:33:14  No: 22920

ananさん、deldelさん、
お盆帰省でお礼が遅くなりました。ありがとうございました。
初めて画像処理のプログラムに挑戦しますが、まだ、初歩的な部分が、何が基本かがわからないレベルです。今後ともよろしくお願いします。
さっそくこれらのキーワードが解りましたので、参考資料など集めて、これをベースにしばし勉強します。またわからないときは教えてください。
ありがとうございました。


ゴリの妹  2006-08-18 00:18:11  No: 22921

> 参考として「画文作文」  http://www.vector.co.jp/soft/dl/win95/net/se119753.html

これ使ってみましたが、縦でも横でも線を置こうとしたら、CPU使用率100%になり、ちょっと不快。
まさかタイマー0.01秒単位(数字は適当)で、マウスカーソル位置拾って描画とかしているんだろうか?

さて本題
Bevelじゃなく、Shapeを使う例

procedure TForm1.FormCreate(Sender: TObject);
begin
  Shape1.Top    := 0;
  Shape1.Height := Image1.Height;
  Shape1.Width  := 1;
  Shape2.Left   := 0;
  Shape2.Height := 1;
  Shape2.Width  := Image1.Width;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Shape1.Left := X;
  Shape2.Top  := Y;
end;

時々、カクカクしちゃう(笑)


もにゃ  2006-08-18 09:42:48  No: 22922

これ、結構簡単そうに見えて意外と難しいですよ。
てなわけで需要も結構ありそうなのでコンポーネント作りました。
良かったら使ってください。

ビットマップ専用スクロールボックス(おまけ機能付き)
http://hp.vector.co.jp/authors/VA015390/delphi/ScrollBMPBox001.zip


武田  2006-08-19 22:43:48  No: 22923

ゴリの妹 、もにゃさん、ご指導ありがとうございます。
何かヒントはないかと本日掲示板を訪問したらありがたい追加返事を発見しました。
いま、必死にやっているのですが、意外と難しいですね。
見た目は、汎用ルーチンみたいですが、参考資料も少ないです。

ゴリの妹さん
なるほど、あの例は100%のCPU使用率ですね。気づきませんでした。
異常といえなくもないですね。それだけ無理しているのかも。
もにゃさん  ありがたく試させていただきます。
ありがとうございました。


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

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






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