关于一个程式向另一程式发送内容的问题(可以继续加分)

unilion 2003-08-13 01:44:45

请问怎样才可以将程式A的Edit框里面的内容发到程式B的EDIT框里面(注:B里有很多EDIT,我只想发送到EDIT1) ;还有,假如我不知道B的EDIT名称,请问我怎样才可以知道B的EDIT框的名称? 还有,A程式怎能样才可以获取程式B的DBGRID的内容? 请大家帮帮忙,谢谢!
...全文
50 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shikari 2003-08-14
  • 打赏
  • 举报
回复
获取EDIT的内容用GETWINDOWTEXT,设置用SETWINDOWTEXT就可以了!上面我先的例子里使用过,自己看吧!别忘记给分:)
Shikari 2003-08-14
  • 打赏
  • 举报
回复
没有人回答呀?那我就说说吧:)
我知道你的意思,窗体上有很多EDIT,但是EDIT都是一个类的,并且还没有内容可以区别,那怎么办呢?你知道,虽然他们都是TEDIT类,但是如果遍历他们,他们总有先后顺序的,比如说,我要操作其中一个EDIT,我们遍历EDIT时,发现他总是排行第5,或者其他位置,但是无论怎样,每次遍历时他的排行都一定,那么我们就能解决问题了。下面是代码,我尽量写详细!
首先建个新工程和一个新窗体,然后放一个按钮,然后放3个EDIT。然后将EDIT中的内容全清除,然后写代码!

...
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
KK:longint;
implementation


{$R *.dfm}
function GetAllWinProc(Hwnd:longint;Lparam:longint):Boolean;stdcall;
var WinTxt:Pchar;
begin
GetMem(WinTxt,255);
GetClassName(Hwnd,WinTxt,255);
if WinTxt = 'TEdit' then
begin
KK := KK+1;

Form1.ListBox1.Items.Add(IntToStr(Hwnd) + WinTxt);
if KK = 2 then
SetWindowText(Hwnd,'OK');
end;
Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
KK:=0;
EnumChildWindows(Form1.Handle,Pointer(@GetAllWinProc),0);//如果操作别的进程
//那么将Form1.Handle换成你要操作的主窗口的句柄,注意,如果他的EDIT放在PANEL上,你就要将Form1.Handle改为PANEL的HANDLE,总之要是EDIT的PARENT的HANDLE。
运行上面的代码,你发现程序总将其中一个固定的EDIT内容设置为OK了!这样行了吧?
end;
zdcnow 2003-08-14
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/topic/2143/2143564.xml?temp=.8941767

1.
//程序H向程序A发送数据
//数据内容为Edit1的文本内容
//程序A的窗体名字为FromA
procedure TFormH.Button1Click(Sender: TObject);
var
DataStruct: TCopyDataStruct;
h: THandle;
begin
DataStruct.cbData := Length (Edit1.Text) + 1;
GetMem (DataStruct.lpData, DataStruct.cbData );
StrCopy (DataStruct.lpData, PChar (Edit1.Text));
h:= FindWindow (nil, 'FormA');
if h <> 0 then
SendMessage (h, WM_COPYDATA, Handle,Cardinal(@DataStruct))
FreeMem (DataStruct.lpData);
end;


2.
//程序A接受来自程序H的数据,并显示在Edit1上
...
type
TFormA = class(TForm)
...
public
procedure ReceiveData(var Data:TWmCopyData);Message WM_COPYDATA;
...

procedure TFormA.ReceiveDta(var Data:TWmCopyData);
begin
Edit1.Text:=StrPas(Data.CopyDataStruct^.lpData);
end;
Shikari 2003-08-14
  • 打赏
  • 举报
回复
你是不是可以这么做?
在你程序运行时,你先用鼠标点击一下该EDIT,然后得到该句柄,然后将文字发送过去?如果你不想这么做,那你可以遍历所有EDIT,然后得到你想操作的EDIT排行是多少,然后每次你都遍历EDIT,然后获取排行例如是3的EDIT的句柄,然后发送文字!
sssa2000 2003-08-13
  • 打赏
  • 举报
回复
用dde
qianguob 2003-08-13
  • 打赏
  • 举报
回复
学习中...
  • 打赏
  • 举报
回复
至于取得句柄,简单的方法可以用钩子函数
pankun 2003-08-13
  • 打赏
  • 举报
回复
我是指另一个进程不是你写的话...
  • 打赏
  • 举报
回复
可以用sendmessage函数发送wm_settext,不过要先取得要发送的文本框句柄,
nhdj 2003-08-13
  • 打赏
  • 举报
回复
学习,帮你up~~~~~~~~
pankun 2003-08-13
  • 打赏
  • 举报
回复
如果程式不是你写的话就麻烦了哈,要用跨进程的技术。

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧