全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1887
推到 Plurk!
推到 Facebook!

如何計算兩點長度

尚未結案
bd123777
一般會員


發表:1
回覆:1
積分:0
註冊:2009-08-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-08-13 11:12:58 IP:61.230.xxx.xxx 訂閱
新手發問:
我想在一張圖片上,MouseDown一下後,移到另一點再Mousedown,能顯示出一條線,並於Label上顯示出長度(是要用pixel換算成mm嗎?)感激不盡
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-08-13 11:25:49 IP:59.112.xxx.xxx 訂閱
1. 劃一條線
用 Canvas.moveTo , LineTo 這兩個
2. 長度
用畢氏定理吧....
MouseDown 的時候可以取得X,Y

===================引 用 bd123777 文 章===================
新手發問:
我想在一張圖片上,MouseDown一下後,移到另一點再Mousedown,能顯示出一條線,並於Label上顯示出長度(是要用pixel換算成mm嗎?)感激不盡
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-08-13 11:28:31, 註解 無‧
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-08-13 11:35:53 IP:61.218.xxx.xxx 未訂閱
bd123777
一般會員


發表:1
回覆:1
積分:0
註冊:2009-08-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-08-13 12:03:03 IP:61.230.xxx.xxx 訂閱
我把我的code貼上來
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls;
type
TForm1 = class(TForm)
Image1: TImage;
Button1: TButton;
procedure Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
image1.Picture:=nil;
image1.canvas.pen.Color := clred;
image1.Canvas.pen.Width := 1;
image1.canvas.Ellipse(x 10,y 10,x-10,y-10);
//到這裡我就不會了...
end;
end.
//這樣程式執行後可出現圓圈,但我想在點完一個圓圈後,在點第二個圓圈,然後形成一條線,並顯示出長度.......
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-08-13 16:31:56 IP:59.112.xxx.xxx 訂閱
參考hagar 大提供的function, 我直接畫在form 上面

unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Math;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
OldX,OldY:integer;
implementation
{$R *.dfm}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var iPixels:integer;
rLen:real;
begin
canvas.pen.Color := clred;
Canvas.pen.Width := 1;
canvas.Ellipse(x 10,y 10,x-10,y-10);
if OldX <> 0 then
begin
iPixels := Round( Power( Power(ABS(OldX-X),2) Power(ABS(OldY-Y),2) , 0.5 )) ;
rLen := iPixels / ( PixelsPerInch / 2.54 );
Caption := FloattoStr( RoundTo( rLen, -1 ) );
end;
OldX := X;
OldY := Y;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
OldX := 0;
OldY := 0;
end;
end.
------
額有朝天骨,眼中有靈光
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2009-08-13 16:33:24 IP:61.218.xxx.xxx 未訂閱
// 畫線部份

unit Unit3;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Math, StdCtrls;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
FX1, FY1: integer;
FX2, FY2: integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
Self.Canvas.Pen.Color := clBlue;
Self.Canvas.MoveTo(X, Y);
FX1 := X;
FY1 := Y;
end;
procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
a,b: integer;
c: Extended;
inch: Extended;
xmm, ymm: Extended;
begin
Self.Canvas.LineTo(X, Y);
FX2 := X;
FY2 := Y;
a := Abs(FX1 - FX2);
b := Abs(FY1 - FY2);
c := Sqrt(Power(a, 2) Power(b, 2)); // 算長度
end;
end.
編輯記錄
hagar 重新編輯於 2009-08-13 16:34:45, 註解 無‧
Ktop_Robot
站務副站長


發表:0
回覆:3511
積分:0
註冊:2007-04-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2009-08-17 19:40:02 IP:000.000.xxx.xxx 未訂閱
提問者您好:


以上回應是否已得到滿意的答覆?


若已得到滿意的答覆,請在一週內結案,否則請在一週內回覆還有什麼未盡事宜,不然,
將由版主(尚無版主之區域將由副站長或站長)自由心證,選擇較合適之解答予以結案處理,
被選上之答題者同樣會有加分獎勵同時發問者將受到扣 1 分的處分。不便之處,請見諒。


有問有答有結案,才能有良性的互動,良好的討論環境需要大家共同維護,感謝您的配合。

------
我是機器人,我不接受簡訊.
系統時間:2024-04-30 7:17:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!