【100分】我用SendMessage 发EM_GETTEXTRANGE到一个RichEdit,怎么也得不到正确的TEXT。

a1b2c3d4 2003-01-15 11:25:03
function TForm1.GetText(handle:hwnd):string;
var iLength:integer;
tRange:TEXTRANGE;
sText:String;
begin
iLength:=SendMessage(handle,WM_GETTEXTLENGTH,0,0);
Result:='';
if iLength=0 then Exit;
setLength(sText,iLength+1);
tRange.chrg.cpMin:=0;
tRange.chrg.cpMax:= iLength+1;
tRange.lpstrText :=pChar(sText);
SendMessage(handle,EM_GETTEXTRANGE,0,Longint(@tRange));
Result:=sText;
end;

sText始终得不到RichEdit里的值。
问题何在?!
100分!
...全文
161 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
a1b2c3d4 2003-01-15
  • 打赏
  • 举报
回复
Eastunfail(恶鱼杀手) :
不行啊。呜呜。你试试:)
Eastunfail 2003-01-15
  • 打赏
  • 举报
回复
function GetText(handle:hwnd):string;
var iLength:integer;sText:pchar;
begin
iLength=SendMessage(handle,WM_GETTEXTLENGTH,0,0);
Result:='';
if iLength=0 then Exit;
getMem(sText,iLength+1);
SendMessage(handle,WM_GETTEXTLENGTH,iLength+1,LPARAM(sText));
Result:=string(sText);
freeMem(sText);
end;
a1b2c3d4 2003-01-15
  • 打赏
  • 举报
回复
抱歉,没说清楚
发送的目的地是另外一个应用程序。
用FindWindow和FindWindowEx得到RichEdit的handle后再用Sendmessage法消息。没回音:(

谢谢各位。不好意思
yousp 2003-01-15
  • 打赏
  • 举报
回复
忘了说我用的是Delphi 6

并且请注意加入:RichEdit单元声明
yousp 2003-01-15
  • 打赏
  • 举报
回复
我做了一个测试程序,怎么一点问题都没有????

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, RichEdit;

type
TForm1 = class(TForm)
Button1: TButton;
RichEdit1: TRichEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
function GetText(handle:hwnd):string;
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

function TForm1.GetText(handle:hwnd):string;
var iLength:integer;
tRange:TEXTRANGE;
sText:String;
begin
iLength:=SendMessage(handle,WM_GETTEXTLENGTH,0,0);
Result:='';
if iLength=0 then Exit;
setLength(sText,iLength+1);
tRange.chrg.cpMin:=0;
tRange.chrg.cpMax:= iLength+1;
tRange.lpstrText :=pChar(sText);
SendMessage(handle,EM_GETTEXTRANGE,0,Longint(@tRange));
Result:=sText;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Txt: String;
begin
Txt := GetText(RichEdit1.Handle);
ShowMessage(Txt);
end;

end.
naughtyboy 2003-01-15
  • 打赏
  • 举报
回复
szText 定义为
szText : array[0..255] of char;
馮強 2003-01-15
  • 打赏
  • 举报
回复
将SendMessage换成PostMessage试试。
naughtyboy 2003-01-15
  • 打赏
  • 举报
回复
procedure TForm1.Button1Click(Sender: TObject);
var
dd,hh: hwnd;
i: integer;
mem: pchar;
begin
dd := FindWindow(nil,'SendMsg');
if dd>0 then
begin
hh := FindwindowEx(dd,0,pchar('TRichEdit'),nil);
if hh>0 then
begin
i := SendMessage(hh,WM_GETTEXTLENGTH,0,0);
getmem(mem,i+1);
SendMessage(hh,WM_GETTEXT,i+1,LongInt(mem));
showmessage(strpas(mem));
end
else
showmessage('no such window');
end;
getmem(mem,0);
end;

1,184

社区成员

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

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