線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1084
推到 Plurk!
推到 Facebook!

使用滑鼠改變矩形大小

尚未結案
jjoey.tw
一般會員


發表:29
回覆:19
積分:9
註冊:2004-11-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-08 11:49:40 IP:211.72.xxx.xxx 未訂閱
請問各位高手,如何使用滑鼠改變矩形大小,謝謝! kiwi
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-08 17:27:05 IP:203.204.xxx.xxx 未訂閱
你可以藉由MouseMove,MouseDown,MouseUp三個事件來配合達到你要的結果~例如下例~不過畫面的重畫要注意一下~不然會有殘影~  
 
bool enter=false;
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
      if(enter)
         Image1->Canvas->Rectangle(10,10,X,Y);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    enter=true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
     enter=false;
}
jjoey.tw
一般會員


發表:29
回覆:19
積分:9
註冊:2004-11-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-12 19:49:28 IP:211.78.xxx.xxx 未訂閱
請問各位高手,矩形為一開始就存在的,之後我要使用滑鼠改變矩形大小,謝謝! kiwi
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-13 02:31:35 IP:203.204.xxx.xxx 未訂閱
引言: 請問各位高手,矩形為一開始就存在的,之後我要使用滑鼠改變矩形大小,謝謝! kiwi
你好~事實上我上面的例子即是針對已使用Image1->Canvas->Rectangle(...)所 事先繪製好的矩型進行簡單的右下角變化~所以我上面布林值一開始即設定為FALSE 如果說你不只要只針對右下角那你可再程式執行時讓滑鼠去和矩型的端點進行比 較好決定要跟改的為向左擴展或向右變化等等~~或許你可使用Shape元件更方便 抓Shape的座標
jjoey.tw
一般會員


發表:29
回覆:19
積分:9
註冊:2004-11-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-13 14:35:28 IP:203.64.xxx.xxx 未訂閱
請問各位高手,如rogan321所說的向左擴展或向右變化,該如何寫此段程式,謝謝! kiwi
jjoey.tw
一般會員


發表:29
回覆:19
積分:9
註冊:2004-11-01

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-21 09:59:40 IP:211.78.xxx.xxx 未訂閱
請問各位高手,我參考下列範例,仍然做不出來,希望有人能幫我,謝謝! http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25473&ARCHIVE= (1)宣告一個 flag (bool bMouseDown 為 member 或全域變數) (2)在 TImage 的 OnMouseDown 將 bMouseDown 設為 true (3)在 TImage 的 OnMouseUp 將 bMouseUp 設為 false (4)將 TImage 分為九塊區域,假設 TImage 原本的 Rect(0, 0, 100, 100) 則分為 Rect左上(0, 0, 2, 2), Rect上(2, 0, 98, 2), Rect右上(98, 0, 100, 2), Rect右(98, 2, 100, 98), Rect右下(98, 98, 100, 100), Rect下(2, 98, 98, 100), Rect左下(0, 98, 2, 100), Rect左(0, 2, 2, 98), Rect中(2, 2, 98, 98) (5)最後一塊 Rect中 在正中央(不作用),Rect(上,下)可對 Height 改變, Rect(左,右)可對 Width 改變,Rect(左上,右上,右下,左下)可同時對 Width 及 Height 做改變 (6)宣告二個 int (int iXOffset, int iYOffset 為 member 或全域變數) (7)當 bMouseDown 為 true 的時候,偵測 cursor 的位置,看落在上面九塊區 域中的哪一塊,然後分別算出 iXOffset, iYOffset 的值 (8)根據(7)中的資訊,就可以對 TImage 做 size 的改變了 kiwi
rogan321
高階會員


發表:21
回覆:307
積分:200
註冊:2003-05-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-02-13 20:52:21 IP:203.204.xxx.xxx 未訂閱
//--------------------------------------------------------------------
#include 
#pragma hdrstop
#include "Unit1.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int mouseDown;
int mouseMove;
int x1,x2,y1,y2,x3,y3,xc,yc;
//--------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{ mouseDown=0;
  mouseMove=0;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    mouseDown=1;   //在這裡你可針對你原本即存在的矩形抓取端點給x1和y1
    x1=X;         //此範例是產生一個新的矩形,所以抓Image的X,Y
    y1=Y;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
{
 if(mouseDown==1&& mouseMove==0)
 {
  Image1->Canvas->Pen->Color=clRed;
  Image1->Canvas->Rectangle(x1,y1,X,Y);
  xc=X;
  yc=Y;
 }
 mouseMove=1;
 if(mouseDown==1&& mouseMove==1)
 {
  Image1->Canvas->Pen->Color=clWhite;
  Image1->Canvas->Rectangle(x1,y1,xc,yc);
  Image1->Canvas->Pen->Color=clRed;
  Image1->Canvas->Rectangle(x1,y1,X,Y);
  xc=X;
  yc=Y;
 }
}
//--------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
  mouseDown=0;
}
//--------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
  Image1->Canvas->Pen->Color=clRed;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
   mouseDown=0;
   mouseMove=0;
   x1=X;
   y1=Y;
}
//--------------------------------------------------------------------     
發表人 - rogan321 於 2005/02/13 20:53:35
jjoey.tw
一般會員


發表:29
回覆:19
積分:9
註冊:2004-11-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-02-14 11:07:01 IP:61.218.xxx.xxx 未訂閱
rogan321, 真是感謝你,我的矩形問題解決了,我是用TShape解決的。 參考 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=25473&ARCHIVE= kiwi
系統時間:2024-05-17 14:15:52
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!