[問題]有關小畫家"繪圖"以及"選取"功能,會衝到~@@" |
尚未結案
|
id7d061
一般會員 發表:1 回覆:2 積分:0 註冊:2006-09-28 發送簡訊給我 |
1.當我載入圖片.並且要在上面畫畫時.會變成-選取功能-程式碼如下
請問我要如何做設定.才能有辦法去驅動我想要的功能,例如按-畫筆-即可繪圖 而按-選取-即可選取~不會跟繪圖去衝突到!!拜託了!謝謝高手們 Form1上有Image1和Image2 宣告部份: #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1int Dragtop,Dragleft,Dragbuttom,Dragright; int Dragflag=0; TRect CRect; TRect TempRect; //---------------------------------------------------------------- fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { Image2->Hide(); Dragtop=0; Dragleft=0; Dragbuttom=Image1->Height; Dragright=Image1->Width; void __fastcall TForm1::BrushColorClick(TObject *Sender) { // 設定筆刷顏色,也就是填入範圍的顏色 ColorDialog1->Color = Image1->Canvas->Brush->Color; if (ColorDialog1->Execute()){ Image1->Canvas->Pen->Color = ColorDialog1->Color; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { //確認Image1的部分是否為空.並且提醒"請載入圖片"跟"自定色彩" if (Image1->Picture->Bitmap->Empty==true) ShowMessage("請先載入圖片!!"); else { ShowMessage("請由自訂色彩選擇"); } flagClick = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (flagClick){ //判斷滑鼠是否按下? flagPlot = true; Image1->Canvas->MoveTo(X, Y); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Image1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { flagPlot = false; //偵測滑鼠是否放開? } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Form1->DoubleBuffered = true; //判斷滑鼠是否有按下 flagClick = false; flagPlot = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::Image2MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { Image1->Canvas->MoveTo(X,Y); } //------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //確認Image1的部分是否為空.並且提醒"請載入圖片" if (Image1->Picture->Bitmap->Empty==true) ShowMessage("請由塗鴉做設定!!"); else{ //將Image1的圖片做復原的動作 Image1->Picture->Graphic=NULL;} } //--------------------------------------------------------------------------- void __fastcall TForm1::N33Click(TObject *Sender) { // 開啟另一個Form,用來設定新畫布(Image1)的大小 Graphics::TBitmap *Bitmap; if (Image1->Picture->Bitmap->Empty==true) ShowMessage("請先選擇你的畫布大小!!"); Form9->ActiveControl = Form9->WidthEdit; Form9->WidthEdit->Text = IntToStr(Image1->Picture->Graphic->Width); Form9->HeightEdit->Text = IntToStr(Image1->Picture->Graphic->Height); if (Form9->ShowModal() != IDCANCEL){ // 建立一個TBitmap來存放圖形資料 Bitmap = new Graphics::TBitmap(); // 此圖形長寬是由使用者自行設定 Bitmap->Width = StrToInt(Form9->WidthEdit->Text); Bitmap->Height = StrToInt(Form9->HeightEdit->Text); Image1->Picture->Graphic = Bitmap; CurrentFile = EmptyStr; } } //--------------------------------------------------------------------------- void __fastcall TForm1::Image1DragOver(TObject *Sender, TObject *Source, int X, int Y, TDragState State, bool &Accept) //用滑鼠左鍵來選取一個範圍(按下) { Image1->Canvas->Rectangle(Dragleft,Dragtop,Dragright,Dragbuttom); if(Dragflag!=1) { if(Dragflag==2) Image1->Canvas->Rectangle(Dragleft,Dragtop,Dragright,Dragbuttom); Dragleft=X; Dragtop=Y; Dragflag=1; } Dragright=X; Dragbuttom=Y; Image1->Canvas->Rectangle(Dragleft,Dragtop,Dragright,Dragbuttom); } //--------------------------------------------------------------------------- void __fastcall TForm1::Image1EndDrag(TObject *Sender, TObject *Target, int X, int Y) { Dragflag=-1; //用滑鼠左鍵選取一個範圍--(放開) int temp; if(Dragtop>Dragbuttom) { temp=Dragtop; Dragtop=Dragbuttom; Dragbuttom=temp; } if(Dragleft>Dragright) { temp=Dragleft; Dragleft=Dragright; Dragright=temp; } Image1->Canvas->Pen->Mode=pmCopy; } //--------------------------------------------------------------------------- void __fastcall TForm1::Image1StartDrag(TObject *Sender, TDragObject *&DragObject) { Image1->Canvas->Brush->Style=bsClear; Image1->Canvas->Pen->Style=psDash; Image1->Canvas->Pen->Mode=pmNotXor; } //--------------------------------------------------------------------------- void __fastcall TForm1::N27Click(TObject *Sender) { //cut TempRect=Rect(0,0,Dragright-Dragleft-2,Dragbuttom-Dragtop-2); CRect=Rect(Dragleft 1,Dragtop 1,Dragright-1,Dragbuttom-1); Image2->Height=Dragbuttom-Dragtop-2; Image2->Width=Dragright-Dragleft-2; Image2->Canvas->CopyMode = cmSrcCopy; Image2->Canvas->CopyRect(TempRect,Image1->Canvas,CRect); Image1->Canvas->CopyMode = cmWhiteness; Image1->Canvas->CopyRect(CRect,Image1->Canvas,CRect); Image2->Canvas->CopyRect(TempRect,Image2->Canvas,TempRect); Clipboard()->Clear(); Clipboard()->Assign(Image2->Picture); } //--------------------------------------------------------------------------- void __fastcall TForm1::N28Click(TObject *Sender) { //copy TempRect=Rect(0,0,Dragright-Dragleft-2,Dragbuttom-Dragtop-2); CRect=Rect(Dragleft 1,Dragtop 1,Dragright-1,Dragbuttom-1); Image2->Height=Dragbuttom-Dragtop-2; Image2->Width=Dragright-Dragleft-2; Image2->Canvas->CopyMode = cmSrcCopy; Image2->Canvas->CopyRect(TempRect,Image1->Canvas,CRect); Image1->Canvas->CopyMode = cmWhiteness; Image2->Canvas->CopyRect(TempRect,Image2->Canvas,TempRect); Clipboard()->Clear(); Clipboard()->Assign(Image2->Picture); } //--------------------------------------------------------------------------- void __fastcall TForm1::N29Click(TObject *Sender) { //paste Graphics::TBitmap *Bitmap; Bitmap = new Graphics::TBitmap(); try{ Bitmap->Assign(Clipboard()); Image1->Canvas->CopyMode = cmSrcCopy; Image1->Canvas->Draw(Dragleft,Dragtop,Bitmap); delete Bitmap; } catch(...){ delete Bitmap; } } //--------------------------------------------------------------------------- void __fastcall TForm1::PopupMenu1Popup(TObject *Sender) { /*以下這段是用來判斷滑鼠-右鍵-功能是否有被驅動,當IMAGE1為null時, 滑鼠右鍵功能,無法使用*/ if(Dragflag==-1) { N27->Enabled=true; //N27為剪下的按鈕名稱 N28->Enabled=true; //N28為複製的按鈕名稱 } else { N27->Enabled=false; N28->Enabled=false; } if(Clipboard()->HasFormat(CF_BITMAP)) N29->Enabled=true; //N29為貼上的按鈕名稱 else N29->Enabled=false; } |
id7d061
一般會員 發表:1 回覆:2 積分:0 註冊:2006-09-28 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |