Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.12.26;
Скачать: CL | DM;

Вниз

KOL+VCL   Найти похожие ветки 

 
Bartov   (2003-04-03 01:53) [0]

У нас есть VCL форма (отделное приложение) на ней есть Edit.
На KOL форме(уже другое приложение) EditBox + Button.

Как сделать, чтоб при нажатии на Button передалось значение иp EditBox"а(KOL-приложение) в Edit(VCL-приложение).


 
SPeller ©   (2003-04-03 02:54) [1]

Так же как и всегда. Я так понял, вам нужно передать что-то из одного приложения в другое?


 
Bartov   (2003-04-03 03:02) [2]

> Так же как и всегда.
А как?...

> Я так понял, вам нужно передать что-то из одного приложения в другое?
Да, да!!!

Очень срочно надо!!!


 
mdw ©   (2003-04-03 11:00) [3]

Одно приложение(KOL) посылает собщение (SendMessage), второе(VCL) - получает. В lParam, например, передавай указатель на буфер данных или сами данные, если <= 4 байт.


 
SPeller ©   (2003-04-03 11:11) [4]

2 Bartov

Я к тому, что KOL здесь ни при чём. Ты бы лучше спросил это в форуме по WinAPI, там тебе срезу же ответили бы. А если по теме, то в том случае, если твои данные <= 4 байт, то посылай любое сообщение, главное чтобы другая программа отфильтровала его от остальных. В противном же случае, если твои данные больше 4-х байт, то используй WM_COPYDATA.



 
GandalfTheWhite   (2003-04-03 11:23) [5]

Можно создать файл проецириемый в память, можно через сообщения (можно послать указатель на данные любого размера)...


 
SPeller ©   (2003-04-03 16:58) [6]


> GandalfTheWhite (03.04.03 11:23)
> Можно создать файл проецириемый в память, можно через сообщения
> (можно послать указатель на данные любого размера)...

WM_COPYDATA работает как раз через file mapping. А для передачи адреса.. ну так в этом сообщении и шлите указатель вместе с размером, потому что любое другое сообщение указатель-то передаст, но вот данные нет.


 
Bartov   (2003-04-03 19:57) [7]

Всем спасибо за ответы.
Но лучше напишите код, хотябы пару сторк. Мне нужно string передавать.
Пипл, ну очень надо!!!


 
mdw ©   (2003-04-03 21:41) [8]

Примено вот так. Кромсал работающий кусок, может где и переборщил. Но принцип должен быть понятен.
В VCL

TFormX = class(TForm)
...
private
procedure WMCOPYDATA(var M: TMessage); message WM_COPYDATA;
...
end;

procedure TFormX.WM_COPYDATA(var M: TMessage);
var S: String;
begin
SetLength(S, PCopyDataStruct(M.LPARAM)^.cbData);
S:= PChar(PCopyDataStruct(M.LPARAM)^.lpData);
Edit.Text:= S;
M.Result:= 1;
end;

В KOL
...
var CopyDataStruct: TCopyDataStruct;
PCh: PChar;
...

PCh:= StrNew(PChar( Text));
with CopyDataStruct do begin
dwData:= 0;
lpData:= PCh;
cbData:= Length(S)+1;
end;
SendMessage(FindFindow("TFormX", "FormX"), WM_COPYDATA, Form.Handle, LPARAM(@CopyDataStruct));
StrDispose(PCh);



 
Bartov   (2003-04-04 10:47) [9]

Спасибо, делаем...


 
BaRToV   (2003-04-14 17:45) [10]

А вот если client KOL-приложение, то вылетает ошибка и приложение закрывается.

function TForm1.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
var
st: string;
begin
Result := FALSE;
if Msg.message = WM_COPYDATA then
begin
SetLength(st, PCopyDataStruct(Msg.lParam)^.cbData);
st := PChar(PCopyDataStruct(Msg.wParam)^.lpData);
( PCopyDataStruct(Msg.wParam) [10]
А вот если client KOL-приложение, то вылетает ошибка и приложение закрывается.

function TForm1.KOLForm1Message(var Msg: tagMSG;
var Rslt: Integer): Boolean;
var
st: string;
begin
Result := FALSE;
if Msg.message = WM_COPYDATA then
begin
SetLength(st, PCopyDataStruct(Msg.lParam)^.cbData);
st := PChar(PCopyDataStruct(Msg.wParam)^.lpData);
EditBox1.Text := st;
end;
end;

Ошибка возникает в st := PChar(PCopyDataStruct(Msg.wParam)^.lpData);
Как быть?!...


 
mdw ©   (2003-04-15 13:01) [11]

Она возникает, по моему при освобожнении памяти. Короче лови на мыло пример. Вроде работает.


 
Кладов   (2003-04-15 15:27) [12]

А setlength нужен ли? Если все равно присваивается PChar строке, то и память должна выделяться сама, а строка обрезаться до ближайшего #0. Если в строке есть #0, то вместо st := должно бы быть Move( PCopyDataStruct( Msg.wParam )^.lpData^, st[ 1 ],
PCopyDataStruct( Msg.lParam )^.cbData );

Что если написать Result := TRUE; Вылетает?



Страницы: 1 вся ветка

Текущий архив: 2003.12.26;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
1-86367
Dead
2003-12-14 19:53
2003.12.26
Как передеть файл через TServerSocket и TClientSocket...


1-86455
Виталя
2003-12-13 11:51
2003.12.26
Шифрование в Delphi


1-86362
Vlad25
2003-12-09 20:20
2003.12.26
Помогите разобраться с доступом к файлу после MkDir.


1-86360
Stant
2003-12-11 23:42
2003.12.26
Как показать многострочный HINT


1-86403
Equilebriya
2003-12-14 05:46
2003.12.26
Форматирование текста при печати