將值傳回指定視窗,詳內文。 |
答題得分者是:One2Free
|
lcc1299
一般會員 發表:39 回覆:42 積分:21 註冊:2004-09-12 發送簡訊給我 |
各位大家好,我有一隻程式,分別為(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 發送簡訊給我 |
//发送消息给监听程序
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 發送簡訊給我 |
|
One2Free
一般會員 發表:26 回覆:28 積分:20 註冊:2004-05-12 發送簡訊給我 |
代码是从我的程序中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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |