利用mil函式庫開發程式時,動態畫面上無法顯示設置的座標線 |
尚未結案
|
hipig
高階會員 發表:31 回覆:75 積分:111 註冊:2007-01-15 發送簡訊給我 |
我在利用mil開發程式時,有在程式畫面上設計類似繪圖軟體的框選,滑鼠軌跡線和中心線。
利用PaintBox疊合在原來負責顯示的ScrollBox Handle上面,在靜態畫面 (M_SYSTEM_VGA)下是可行的。但在動態畫面下(呼叫數位設備啟動影像擷取卡擷取時) 卻無法正常顯示,在新的METEOR-II影像卡上連popupmenu都跳不出來(被影像蓋住了)。 在METEOR-II/MC影像卡上下則是PaintBox畫的會無法正常顯示,只有在CORONA影像卡上才 正常顯示,不知是否因為這張卡內建顯示所以預先處理過顯示畫面了。 請問要改用何種方式或寫法才可以正常顯示如CAD軟體一樣的滑鼠軌跡線 感謝 (附上一張我希望能在畫面動態下做到的情況(畫面是M_SYSTEM_VGA下實做的情況),主要 是顯示滑鼠的紅色軌跡線和綠色的框選線及座標) [code cpp] //繪圖及框選方式 //2007-12-23 16:41:34 void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { PaintBox1->Refresh(); Mouse_Move = 1; MouseDraw = 1; First_Position_X = X; First_Position_Y = Y; PaintBox1->Canvas->MoveTo(X, Y); DrawMouseMOVE(X, Y); PaintBox1->Canvas->Brush->Style = bsClear; PaintBox1->Canvas->Font->Color = clLime; MouseMOVEFont(X, Y); DrawMouseBOX(); //限制滑鼠移動 TRect Rect = PaintBox1->BoundsRect; MapWindowPoints(PaintBox1->Parent->Handle, NULL, (POINT*)&Rect, 2); ClipCursor(&Rect); } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintBox1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if((X >= 0 & X <= IMAGE_WIDTH ) & ( Y>= 0 & Y<=IMAGE_HEIGHT)) { PaintBox1->Canvas->Brush->Style = bsClear; PaintBox1->Canvas->Font->Color = clRed; PaintBox1->Canvas->Pen->Color = clRed; Form1->StatusBar1->Panels->Items[0]->Text = "座標:X:" IntToStr(X) ",Y:" IntToStr(Y); Form1->StatusBar1->Panels->Items[1]->Text = "灰階值->" IntToStr(Graylevel_Value[Y][X]); if(MouseDraw == 0) { PaintBox1->Refresh(); DrawMouseMOVE(X, Y); PaintBox1->Canvas->Brush->Style = bsClear; PaintBox1->Canvas->Font->Color = clRed; MouseMOVEFont(X, Y); } else { PaintBox1->Refresh(); PaintBox1->Canvas->Brush->Style = bsClear; DrawMouseBOX(); PaintBox1->Canvas->Brush->Style = bsClear; PaintBox1->Canvas->Font->Color = clRed; PaintBox1->Canvas->Pen->Color = clRed; DrawMouseMOVE(X, Y); MouseMOVEFont(X, Y); } if(Mouse_Move == 1) { if(MouseDraw == 1) { PaintBox1->Refresh(); PaintBox1->Canvas->Pen->Color = clLime; PaintBox1->Canvas->MoveTo(X,Y); PaintBox1->Canvas->LineTo(X,Y); PaintBox1->Canvas->LineTo(First_Position_X,Y); PaintBox1->Canvas->LineTo(First_Position_X,First_Position_Y); PaintBox1->Canvas->LineTo(X,First_Position_Y); PaintBox1->Canvas->LineTo(X,Y); DrawMouseBOX(); } PaintBox1->Canvas->Brush->Style = bsClear; PaintBox1->Canvas->Pen->Color = clRed; DrawMouseMOVE(X, Y); PaintBox1->Canvas->Font->Color = clRed; PaintBox1->Canvas->Pen->Color = clLime; // PaintBox1->Canvas->Pen->Style = psDashDot; PaintBox1->Canvas->MoveTo(X,First_Position_Y); PaintBox1->Canvas->LineTo(X,Y); PaintBox1->Canvas->LineTo(First_Position_X,Y); // PaintBox1->Canvas->Pen->Color = clBlack; PaintBox1->Canvas->LineTo(First_Position_X,First_Position_Y); PaintBox1->Canvas->LineTo(X,First_Position_Y); PaintBox1->Canvas->Pen->Style=psSolid; // PaintBox1->Canvas->MoveTo(X,Y); PaintBox1->Canvas->Font->Color = clLime; MouseBoxFirst(First_Position_X, First_Position_Y); MouseMOVEFont(X, Y); } } else { Form1->StatusBar1->Panels->Items[0]->Text=""; Form1->StatusBar1->Panels->Items[1]->Text=""; } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintBox1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Mouse_Move = 0; DrawBOX = 1; Final_Position_X = X; Final_Position_Y = Y; Interphase_X = First_Position_X; Interphase_Y = First_Position_Y; PaintBox1->Refresh(); PaintBox1->Canvas->Pen->Color = clLime; PaintBox1->Canvas->MoveTo(X,Y); PaintBox1->Canvas->LineTo(X,Y); PaintBox1->Canvas->LineTo(First_Position_X,Y); PaintBox1->Canvas->LineTo(First_Position_X,First_Position_Y); PaintBox1->Canvas->LineTo(X,First_Position_Y); PaintBox1->Canvas->LineTo(X,Y); PaintBox1->Canvas->Brush->Style = bsClear; PaintBox1->Canvas->Font->Color = clLime; MouseBoxFirst(First_Position_X, First_Position_Y); MouseMOVEFont(X, Y); //儲存座標值 SaveCoordinates(); //解除限制滑鼠移動 ClipCursor(NULL); } void TForm1::DrawMouseBOX(void) //框框 { if(DrawBOX == 1 && Interphase_X != Final_Position_X && Interphase_Y != Final_Position_Y) { PaintBox1->Canvas->Brush->Style = bsClear; PaintBox1->Canvas->Pen->Color = clLime; PaintBox1->Canvas->Font->Color = clLime; PaintBox1->Canvas->MoveTo(Interphase_X, Interphase_Y); PaintBox1->Canvas->LineTo(Interphase_X, Interphase_Y); PaintBox1->Canvas->LineTo(Interphase_X, Final_Position_Y); PaintBox1->Canvas->LineTo(Final_Position_X, Final_Position_Y); PaintBox1->Canvas->LineTo(Final_Position_X, Interphase_Y); PaintBox1->Canvas->LineTo(Interphase_X, Interphase_Y); MouseBoxFirst(Interphase_X, Interphase_Y); MouseBoxFirst(Final_Position_X, Final_Position_Y); } } //--------------------------------------------------------------------------- void TForm1::DrawMouseMOVE(int X, int Y) //滑鼠移動 { PaintBox1->Canvas->Brush->Style = bsClear; PaintBox1->Canvas->Pen->Color = clRed; PaintBox1->Canvas->Font->Color = clRed; PaintBox1->Canvas->MoveTo(X,0); PaintBox1->Canvas->LineTo(X,IMAGE_HEIGHT); PaintBox1->Canvas->MoveTo(0,Y); PaintBox1->Canvas->LineTo(IMAGE_WIDTH ,Y); WBlobCogDraw(); } //--------------------------------------------------------------------------- void TForm1::MouseMOVEFont(int X, int Y) { if(X > IMAGE_WIDTH-46 && Y > IMAGE_HEIGHT-31) { PaintBox1->Canvas->TextOut(X-50, Y-15, "(" IntToStr(X) "," IntToStr(Y) ")" ); } else if(X > IMAGE_WIDTH-46 ) { PaintBox1->Canvas->TextOut(X-50, Y, "(" IntToStr(X) "," IntToStr(Y) ")" ); } else if(Y > IMAGE_HEIGHT-31 ) { PaintBox1->Canvas->TextOut(X, Y-15, "(" IntToStr(X) "," IntToStr(Y) ")" ); } else { PaintBox1->Canvas->TextOut(X, Y,"(" IntToStr(X) "," IntToStr(Y) ")" ); } } //--------------------------------------------------------------------------- void TForm1::MouseBoxFirst(int First_Position_X, int First_Position_Y) { if(First_Position_X > IMAGE_WIDTH-46 && First_Position_Y > IMAGE_HEIGHT-31) { PaintBox1->Canvas->TextOut(First_Position_X-50,First_Position_Y-15,"(" IntToStr(First_Position_X) "," IntToStr(First_Position_Y) ")" ); } else if(First_Position_X > IMAGE_WIDTH-46 ) { PaintBox1->Canvas->TextOut(First_Position_X-50,First_Position_Y,"(" IntToStr(First_Position_X) "," IntToStr(First_Position_Y) ")" ); } else if(First_Position_Y > IMAGE_HEIGHT-31 ) { PaintBox1->Canvas->TextOut(First_Position_X,First_Position_Y-15,"(" IntToStr(First_Position_X) "," IntToStr(First_Position_Y) ")" ); } else { PaintBox1->Canvas->TextOut(First_Position_X,First_Position_Y,"(" IntToStr(First_Position_X) "," IntToStr(First_Position_Y) ")" ); } } //--------------------------------------------------------------------------- [/code] 編輯記錄
hipig 重新編輯於 2007-12-23 16:41:51, 註解 無‧
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |