在Timage控件中实现上图的拖动画虚框的效果? |
答題得分者是:aquarius
|
sos_admin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
![]() unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, jpeg, ExtCtrls; type myrect=record posx,posy,posx1,posy1,posx2,posy2:longint; end; type TForm1 = class(TForm) ScrollBox1: TScrollBox; Image1: TImage; procedure Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private picrect:myrect; { 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 Screen.Cursor:=crHandPoint;//自己作个样式。 if button=mbLeft then begin //第一次单击坐标 picrect.posx1:=x; picrect.posy1:=y; //鼠标释放坐标[最后] picrect.posx2:=x; picrect.posy2:=y; end; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var rect:Trect; toppoint:Tpoint; buttompoint:Tpoint; begin //活动坐标 picrect.posx:=x; picrect.posy:=y; toppoint.X:= picrect.posx1; toppoint.y:= picrect.posy1; buttompoint.X:= picrect.posx; buttompoint.y:= picrect.posy; rect.TopLeft:=toppoint; rect.BottomRight:=buttompoint; if not ((picrect.posx1=-1) and (picrect.posy1=-1)) then begin image1.Canvas.DrawFocusRect(Rect); end; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin //鼠标释放坐标[最后] picrect.posx2:=x; picrect.posy2:=y; //初始化 picrect.posx1:=-1; picrect.posy1:=-1; Screen.Cursor:=crDefault; end; procedure TForm1.FormCreate(Sender: TObject); begin ScrollBox1.DoubleBuffered :=true; //初始化 picrect.posx1:=-1; picrect.posy1:=-1; end; end.可是效果太差了,请问有什么更好的方法! |
AB
高階會員 ![]() ![]() ![]() ![]() 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
|
taishyang
站務副站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
sos_admin您好:
有個範例是包子哥寫的,不過是BCB版本,供您參考
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=34115
【發表】利用滑鼠截取 Image 的部分區域 BY RaynorPao
順心
|
sos_admin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
AB
高階會員 ![]() ![]() ![]() ![]() 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
喔 真的是這樣嗎?
![]() ![]() ![]() |
sos_admin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
AB
高階會員 ![]() ![]() ![]() ![]() 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
sos_admin 兄
安想安應該是知道的 不過無法提供給你tset 你再清楚看看 那4張圖片 那可不是用影像合成 去背喔
由其是第4張 決對符合你說的
所有白色上的 都是可透過滑鼠 隨心異動 與儲存物件x,y並反復使用
由於每個都是 動態產生的 所以你可以把他當成每個都是 Timage
連你說的虛線也是 隨滑鼠x,y自行異動 而外部Timage當然也是ok的
其實全部資訊都可記錄 讓下次要用時 只載各物件x,y資料 這樣把 你可以去問問
1 ccchen (cc欠)= 寶物之人 請拆中國字 哈哈
2 一位delphiwww 資深老delphi
3 寫 麥頭工具的 hahalin 列印版主 問問他們
|
aquarius
資深會員 ![]() ![]() ![]() ![]() ![]() 發表:3 回覆:347 積分:330 註冊:2003-05-21 發送簡訊給我 |
試試這個吧!!
procedure DoDrawRect(can:TCanvas;iX1, iY1, iX2, iY2:integer;dwMode:DWORD) ; begin case dwMode of 1: // xor begin can.Pen.Color:=clBlue ; can.Pen.Mode:=pmXor ; can.Pen.Style:=psDot ; can.Brush.Style:=bsClear ; end ; 2 : // Draw begin can.Pen.Color:=clBlack ; can.Pen.Mode:=pmCopy ; can.Pen.Style:=psSolid ; can.Brush.Style:=bsClear ; end ; else begin can.Pen.Color:=clBlack ; can.Pen.Mode:=pmCopy ; can.Pen.Style:=psSolid ; can.Brush.Style:=bsSolid ; can.Brush.Color:=clWhite ; end ; end ; can.Rectangle(iX1,iY1,iX2,iY2) ; end ; procedure TForm1.Image1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin iStartX:=x ; iStartY:=y ; iOldX:=x ; iOldY:=y ; bDown:=true ; end; procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if not bDown then exit ; DoDrawRect(Image1.Canvas,iStartX,iStartY,iOldX,iOldY,1) ; iOldX:=x ; iOldy:=y ; DoDrawRect(Image1.Canvas,iStartX,iStartY,iOldX,iOldY,1) ; end; procedure TForm1.Image1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin bDown:=false ; DoDrawRect(Image1.Canvas,iStartX,iStartY,iOldX,iOldY,1) ; DoDrawRect(Image1.Canvas,iStartX,iStartY,X,Y,2) ; end; procedure TForm1.FormCreate(Sender: TObject); begin bDown:=false ; end;...Aquarius
------
水瓶男的blog: http://791909.blogspot.com |
sos_admin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
AB
高階會員 ![]() ![]() ![]() ![]() 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
|
sos_admin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
AB
高階會員 ![]() ![]() ![]() ![]() 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
|
sos_admin
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
AB
高階會員 ![]() ![]() ![]() ![]() 發表:166 回覆:262 積分:125 註冊:2003-08-21 發送簡訊給我 |
|
chenliyan163
一般會員 ![]() ![]() 發表:30 回覆:30 積分:12 註冊:2003-09-15 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |