LPARAM(@cdsStruct) //Указатель на структуру для отправки
) <>1
then
raise Exception.Create('Error sending message'); //Сообщение не отправлено
GlobalUnlock(hMem); //Разблокировать память
GlobalFree(hMem); //Удалить блок памяти
except
on E:Exception do //Обработка исключительных ситуаций
MessageDlg(E.Message, mtError,[mbOK],0);
end;
end;
procedure TForm1.ButtonCaptionClick(Sender: TObject);
begin
Caption:=Edit2.Text; //Установить заголовок окна
end;
2. Создаем диалоговое приложение приемника сообщения(см.Visual C++)
3. В описание класса формы добавляем заголовок обработчика событий
type
TForm1 = class(TForm)
Cancel: TButton;
private
{ Private declarations }
procedure OnCopyData(var msg:TMessage);message WM_COPYDATA;
public
{ Public declarations }
end;
4. В раздел реализации добавляем тело процедуры обработчика.
implementation
{$R *.dfm}
procedure TForm1.OnCopyData(var msg:TMessage);
var strReceived:string; //строка для хранения результата получения даных
pasStrReceived:string; //строка для хранения пришедших данных в формате Паскаля
strSenderCaption:array[0..255]of char; //ASCIIZ строка для хранения заголовка окна отправителя
pasSenderCaption:string; //Паскаль строка для хранения заголовка окна отправителя
wnd:THandle; //Номер окна отправителя
pCDStruct:PCOPYDATASTRUCT; //Указатель на переданную структуру
begin
try
pCDStruct:=PCOPYDATASTRUCT(msg.LParam);//Получаем указатель на переданную структуру
wnd:=THandle(pCDStruct^.dwData); //Получить указатель на окно отправитель
GetWindowText(wnd,@strSenderCaption,255); //Получить заголовок окна отправителя
pasSenderCaption:=StrPas(strSenderCaption); //Преобразовать заголовок в формат строки Паскаля
pasStrReceived:=StrPas(pCDStruct^.lpData); //Преобразовать полученную строку в формат Паскаля
//Сформировать текст диалогового окна
strReceived:=Format('Sender:%s'#10#13'Received bytes:%d'#10#13'Received text:%s'#10#13, [pasSenderCaption, pCDStruct^.cbData, pasStrReceived]);
MessageDlg(strReceived, mtInformation,[mbOK],0); //Вывести текст сообщения
except //Возникла ошибка - возвращаем флаг "сообщение не обработано"
On E:Exception do begin msg.Result:=0;exit;end;
end;
msg.Result:=1; //Все в порядке – возвращаем флаг – сообщение обработано
end;
5. Тестирование (см. Visual C++)
Индивидуальные задания:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.