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

將值傳回指定視窗,詳內文。

答題得分者是:One2Free
lcc1299
一般會員


發表:39
回覆:42
積分:21
註冊:2004-09-12

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-01 19:19:30 IP:203.70.xxx.xxx 未訂閱
各位大家好,我有一隻程式,分別為(A為表現畫面Form1)(B為檢驗按鍵)(C為B的.DLL檔),底下程式為B片段。當A程式開啟檢驗有無按下mouse左鍵時,這時我於畫面上按一下mouse左鍵,為什麼*號部分程式不會動呢?而只單單開啟一次記事本,(且第二次單擊左鍵後都是無效的了),我在想原因應該是在執行該API程式時,系統完全不知道,什麼是Form1對嗎?那我是不是該使用sendmessage這方法來設定我Form上的這個Edit上的值呢?還是有其他方法呢? 如果是這樣,那我在(A)Form1中設的全區變數,在(B)中是不是也被視為不可視呢?因為我還必須將(A)畫面上的按鍵值,傳往(B)程式來做判斷,我本來是寫if (Form1.setnum =1 ) then......但我測試,他好像是不知道這回事@@"!(A與B有相互Uses,而C中有指定該B檔案),其實我的問題就是~~某程式中的值,傳往另一個程式中(需指定元件Edit),有什方法呢,謝謝。 If (wParam = WM_LBUTTONDOWN)then begin Result:=1; WinExec('Notepad.exe',sw_Normal); * Form1.Edit1.Text:='999'; end; 就是我想於B程式執行過程中,將值傳回我的(A)Form上的某一個Edit中,我之後會有很多Edit所以我也必須知道如何指定到某個Edit上,謝謝^__^"! 發表人 - lcc1299 於 2005/10/01 19:30:20 發表人 - lcc1299 於 2005/10/01 19:33:10
One2Free
一般會員


發表:26
回覆:28
積分:20
註冊:2004-05-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-03 10:35:15 IP:59.34.xxx.xxx 未訂閱
//发送消息给监听程序 procedure SendCopyData(hTargetWnd: HWND; ACopyDataStruct: TCopyDataStruct); begin if hTargetWnd <> 0 then SendMessage(hTargetWnd, WM_COPYDATA, Longint(0{Handle}), Longint(@ACopyDataStruct)) else MessageBox(0, PChar('您尚未正确登录,暂不允许发送文件。请登录后再试。'), PChar('信息'), $00000030); end; procedure SendMsg(nSaveFile:string); var MyCopyDataStruct: TCopyDataStruct; hTargetWnd: HWND; begin with MyCopyDataStruct do begin dwData := 0; // may use a value do identify content of message cbData := StrLen(PChar(nSaveFile)) 1; //长度 lpData := PChar(nSaveFile); //内容 end; hTargetWnd := FindWindow(nil, PChar(PRG_TITLE)); // 查找窗体 SendCopyData(hTargetWnd, MyCopyDataStruct); end; //接收发送过来的文件,并触发 发送文件 消息 procedure WMRecvFrShell(var Msg: TWMCopyData); message WM_COPYDATA; {------------------------------------------------- 名 称: WMReceiveFromShell 功 能: 消息处理过程 参 数: 返回值: 备 注: 响应 Shell 发过来的信息 -------------------------------------------------} procedure TfrmMain.WMRecvFrShell(var Msg: TWMCopyData); var sText: array[0..1023] of Char; SendForm: string; begin if Msg.CopyDataStruct.dwData = 0 then // { Receive Text, Text empfangen} begin StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData); //为避免 Shell 等待,用这个函数向 Shell 进程返回一个结果,使之能继续进行 ReplyMessage(0); //..... end; end;
lcc1299
一般會員


發表:39
回覆:42
積分:21
註冊:2004-09-12

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-03 13:23:59 IP:221.169.xxx.xxx 未訂閱
One2Free大大您好^_^,請問一下第二段接收消息部分的procedure WMRecvFrShell(var Msh:TWMCopyData);message WM_COPYDATA,紅色部分是指什麼呢,我那裡不能動作@@"!~和底下的TfrmMain.WMRecvFrShell(var Msg:TWMCopyData);的TfrmMain是指我的TForm1嗎?最後在請問一下><"!~怎麼把傳過來的值,讓接收端丟到指定的Edit中呢,謝謝了^__________^"!
One2Free
一般會員


發表:26
回覆:28
積分:20
註冊:2004-05-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-03 20:39:59 IP:59.34.xxx.xxx 未訂閱
代码是从我的程序中COPY过来的.因为忙, 没认真改写. 发送端:    
 
//发送消息给其它程序
procedure SendMsg(const PrgTitle, ATextMsg: string);
var
  MyCopyDataStruct: TCopyDataStruct;
  hTargetWnd: HWND;
begin      with MyCopyDataStruct do //待传送的数据
  begin
    dwData := 0; // may use a value do identify content of message
    cbData := StrLen(PChar(ATextMsg))   1; //长度
    lpData := PChar(nSaveFile); //内容
  end;      hTargetWnd := FindWindow(nil, PChar(PrgTitle)); // 查找窗体
  if hTargetWnd <> 0 then
    SendMessage(hTargetWnd, WM_COPYDATA, Longint(0{Handle}), Longint(@MyCopyDataStruct));
end;    
接收端:
  TfrmMain = class(TForm)
    Edit1: TEdit;
  private
    //消息处理过程 
    procedure WMRecvFrShell(var Msg: TWMCopyData); message WM_COPYDATA;
    { Private declarations }
  public
    { Public declarations }
  end;    {-------------------------------------------------
名 称: WMReceiveFromShell
功 能: 消息处理过程
参 数:
返回值:
备 注: 
-------------------------------------------------}    procedure TfrmMain.WMRecvFrShell(var Msg: TWMCopyData);
var
  sText: array[0..1023] of Char;
begin
  if Msg.CopyDataStruct.dwData = 0 then // { Receive Text, Text empfangen}
  begin
    StrLCopy(sText, Msg.CopyDataStruct.lpData, Msg.CopyDataStruct.cbData);        //为避免程序A等待,用这个函数向程序A进程返回一个结果,使程序A能继续进行
    ReplyMessage(0);
    //.....
    Edit1.Text := sText;
  end;
end;    
lcc1299
一般會員


發表:39
回覆:42
積分:21
註冊:2004-09-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-04 11:26:52 IP:221.169.xxx.xxx 未訂閱
One2Free謝謝您~太感謝了~可以了。
系統時間:2024-05-07 3:00:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!