Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Как передать строку другому приложению

Delphi , Синтаксис , Текст и Строки

Как передать строку другому приложению

получатель:


procedure ReceiveMessage (var Msg: TMessage);
message WM_COPYDATA;
...
procedure TFormReceive.ReceiveMessage;
var
  pcd: PCopyDataStruct;
begin
  pcd := PCopyDataStruct(Msg.LParam);
  Caption := PChar(pcd.lpData);
end;

отправитель:


procedure TFormXXX.Button1Click(Sender: TObject);
var
  cd: TCopyDataStruct;
begin
  cd.cbData := Length(Edit1.Text) + 1;
  cd.lpData := PChar(Edit1.Text);
  SendMessage(FindWindow('TFormReceive', nil), WM_COPYDATA, 0, LParam(@cd));
end;

Here's the translation of the content into Russian:

Классический пример использования сообщения WM_ COPYDATA для передачи строки между двумя приложениями!

Вот разбивка того, что происходит:

Получатель (TFormReceive)

Процедура ReceiveMessage отвечает за получение скопированной данных. Она использует сообщение WM_ COPYDATA для получения данных. Поле LParam структуры TMessage содержит указатель на запись TCopyDataStruct, которая хранит данные, отправляемые.

В этом случае свойство Caption формы обновляется полученной строкой, кастомизируя поле lpData записи TCopyDataStruct в указатель на null-terminated строку (PChar).

Отправитель (TFormXXX)

Процедура Button1Click отправляет данные с помощью функции SendMessage. Она создает запись TCopyDataStruct, устанавливая ее поля:

  • cbData: Длина строки плюс 1 (чтобы учесть terminator null).
  • lpData: Указатель на строку, отправляемую.

Функция SendMessage затем используется для отправки сообщения WM_ COPYDATA получателю. Параметр LParam содержит указатель на запись TCopyDataStruct, которая передается в процедуру ReceiveMessage.

Чтобы обеспечить корректную передачу данных, убедитесь, что оба приложения запущены и что форма получателя имеет фокус при отправке данных.

Альтернативное решение

Если вы работаете с Delphi 2009 или позднее, можно использовать класс TStream для отправки двоичных данных между приложениями. Этоapproach более гибкий и эффективный, чем использование WM_ COPYDATA. Вы можете создать поток, записать свои данные в него и затем отправить его как сообщение.

Например:

procedure TFormXXX.Button1Click(Sender: TObject);
var
  Stream: TStream;
begin
  Stream := TMemoryStream.Create;
  Stream.Write(Edit1.Text, Length(Edit1.Text));
  SendMessage(FindWindow('TFormReceive', nil), WM_COPYDATA, 0, LPARAM(@Stream));
end;

procedure TFormReceive.ReceiveMessage(var Msg: TMessage);
var
  Stream: TStream;
begin
  Stream := TMemoryStream.Create;
  Stream.CopyFrom(Msg.LParam, SizeOf(TMemoryStream));
  Caption := Stream.ReadString(Stream.Size - 1, TEncoding.Default);
  FreeAndNil(Stream);
end;

В этом примере создается поток TMemoryStream, чтобы хранить данные. Данные записываются в поток с помощью метода Write, а затем отправляются как сообщение с помощью функции SendMessage. В процедуре ReceiveMessage получателя поток читается обратно в память с помощью метода CopyFrom, а строка извлекается из него с помощью метода ReadString. Этот подход обеспечивает более контролируемую передачу данных, но может требовать дополнительной обработки ошибок в зависимости от вашего конкретного требования.

Статья описывает способ передачи строки между приложениями с помощью интерфейса сообщений Windows и структуры CopyDataStruct.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Текст и Строки ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100

Время компиляции файла: 2024-05-19 17:53:24
2024-05-19 20:30:56/0.0074160099029541/2