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

利用mil函式庫開發程式時,動態畫面上無法顯示設置的座標線

尚未結案
hipig
高階會員


發表:31
回覆:75
積分:111
註冊:2007-01-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-12-23 16:36:41 IP:140.126.xxx.xxx 未訂閱
我在利用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, 註解 無‧
系統時間:2024-05-20 4:51:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!