Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Вниз

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 вся ветка

Форум: "KOL";
Текущий архив: 2003.12.26;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
7-86566
happyboy
2003-10-22 09:12
2003.12.26
Работа с переферией собственной сборки через COM порт.


1-86395
Sirus
2003-12-13 07:24
2003.12.26
Application.Handle в DLL из программы типа TaskBar....


1-86448
Lexandr
2003-12-12 14:50
2003.12.26
Документ Word


1-86382
iKS
2003-12-13 11:06
2003.12.26
Popup-меню для TDBGridEh


14-86523
Нурик
2003-12-04 01:36
2003.12.26
Где можно скачтать Install Shield?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский