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

請問:如何將平面上每一個點的座標存入陣列中

尚未結案
林嘉鋒
一般會員


發表:1
回覆:6
積分:1
註冊:2003-11-29

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-29 16:05:04 IP:218.172.xxx.xxx 未訂閱
如何將平面上每一個點的座標存入陣列中 我想把每個點ㄉX,Y座標存入在陣列中 我寫在ImageMousedown底下 可是每次都是存入最後一個點的座標 不知應該要如何才可以把我用滑鼠點一下的點座標都儲存起來... 拜託各位大大幫我解答..... 謝謝
mieng
中階會員


發表:12
回覆:97
積分:81
註冊:2003-10-31

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-29 16:33:46 IP:61.221.xxx.xxx 未訂閱
void __fastcall Tmain::image1MouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
void __fastcall Tmain::image1MouseMove(TObject *Sender, TShiftState Shift,
      int X, int Y)
這兩個事件中的XY就是你要的點座標,直接存起來就好囉 不過記得用陣列存,不然都只會存到最後的值 學習中請大家多多指導呦~~ ☆星霧☆(Mineg Chien WU)
林嘉鋒
一般會員


發表:1
回覆:6
積分:1
註冊:2003-11-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-29 18:56:09 IP:218.172.xxx.xxx 未訂閱
我是用陣列存阿 不過一直都是存到最後一個座標耶 我ㄉ程式碼是這樣:                  void __fastcall TForm1::Image1MouseDown(TObject *Sender,TMouseButton Button, TShiftState Shift, int X, int Y) {    Image1->Canvas->Pen->Width=5;    Image1->Canvas->Pen->Style=psDashDot;    Image1->Canvas->Pen->Color=clRed;    for(int i=0;i<2;i ) { if(Shift.Contains(ssLeft)) { Image1->Canvas->MoveTo(X,Y); Image1->Canvas->LineTo(X,Y); a[i].x=X; a[i].y=Y; Label1->Caption="x=" IntToStr(a[i].x) " y=" IntToStr(a[i].y); } } } 結果一直都是存到最後一個座標耶 一直不懂我哪裡錯ㄌ 麻煩指教.....謝謝

中階會員


發表:36
回覆:142
積分:70
註冊:2003-07-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-29 18:57:32 IP:163.23.xxx.xxx 未訂閱
您好:    參考這個小範例  
 
#include 
#include 
#include "Unit1.h"
#pragma hdrstop
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
FILE *fp ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
  fp = fopen("temp.txt","w") ;
  fclose(fp) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  fp = fopen("temp.txt","a") ;
  fprintf(fp,"\n( %d , %d )",X,Y) ;
  fclose(fp) ;
}
//---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender)
{
  char fstr[20] ;
  int i = 3 ;
    if ((fp=fopen("temp.txt","r"))!=NULL)
      while(!feof(fp))
       {
         fgets(fstr,20,fp) ;
         Canvas->TextOut(3*20,i*20,fstr) ;
         i  ;
       }
  fclose(fp) ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  DeleteFile("temp.txt") ;
}
//---------------------------------------------------------------------------
所有的點都存到文字檔中,於程式結束會將文字檔給刪掉 至於您想存到陣列中,則就是在打開文字檔 看文字檔內有幾行(size),以 new 的方式配置陣列大小 再一個一個寫回 int[size] 中 或者就直接把 while 迴圈看成在輸出陣列值 當然你也可以指定要輸出是哪幾行 稍微修改一下Button1內的程式就可以了 發表人 - 流 於
林嘉鋒
一般會員


發表:1
回覆:6
積分:1
註冊:2003-11-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-29 22:20:47 IP:218.172.xxx.xxx 未訂閱
有比較簡略ㄉ方法嗎?? 因那只是我所要寫ㄉ一部份而已 感謝各位大大.....

中階會員


發表:36
回覆:142
積分:70
註冊:2003-07-24

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-29 23:06:49 IP:163.23.xxx.xxx 未訂閱
您好:    那試試下面的範例  
 
//---------------------------------------------------------------------------
#include 
#pragma hdrstop
#include 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x[10] , y[10] , i=0 ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
  if (i<11)
    {
      x[i] = X , y[i] = Y ;
      i   ;
    }
}
//---------------------------------------------------------------------------    這個方法有個限制,限點於 10 點之內
要驗證對不對就拉幾個 Edit 去測試
Edit1->Text = IntToStr(x[0])   " , "   IntToStr(x[0]) ;
  .  .  .  .
  .  .  .  .
  .  .  .  . 
Edit9->Text = IntToStr(x[9])   " , "   IntToStr(x[9]) ;
祝順心
林嘉鋒
一般會員


發表:1
回覆:6
積分:1
註冊:2003-11-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-30 20:45:04 IP:218.172.xxx.xxx 未訂閱
問題解決ㄌ.....謝謝        總覺得電腦怪怪的.....一下不行....一下又行了.....

中階會員


發表:36
回覆:142
積分:70
註冊:2003-07-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-11-30 22:34:32 IP:163.23.xxx.xxx 未訂閱
您好:    補充一件事,如果您單純的只想畫圖,以下的範例就夠用了 
 
#include 
#include "Unit1.h"
#pragma hdrstop
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int a = 1 ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormMouseDown(TObject *Sender, TMouseButton Button,
      TShiftState Shift, int X, int Y)
{
if (a==1)
  {
    Canvas->MoveTo(X,Y) ;
    a = 0 ;
  }
else Canvas->LineTo(X,Y) ;
}
祝順心
系統時間:2024-05-19 17:02:04
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!