兩個程式之間傳遞資料可以使用wm copydata

2021-03-31 13:43:02 字數 2752 閱讀 8887

下面是我的回答:

vardt: tyourstruct;

procedure t***x.wmcopydata(var message: twmcopydata);

varp: pchar;

begin

p :=message.lpdata;

move(p^, dt.a, sizeof(integer));

inc(p, sizeof(integer));

move(p^, dt.b, sizeof(integer));

inc(p, sizeof(integer));

getmem(dt.pfilestr, strlen(p) + 1);

move(p^, dt.pfilestr^, strlen(p) + 1);

end;

public

 procedure mymessage(var t:twmcopydata);message wm_copydata;

end;

varform2: tform2;

implementation

procedure tform2.mymessage(var t: twmcopydata);

begin

 edit1.text:=strpas(t.copydatastruct^.lpdata);//接受資料並顯示。

end;

procedure tform1.speedbutton1click(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;

下面是共享記憶體法

unit ccc;

inte***ce

uses

windows, messages, sysutils,

classes, graphics, controls, forms,

dialogs,shellapi, stdctrls, buttons;

const

wm_baricon=wm_user+200;

type

tform1 = class(tform)

btnwrite: tbitbtn;

btnread: tbitbtn;

editwrite: tedit;

editread: tedit;

procedure formcreate(sender: tobject);

procedure btnwriteclick(sender: tobject);

procedure btnreadclick(sender: tobject);

private

hmapfile&: thandle;

mapfilepointer: pointer;

public

end;

varform1: tform1;

implementation

procedure tform1.formcreate(sender: tobject);

begin

$ffffffff, // 特殊記憶體對映控制代碼

nil, page_readwrite, 0,10000,

if hmapfile <> 0 then

mapfilepointer := mapviewoffile (

hmapfile, // 上面映象檔案的控制代碼

file_map_all_access,

0, 0, 0) // 訪問整個映象檔案

else

showmessage ('hmapfile = 0');

if mapfilepointer = nil then

showmessage ('mapfilepointer = nil');

end;

procedure tform1.btnwriteclick(sender: tobject);

begin

strcopy (pchar (mapfilepointer),

pchar (editwrite.text));//把內容寫入共享記憶體

end;

procedure tform1.btnreadclick(sender: tobject);

vars: string;

begin

s := pchar (mapfilepointer);//從共享記憶體讀出內容

editread.text := s;

end;

end.

兩個窗體之間傳遞物件

public archiext archiidgetinfo string archiid return objext catch exception ex 比如 我在窗體a中有個查詢的結果集 根據結果集中的序號來點選修改,就顯示資料庫中相對應的內容 首先呢,我們要寫個方法返回一個物件,public...

兩個窗體之間的checkbox傳遞

例如有一個窗體a 和一個窗體b a上有一個checkbox b 上也有一個checkbox 執行a窗體勾選chk後調整b窗體 然後b窗體上的checkbox也被勾選上 在a窗體load事件中迴圈遍歷窗體上的checkbox 新增到list集合 a窗體listlist new list private...

兩個Fragment之間引數的傳遞

使用fragment的時候可能需要在兩個fragment之間進行引數的傳遞,開始想著可以使用sharedpreferences進行處理,想想這些簡單的引數沒有必要使用這麼麻煩的方式去實現,翻了一下fragment的api,找到一個方法就能實現像activity一樣便捷的實現引數傳遞 程式中的一段 f...

兩個windowsform之間的值傳遞

在windows form之間傳值,我總結了有四個方法 全域性變數 屬性 窗體建構函式和delegate。第一個全域性變數 這個最簡單,只要把變數描述成static就可以了,在form2中直接引用form1的變數,如下 在form1中定義一個static變數public intform2中的鈕釦按鈕...

兩個視窗之間資訊的傳遞 C

下面有個例子 我要將 form1 中的 textboxinform1 的內容讀到 form2 的 textboxinform2 中 我有兩種方法介紹給大家,隨便看看吧!第一種,先在 from2中新增一個全域性變數form1msg,然後寫一個得到from1msg的方法,如下 private strin...