请教高手,如何用WINDOWS的消息在打开对话框中的文件名的输入框----combo box中设定文件名,并打开文件?
sendmessage(ComboBoxHandle,wm_settext,0,int(pchar('filename1.doc')))
sendmessage(ComboBoxHandle,wm_settext,0,int(pchar('filename1.doc')))
解决方案 »
- 控件移动问题
- 高分求穷举密码问题,分不够要多少加多少。
- 请问delphi如何打开指定文件?
- 如何连接两个ACCESS数据库,并从其中一个中导入数据表?
- 请教关于tcpclient等的实例里的语句意义?
- 程序中要打印两种不同的小票,打算用两台相同型号的打印机。我在程序中动态的改变默认打印机,但没有达到我的要求?请问 这是为什么?谢谢
- 想学习Acdsee的原理,谁有类似的源码?可以给一个吗?(限Delphi)
- 来着有分
- 为什么我用delphi在win2000下面写的程序,在win98下面不能录入中文。
- 菜問題,BDE怎邊接SQL SERVE數據庫,可不通過odbc嗎?
- bintohex怎么用
- 高手请进,又是一个QuickReport的问题
begin
if(IsWindow(hWnd1)) then
if SendMessage(hWnd1,WM_SETTEXT ,0,LPARAM(Text))>0 then
result:= true;
result:= false;
end;
SetText(hedt,str );
SendMessage(hedt, WM_KEYDOWN, VK_RETURN, 0);
我的方法如下:
mEditHWD:=GetDlgItem(P_HWND,13006); //得到COMBO BOX的句柄
SendMessage(mEditHWD,CB_ResetContent,0,0); //删除下拉列表,输入框中的内容
SendMessage(mEditHWD,CB_ADDSTRING,0,Integer(pchar(mText))); //下拉列表中添加新内容
i:=SendMessage(mEditHWD,CB_SELECTSTRING, -1,Integer(pchar(mText))); //选择下拉列表中的内容
SendMessage(mEditHWD,CB_SETCURSEL,i,0); //选择当前选择到的字符串
SendMessage(mEditHWD,WM_SETTEXT,0,integer(pchar(mText))); //设置输入框内 SendMessage(mEditHWD,CB_SETEDITSEL,0,length(mText)); //选择输入框的文本字符串
SendMessage(P_HWND,CBN_EDITUPDATE,13006,mEditHWD); //更新输入框内容
sendMessage(mEditHWD,CB_SETEDITSEL,0,length(mText)); //选择输入框的文本字符串
楼上的方法我试了一下,还是没有什么反映,SendMessage(hedt, WM_KEYDOWN, VK_RETURN, 0);好象没有执行,所以,我热切的期盼回复
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function mygettext(hwnd:THandle):string;
end;
var
Form1: TForm1;
// function EnumWindowsProc(Hwnd:THandle;lParam:LParam):boolean;Stdcall;
function EnumChildProc(Hwnd:THandle;lParam:LParam):boolean;Stdcall;
implementation
{$R *.dfm}
function TForm1.mygettext(hwnd:THandle):string;
var
buf:pchar;
len:Longint;
begin
Len:=Longint(SendMessage(hWnd,WM_GETTEXTLENGTH ,0,0));
if len>0 then
begin//1
try
getmem(buf,len);
SendMessage(hWnd,WM_GETTEXT,Len+1,Int64(buf));
Result:=strpas(buf);
finally
freemem(buf);
end;
end;//1
end;
function EnumChildProc(Hwnd:THandle;lParam:LParam):boolean;
var
WindowCaption,WindowClass:array[0..254] of Char;
begin
GetClassName(Hwnd,WindowClass,255);
if Pos('BUTTON',UpperCase(StrPas(WindowClass))) > 0 then
begin
// if Form1.mygettext(Hwnd)='Button1' then
// begin
sendmessage(hwnd,WM_LBUTTONDOWN,0,1);
sendmessage(hwnd, WM_LBUTTONUP,0,1);
// end;
end;
Result := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h:hwnd;
begin
h := FindWindow(nil, 'MyForm');
if h<>0 then
begin
// sendmessage(h,WM_close,0,1);
EnumChildWindows(H,@EnumChildProc,0);
end
else
showmessage('No Form');
end;
end.
SendMessage(PHWD,273,1,0); //PHWD是对话框的handle
它执行的操作是点击“打开”按扭
主要问题是:现在的情况时好时坏,有时,对话框下方输入框COMBO BOX里面的内容和上方预览信息的一致;但是有时上方的预览信息和COMBO BOX 里的信息不一致
预览信息的旁边有一个LISTVIEW控件,预览的是它里面被选中文件的信息!
拜托
我也试过,可还是不行,是不是挺打击你的呢
我是做过的很多的测试,实在是没有办法了,才上来发的求助信息的
不是我故意打击你呀,不好意思 :)
现在唯一我不明白的是,为什么结果出现了“对与错”的交织状况
用上面的方法总是时对时错,很困惑我
如果说是消息没有发送到接收的窗体,可我在调试的时候观测每一个
SendMessage的返回值都是一样的(比如错的时候返回值是“1”,可对
的时候返回值还是“1”)
而此版本的程序我在2台配置差一些(PIII1G以下)的计算机上返回的结
果,错误率只有5%不到,所以我很诧异
谢谢楼上这些天的不懈支持,还需麻烦各位大侠!