Для примера создадим два приложения. В одном из них добавим следующий код:
Code: |
const CD_CMD_SETCAPTION = 1; // определяем команду для передачи данных
procedure TForm1.Button1Click(Sender: TObject); var CDS: TCopyDataStruct; begin // задаем команду CDS.dwData := CD_CMD_SETCAPTION; // задаем длину передаваемых данных CDS.cbData := Length(Edit1.Text) + 1; // выделяем память под буфер для передачи данных GetMem(CDS.lpData, CDS.cbData); try // копируем данные в буфер StrPCopy(CDS.lpData, Edit1.Text); // посылаем сообщение в окно с заголовком «CopyData Reciever» SendMessage(FindWindow(NIL, 'CopyData Reciever'), WM_COPYDATA, Handle, Integer(@CDS)); finally // освобождаем буфер FreeMem(CDS.lpData, CDS.cbData); end; end; |
В принимающем данные приложении создадим окно с заголовком «CopyData Reciever» и добавим в форму следующий код:
Code: |
const CD_CMD_SETCAPTION = 1;
type TForm1 = class(TForm) private // создаем обработчик WM_COPYDATA procedure WMCopyData(var M: TWMCopyData); message WM_COPYDATA; end;
…
procedure TForm1.WMCopyData(var M: TWMCopyData); begin // Если команда – установить заголовок if M.CopyDataStruct.dwData = CD_CMD_SETCAPTION then begin // Берем текст заголовка из данных Caption := PChar(M.CopyDataStruct.lpData); M.Result := 1; end else M.Result := 0; end; |
При нажатии кнопки Button1 в первой форме заголовок второй станет равен тексту компонента Edit1. Отмечу, что сообщение WM_COPYDATA может быть послано только при помощи функции SendMessage. Если приложение, получающее данные, должно использовать их после возврата из обработчика WM_COPYDATA, оно должно скопировать данные в локальный буфер.
Тенцер А. Л.
ICQ UIN 15925834
- << Назад
- Вперёд
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!