Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт по лабораторным работам.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
398 Кб
Скачать
☆

Листинг программы “Dest” – приёмник сообщений

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, jpeg, ExtCtrls;

type

TDest = class(TForm)

Memo1: TMemo;

Label1: TLabel;

Edit1: TEdit;

Label2: TLabel;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Image1: TImage;

procedure FormCreate(Sender: TObject);

procedure obrmes(var Msg: TMsg; var Handled: Boolean);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Dest: TDest;

Kolvo: Integer;

implementation

{$R *.dfm}

procedure TDest.obrmes(var Msg: TMsg; var Handled: Boolean); //Обработка сообщений

begin

if Msg.message = wm_KeyDown then

begin

Inc(Kolvo);

edit1.Text:=IntToStr(Kolvo);

Memo1.Lines.Append('Получено сообщение wm_KeyDown No ' + IntToStr(Kolvo));

Memo1.Lines.Append('Параметры текущего сообщения:');

Memo1.Lines.Append('wParam = '+IntToStr(Msg.wParam));

Memo1.Lines.Append('lParam = '+IntToStr(Msg.lParam));

Memo1.Lines.Append('');

end;

end;

procedure TDest.FormCreate(Sender: TObject);

begin

Application.OnMessage := obrmes;

Kolvo:=0;

end;

procedure TDest.Button1Click(Sender: TObject);

begin

Memo1.Clear;

end;

procedure TDest.Button2Click(Sender: TObject);

var

r: Bool;

begin

r:=PostMessage(Dest.Handle, wm_KeyDown, Random(255), Random(255));

If not r then ShowMessage('Ошибка передачи сообщения.');

end;

procedure TDest.Button3Click(Sender: TObject);

begin

Kolvo:=0;

Edit1.Text:=IntToStr(Kolvo);

end;

end.

Использованные компоненты и методы:

В данной программе использовались следующие компоненты: многострочное текстовое поле Memo1; две текстовые метки Label1 и Label2; однострочное текстовое поле Edit1; три кнопки – Button1, Button2, Button3. Во время загрузки программы объявляется новый метод-обработчик сообщений – процедура obrmes. Во время получения сообщения информация о нём выводится в поле Memo1 и наращивается счётчик сообщений на единицу. Поле Edit1 используется для вывода значения счётчика. С помощью кнопки Button1 очищается окно вывода информации о сообщении, при этом используется метод компонента Memo – Clear. С помощью кнопки Button2 программа посылает себе контрольное сообщение. С помощью кнопки Button3 сбрасывается счётчик сообщений.

Результат работы программ

Ответы на контрольные вопросы:

1. Что представляет собой сообщение? Опишите структуру типа для данных этого типа.

Сообщения – это информационные пакеты, представляющие собой структуры записей типа TMsg.

структуры записей типа TMsg.

TMsg = packed record

hwnd: HWND; //описатель окна, которому направлено сообщение

message: UINT; //идентификатор сообщения

wParam: WPARAM; //параметр сообщения

lParam: LPARAM; //параметр сообщения

time: DWORD; //время, когда сообщение было послано

pt: TPoint; //координаты мыши в момент посылания сообщения

end;

2.Каким образом обрабатываются сообщения, получаемые приложениями Windows?

Каждое сообщение Windows уникальным образом идентифицируется числом с соответствующим мнемоническим идентификатором.

3.С помощью каких функций приложения Windows могут посылать сообщения? Дайте описание параметров этих функций.

Приложения Windows могут посылать сообщения с помощью функций SendMessage().

Вывод

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

Выполнил……………………………………………………………Погодаев А.М.

Преподаватель…………………………………………………………Мохов В.А.