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

自己寫的副程式要使用BCB的元件(繼承問題)??

尚未結案
WHungYun
一般會員


發表:5
回覆:6
積分:2
註冊:2004-04-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-24 15:16:46 IP:61.221.xxx.xxx 未訂閱
問題如下    我在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-24 15:29:08 IP:140.135.xxx.xxx 未訂閱
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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-24 18:57:46 IP:61.221.xxx.xxx 未訂閱
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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-24 19:16:12 IP:140.135.xxx.xxx 未訂閱
您好:您程式當中
void __fastcall TForm1::Image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
        //void __fastcall change_XY(int,int);  這一行是多餘的
        change_XY(X,Y);
}
順心 發表人 -
kangbo
一般會員


發表:2
回覆:2
積分:0
註冊:2003-06-09

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-25 00:33:45 IP:218.164.xxx.xxx 未訂閱
Form1->LabeledEdit1 -> Text = IntToStr(goble_x); Form1->LabeledEdit2 -> Text = IntToStr(goble_y); Form1->Image1 -> Canvas -> Ellipse(........); 這樣應該也行喔
系統時間:2024-06-29 17:04:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!