можно с помощью функции QWidget_winId, передав ей в качестве параметра свойство Handle формы. Далее следует имя свойства, идентифицируемое атомом MyProperty. Аргумент PropModeReplace указывает функции, что нужно заменить текущее значение данного свойство (если на момент вызова функции такого свойства не существует, оно будет создано). Остальные параметры функции XChangeProperty указывают тип и структуру данных свойства. Свойства окон могут быть данными самых разных типов и размеров. Поскольку в данном случае само свойство нас не интересует, мы используем самый простой тип – Integer.

После вызова функции XChangeProperty процесс, вызвавший функцию получит сообщение PropertyNotifyEvent, в одном из полей которого будет храниться атом MyProperty. Таким образом мы сможем отличить это сообщение от всех остальных. В этом случае функция-фильтр сообщений может иметь следующий вид:


function X11EventFilterFunc(Event : PXEvent) : Boolean; cdecl;
begin
  Result := False;
  if Event.xtype = PropertyNotify then // Тип сообщения - PropertyNotifyEvent
  if Event.xproperty.atom = MyProperty then  // «Наше» сообщение
  begin
    ...
    Result := True; // Дальнейшая обработка сообщения не нужна
  end;
end;

Механизм работы с сообщениями демонстрирует прилагаемый пример.


Статья и примеры программ © 2003 Андрей Наумович Боровский. Воспроизведение возможно только с разрешения автора.