那位达人给小弟我举个控件间通讯的例子!

potter_cs 2003-08-12 06:15:40
控件间通讯 设想是发送方sendmessage一个自定义消息,接受方接受到消息处理相关信息!
谢谢了!
...全文
11 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
huojiehai 2003-08-12
  • 打赏
  • 举报
回复
限制Memo的行数和行宽

type

TForm1 = class(TForm)

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

procedure Memo1KeyPress(Sender: TObject; var Key: Char);

public

MaxCharsPerLine, MaxLines: Integer;

function MemoLine: Integer;

function LineLen(r: Integer): Integer;

function NRows: Integer;

end;

function TForm1.NRows: Integer;

begin

with Memo1 do

Result:=1+SendMessage(Handle,EM_LINEFROMCHAR,GetTextLen-1,0);

end;

function TForm1.LineLen(r: Integer): Integer;

var

r1,r2:Integer;

begin

with Memo1 do begin

r1:=SendMessage(Handle,EM_LINEINDEX,r,0);

if r<NRows-1 then

r2:=SendMessage(Handle,EM_LINEINDEX,r+1,0)-2{-CR/LF}

else

r2:=GetTextLen;

end;

Result:=r2-r1;

end;

function TForm1.MemoLine: Integer;

begin

with Memo1 do

Result:=SendMessage(Handle,EM_LINEFROMCHAR,SelStart,0);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

MaxCharsPerLine := 8;

MaxLines := 4;

end;

procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);

begin

with Memo1 do

begin

case Key of

' '..#255: if LineLen(MemoLine)>=MaxCharsPerLine then

Key:=#0;

#10, #13: if NRows>=MaxLines then

Key:=#0;

#8: if SelStart=SendMessage(Handle,EM_LINEINDEX,MemoLine,0) then

Key:=#0;

end;

end;

end;
huojiehai 2003-08-12
  • 打赏
  • 举报
回复
SendData程序向 GetData程序发送消息,并传递 edit1中的字符串; GetData在收到消息后,把 SendData发送的字符串接受下来,并显示在相应的 edit1中。

SendData程序:

……

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

var

ds: TCopyDataStruct;

hd: THandle;

begin

ds.cbData := Length (Edit1.Text) + 1;

GetMem (ds.lpData, ds.cbData ); //为传递的数据区分配内存

StrCopy (ds.lpData, PChar (Edit1.Text));

Hd := FindWindow (nil, 'Form2'); // 获得接受窗口的句柄

if Hd <> 0 then

SendMessage (Hd, WM_COPYDATA, Handle,

Cardinal(@ds)) // 发送 WM_COPYDATA消息

else

ShowMessage ('目标窗口没找到! ');

FreeMem (ds.lpData); //释放资源

end;

GetData程序:

 

TForm2 = class(TForm)

Edit1: TEdit;

private

{ Private declarations }

public

procedure Mymessage(var t:TWmCopyData);message WM_COPYDATA;

{ Public declarations }

end;

var

Form2: TForm2;

implementation

procedure TForm2.Mymessage(var t:TWmCopyData);

begin

Edit1.text:=StrPas(t.CopyDataStruct^.lpData);//接受数据并显示。

end;

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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