如何实现自动填写edit框数据? ( 积分: 50 )

  • 主题发起人 主题发起人 reckychen
  • 开始时间 开始时间
R

reckychen

Unregistered / Unconfirmed
GUEST, unregistred user!
利用特定的数据资料格式,读取数据自动填入相应的edit框。<br><br>如果单模拟键盘输入又很容易出错,不知各位有何高见?
 
利用特定的数据资料格式,读取数据自动填入相应的edit框。<br><br>如果单模拟键盘输入又很容易出错,不知各位有何高见?
 
你所讲的问题好象不很清楚,可以在详细一点么?
 
直接对Edit.Text赋值不就行了吗
 
用KEYBD_EVENT/SENDMESSAGE/POSTMESSAGE直接发送字符到文本框上就行了。<br>
 
要说的大家都说了.<br>只需要分析数据后直接给text属性赋值就没问题吧
 
To:hearwind<br>因为不是同一个软件,怎么可以直接到Edit.Text赋值?!<br><br>To:weiliu<br>你所说的方法具体怎么操作?再说明一下:由自己编写的是加载格式程序;被加载数据的程序不是自己编写。<br>
 
先找到加载格式程序中 编辑框的句柄<br>然后用SENDMESSAGE语句
 
找到要赋值的EDIT的句柄,然后用SENDMESSAGE发消息给它就可以了.
 
对,用SENDMESSAGE,具体方法查帮助吧。
 
什么,什么意思?<br>是不是向其他窗体发送数据啊;<br>var<br> &nbsp;FH:THandle;<br> &nbsp;ButH:THandle;<br> &nbsp;Buf:Array[0..255] of Char;<br>begin<br> &nbsp;FH:=FindWindow(nil,'登录信息');<br> &nbsp;if FH&amp;lt;&amp;gt;0 then<br> &nbsp;begin<br> &nbsp; &nbsp;ButH := FindWindowEx(FH,0,'Edit',nil);<br> &nbsp; &nbsp;if ButH&amp;lt;&amp;gt;0 then<br> &nbsp; &nbsp;SendMessage(ButH,WM_SETTEXT,0,Integer(pchar('ddd')));<br> &nbsp;end;<br>end;
 
应该说是向其它程序的edit框发送数据。大体的意思我明白,不过怎样取得该程序与所要传数据的edit框的句柄啊?帮助都是英文的[:(]
 
找到EDIT的句柄,向它发消息
 
jack_ken:<br>窗体中有那么多个edit框,怎么才可以获得我所需要的框值呢?
 
var <br> &nbsp;MainHandle: THandle;<br>begin<br> &nbsp;MainHandle:= findwindow(nil,'Caption');// 获得句柄。<br> &nbsp;//findwindowex(Phandle,0,nil,'控件 Handle') 获得控件句柄。<br> &nbsp;if MainHandle &amp;lt;&amp;gt; 0 then <br> &nbsp; &nbsp;windows.enumchildwindows(MainHandle,@enumchildHandle,0);<br>end; <br>function enumchildHandle(hwnd:hwnd,lparam:lparam):boolean;<br>var <br> &nbsp;ClassName: array[0..255] of char;<br> &nbsp;MyHandle: array[0..255] of THandle;<br> &nbsp;i:integer;<br> &nbsp;MyStr:Pchar;//自己输入设置成参数。<br>begin <br> &nbsp;i:= 0;<br> &nbsp;getmem(MyStr,255);<br> &nbsp;MyStr:='11111';<br> &nbsp;getmem(@ClassName,255);<br> &nbsp;GetClassName(hwnd,@ClassName,255);<br> &nbsp;if ClassName = 'Edit' then &nbsp;//针对多个edit <br> &nbsp;begin <br> &nbsp; &nbsp; MyHandle:= hwnd; <br> &nbsp; &nbsp; SendMessage(MyHandle[具体的edit对应的i],wm_settext,0,integer(MyStr));<br> &nbsp;end; &nbsp; <br> &nbsp;result:= true;//千万别忘了写这句。<br>end;
 
可否有更直接一点的例子说明呢??
 
曾经试过用以下方法可以实现,但很麻烦,不可以直接传到想要的框中,必须一个一个轮着,而且是必须一层一层获取句柄。谁还有更好的方法直接点? <br><br>==================================================================================== <br>procedure TForm1.btn1Click(Sender: TObject); <br>begin <br> &nbsp;FH:=FindWindow('tfrmdoccust',Nil); <br> &nbsp;if FH&lt;&gt;0 then <br> &nbsp;lbl1.Caption:='获取窗口句柄成功!' <br> &nbsp;else <br> &nbsp;lbl1.Caption:='获取窗口句柄失败!' <br>end; <br><br>procedure TForm1.btn2Click(Sender: TObject); <br>begin <br> &nbsp; ButH := FindWindowEx(FH,0,'tpagecontrol',nil); <br> &nbsp; &nbsp;if ButH&lt;&gt;0 then <br> &nbsp;lbl1.Caption:='获取tpagecontrol句柄成功!' <br> &nbsp;else <br> &nbsp;lbl1.Caption:='获取tpagecontrol句柄失败!' <br>end; <br><br>procedure TForm1.btn3Click(Sender: TObject); <br>begin <br> &nbsp; But1 := FindWindowEx(ButH,0,'ttabsheet',nil); <br> &nbsp; &nbsp;if But1&lt;&gt;0 then <br> &nbsp;lbl1.Caption:='获取ttabsheet句柄成功!' <br> &nbsp;else <br> &nbsp;lbl1.Caption:='获取ttabsheet句柄失败!' <br>end; <br><br>procedure TForm1.btn4Click(Sender: TObject); <br>begin <br> &nbsp; But2 := FindWindowEx(But1,HWND(0),'tdbedit',nil); <br> &nbsp; &nbsp;if But2&lt;&gt;0 then <br> &nbsp;lbl1.Caption:='获取tdbedit句柄成功!' <br> &nbsp;else <br> &nbsp;lbl1.Caption:='获取tdbedit句柄失败!' <br>end; <br><br>procedure TForm1.btn5Click(Sender: TObject); <br>begin <br> &nbsp;But2:=GetNextWindow(But2,GW_HWNDNEXT); <br> &nbsp;lbl1.Caption:=IntToStr(but2); <br> &nbsp; &nbsp;SendMessage(but2,WM_SETTEXT,0,Integer(pchar(edt1.Text))); <br>end;
 
To:minglove<br>我照着你的做法做了一下出现以下的出错信息:<br>行:(windows.enumchildwindows(MainHandle,@enumchildHandle,0);)<br>错误信息:Variable required <br>行:(getmem(@ClassName,255);)<br>Left side cannot be assigned to
 
我曾用过的一个土办法,和reckychen自己的方法类似:<br>先用FindWindow找到窗口<br>再多次调用GetNextWindow找到需要的edit框,然后发送消息。<br><br>对方如果是确定的某个程序,GetNextWindow调用的次数是固定的,在设计时调试好就行了。
 
这已经是我使用的方法了,你看回程序就知道了
 
后退
顶部