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

如何控制或傳變數到另一個視窗的StringGrid ?

尚未結案
Funtaaa
一般會員


發表:1
回覆:3
積分:0
註冊:2005-10-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-23 19:43:22 IP:218.168.xxx.xxx 未訂閱
大家好 我有2個form(Main/List) 希望點了Main的Work03Btn後 能夠在List中的StringGrid記錄下當時資料 其中參考了 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=27080 不過compiler在Main的struct宣告處就卡住了@@ 以下是我的程式部份,請指教!(修改過)    //---------Main.cpp部分------------- typedef struct works //自訂工作struct {   char name[10];   AnsiString date; }WORK; //宣告Work struct    //---------------------------------------------------------------------------    void __fastcall TForm1::N4Click(TObject *Sender) {         Form2->Show(); } //---------------------------------------------------------------------------    void __fastcall TForm1::Button1Click(TObject *Sender) {  //---傳遞Struct Work  HWND hWnd=FindWindow(NULL, "ReceiveForm");    if(hWnd)    {       WORK work03;       lstrcpy(work03.name, "工作三");       work03.date=DateTimeToStr(Now());       COPYDATASTRUCT CopyData;       CopyData.dwData=0;       CopyData.cbData=sizeof(WORK);       CopyData.lpData=&work03;          SendMessage(hWnd, WM_COPYDATA, (WPARAM)Handle, (LPARAM)&CopyData);    } } //--------List.cpp部分------------------ typedef struct works //自訂工作struct {   char name[10];   AnsiString date; }WORK; //宣告Work struct    vector Work; //宣告vector全域變數 //----------------------------------------- int index; //--------------------------------------------------------------------------- void __fastcall TForm2::Button1Click(TObject *Sender) { //---新增工作資料 Work.push_back(works()); index=Work.size()-1; lstrcpy(Work[index].name, "工作一"); //Work[index].name="工作一"; Work[index].date=DateTimeToStr(Now()); Button3Click(Sender);//顯示變動過的資料 } //--------------------------------------------------------------------------- void __fastcall TForm2::Button3Click(TObject *Sender) { unsigned int i; //資料筆數 //--顯示工作表欄位名稱 StringGrid1->Cells[1][0]="工作內容"; StringGrid1->Cells[2][0]="日期時間"; //--顯示工作表資料 for( i=0;iCells[1][i 1]=Work[i].name; StringGrid1->Cells[2][i 1]=Work[i].date; } StringGrid1->RowCount=i 1; } //--------------------------------------------------------------------------- void __fastcall TForm2::WMCopyData(TMessage& Message) { COPYDATASTRUCT *CopyData=(COPYDATASTRUCT*)(Message.LParam); if(CopyData->cbData==sizeof(Work)) { Work work03; CopyMemory(&work03, CopyData->lpData, CopyData->cbData); ShowMessage(work03.name); ShowMessage(DateTimeToStr(work03.date)); } //---新增工作資料 Work.push_back(works()); index=Work.size()-1; Work[index].name=work03.name; Work[index].date=DateTimeToStr(work03.date); Button3Click(Sender);//顯示變動過的資料 } 發表人 - funtaaa 於 2005/10/24 00:09:27
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-23 19:59:56 IP:61.225.xxx.xxx 未訂閱
typedef works //自訂工作struct 語法錯誤! 少了struct typedef struct works 發表人 - liangnet 於 2005/10/23 20:01:26
Funtaaa
一般會員


發表:1
回覆:3
積分:0
註冊:2005-10-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-23 22:58:41 IP:218.168.xxx.xxx 未訂閱
謝謝!! 不過後來被要求要有回傳值(停在Main的work struct建構子}後方) [C Warning] Main.cpp(20): W8070 Function should return a value 是要求我回傳給List的Form嗎? 另外在 lstrcpy(work03.name, "工作三"); 的地方也有錯誤@@" [C Error] Main.cpp(49): E2034 Cannot convert 'AnsiString' to 'char *' [C Error] Main.cpp(49): E2342 Type mismatch in parameter 'lpString1' (wanted 'char *', got 'AnsiString') 是否應該在宣告name與date時必須宣告成char型態? 發表人 - funtaaa 於 2005/10/23 23:01:39 發表人 - funtaaa 於 2005/10/23 23:08:29
Funtaaa
一般會員


發表:1
回覆:3
積分:0
註冊:2005-10-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-23 23:45:02 IP:218.168.xxx.xxx 未訂閱
不好意思一直問笨問題... 剛剛已經用char宣告加上lstrcopy() 解決了一些問題(修改於主題)    最後(希望是...)想請問 void __fastcall TForm2::WMCopyData(TMessage& Message) {    COPYDATASTRUCT *CopyData=(COPYDATASTRUCT*)(Message.LParam);    if(CopyData->cbData==sizeof(Work))    {       Work work03;       CopyMemory(&work03, CopyData->lpData, CopyData->cbData);       ShowMessage(work03.name);       ShowMessage(DateTimeToStr(work03.date));    }    //---新增工作資料   Work.push_back(works());   index=Work.size()-1;   Work[index].name=work03.name;   Work[index].date=DateTimeToStr(work03.date);   Button3Click(Sender);//顯示變動過的資料 }中的erro message內容: [C++ Error] WorkList.cpp(74): E2379 Statement missing ;(卡在Work work3) [C++ Error] WorkList.cpp(75): E2451 Undefined symbol 'work03' [C++ Error] WorkList.cpp(84): E2451 Undefined symbol 'Sender' 這是什麼意思呢?? 其實不太懂>是否為一個物件? 發表人 -
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-24 21:52:06 IP:220.140.xxx.xxx 未訂閱
[C++ Error] WorkList.cpp(75): E2451 Undefined symbol 'work03' [C++ Error] WorkList.cpp(84): E2451 Undefined symbol 'Sender' 這二行意思是'work03'、'Sender'未定義的符號,表示你沒在程式裡去定義這二個變數。    " WMCopyData(TMessage& Message) "==>是否為一個物件? 這是一個Method,主要是用在處理接收到WM_COPYDATA訊息的程式。    
    vector  Work; <==應該要這樣宣告
另外記得程式開頭要加上這一行
using namespace std;     void __fastcall TForm2::WMCopyData(TMessage& Message)
{
   COPYDATASTRUCT *CopyData=(COPYDATASTRUCT*)(Message.LParam);
   Work work03; <==如果放在if{ }裡,變數有效範圍就只在那裡。
   if(CopyData->cbData == sizeof(Work))
   {
       CopyMemory(&work03, CopyData->lpData, CopyData->cbData);
       ShowMessage(work03.name);
       ShowMessage(DateTimeToStr(work03.date));
   }
   //---新增工作資料
   Work.push_back(works());
  index = Work.size() - 1;
   Work[index].name = work03.name;
   Work[index].date = DateTimeToStr(work03.date);
Button3Click(NULL); //<==要傳入NULL或Button3也行。
}
紅色的字體是修改過。
Funtaaa
一般會員


發表:1
回覆:3
積分:0
註冊:2005-10-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-26 00:12:08 IP:220.138.xxx.xxx 未訂閱
謝謝liangnet, Thank You So Much!!!!!!!!!!!!!!! ( >
liangnet
中階會員


發表:19
回覆:148
積分:83
註冊:2004-01-03

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-26 00:26:21 IP:220.140.xxx.xxx 未訂閱
引言: 謝謝liangnet, Thank You So Much!!!!!!!!!!!!!!! ( > < face="Verdana, Arial, Helvetica"> 大概…是你沒去攔下WM_COPYDATA的訊息吧! 在你的TForm2的Class裡加入
protected:
        void __fastcall WndProc(Messages::TMessage &Message); //Override    然後這裡面的程式…
void __fastcall TForm2::WndProc(Messages::TMessage &Message)
{
     if (Message.Msg == WM_COPYDATA)
            WMCopyData(Message); //處理WM_COPYDATA訊息         Form::WndProc(Message); 
}    
系統時間:2024-04-19 11:36:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!