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

[問題]有關小畫家"繪圖"以及"選取"功能,會衝到~@@"

尚未結案
id7d061
一般會員


發表:1
回覆:2
積分:0
註冊:2006-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-29 16:11:17 IP:218.171.xxx.xxx 未訂閱
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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-11-29 16:28:33 IP:218.171.xxx.xxx 未訂閱
= ='
抱歉浪費大家寶貴的時間
問題已解決 多謝大家......抱歉了
請版主刪掉這文章.多謝了
系統時間:2024-04-27 9:59:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!