自己寫的副程式要使用BCB的元件(繼承問題)?? |
尚未結案
|
WHungYun
一般會員 發表:5 回覆:6 積分:2 註冊:2004-04-19 發送簡訊給我 |
問題如下 我在Form放置一Image,在Image的OnMouseDown將擷取到的滑鼠座標
傳到我寫的副程式,程式如下
void change_XY(int,int); change_XY(X,Y);然後我寫一個副程式計算座標轉換和在Image畫出圓和弧等功能,以及將轉換之後的座標顯示到LabeledEdit,程式碼如下 void change_XY(int posix,int posiy) { //載入的圖像大小為600*600實際大小為820.6*820.6 //以圖中心點為原點,改為卡式座標 posix=(posix-300)*(820.6/600); posiy=-(posiy-300)*(820.6/600); //在LabeledEdit顯示實際XY座標 LabeledEdit1 -> Text = IntToStr(goble_x); LabeledEdit2 -> Text = IntToStr(goble_y); ..... .... ... }這程式編譯之後會出現我的LabeledEdit1 沒定義 請問各位先進,如果我一定要寫一個副程式來做這些事 那這問題除了用全域變數,然後將 LabeledEdit1 -> Text = IntToStr(goble_x); LabeledEdit2 -> Text = IntToStr(goble_y); Image1 -> Canvas -> Ellipse(........); ....這些程式碼寫在Image的OnMouseDown裡面之外 還有其他解決方法嗎? |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
WHungYun您好:
*.h class TForm1 : public TForm { __published: // IDE-managed Components private: // User declarations void __fastcall change_XY(int,int); public: // User declarations __fastcall TForm1(TComponent* Owner); }; void __fastcall TForm1::change_XY(int posix,int posiy) { //載入的圖像大小為600*600實際大小為820.6*820.6 //以圖中心點為原點,改為卡式座標 posix=(posix-300)*(820.6/600); posiy=-(posiy-300)*(820.6/600); //在LabeledEdit顯示實際XY座標 LabeledEdit1 -> Text = IntToStr(goble_x); LabeledEdit2 -> Text = IntToStr(goble_y); ..... .... ... }做如紅色字體部分的修改即可 <>~我也是在學習的階段,回答的不好請您多多見諒與指教~> 發表人 - |
WHungYun
一般會員 發表:5 回覆:6 積分:2 註冊:2004-04-19 發送簡訊給我 |
taishyang你好:
我照你的方法將整個程式從寫程式碼如下
void __fastcall TForm1::change_XY(int posix,int posiy) { float goble_x,goble_y; goble_x=(posix-300)*(820.6/600); goble_y=-(posiy-300)*(820.6/600); LabeledEdit1 -> Text = FloatToStr(goble_x); LabeledEdit2 -> Text = FloatToStr(goble_y); } void __fastcall TForm1::FormCreate(TObject *Sender) { //Form全螢幕顯示 Form1 -> WindowState = wsMaximized; Form1 -> DoubleBuffered = true; //設定圖檔大小 Image1 -> Width = 600; Image1 -> Height = 600; //設定Image1於Form初始位置 Image1 -> Top=20; Image1 -> Left=20; Image1 -> Picture -> LoadFromFile("600_600.bmp"); } //--------------------------------------------------------------------------- void __fastcall TForm1::Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { void __fastcall change_XY(int,int); change_XY(X,Y); }在h檔加上 //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components TImage *Image1; TLabeledEdit *LabeledEdit1; TLabeledEdit *LabeledEdit2; void __fastcall FormCreate(TObject *Sender); void __fastcall Image1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); private: // User declarations void __fastcall change_XY(int,int); public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //---------------------------------------------------------------------------編譯後出現如下錯誤 [Linker Error] Unresolved external 'change_XY(int, int)' referenced from C:\DOCUMENTS AND SETTINGS\ADMINISTRATOR\桌面\TEST\11\UNIT1.OBJ 再次請問這該如何解決,謝謝! 修改了,如上紅色標示的程式碼,編譯之後還是一樣的錯誤,再次麻煩taishyang,謝謝 發表人 - WHungYun 於 2004/05/24 21:08:10 |
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
kangbo
一般會員 發表:2 回覆:2 積分:0 註冊:2003-06-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |