Раньше Pixie сам обрабатывал наведение и менял CSS
XML:
.card:hover {
background: green;
}
Но выполнить свой код Pascal Script именно в момент наведения было нельзя. Теперь можно.
Пример: выполнить действие при наведении
Допустим, у HTML-элемента есть id="tile-alpha". Мы хотим при наведении изменить текст другого элемента на форме, а при уходе курсора вернуть другой текст.
code_language.pascal:
procedure ViewElementMouseEvent(
Sender, El: TObject;
Event: TPixieMouseEvent);
var
Id, S: String;
H: NativeInt;
begin
if El = nil then
Exit;
Elem.FCreate(NativeInt(El));
Id := Elem.GetAttr('id', '');
{ Нас интересует только эта карточка }
if Id <> 'tile-alpha' then
Exit;
case Event of
meEnter:
S := 'Курсор над карточкой Alpha';
meLeave:
S := 'Курсор ушёл с карточки Alpha';
end;
{ Обновляем элемент status в другом HTML-документе }
H := StatusDoc.GetElementById('status');
if H <> 0 then
begin
StatusDoc.SetElementText(H, S);
StatusDoc.Changed;
end;
end;
Здесь Elem - объект TFPixieElement, а StatusDoc - документ, в котором есть элемент <escape><div id="status">Ожидание...</div></escape>
Подключение обработчика выполняется один раз:
code_language.pascal:
View.OnElementMouseEvent(@ViewElementMouseEvent);
Как это работает
- meEnter - курсор вошёл на элемент.
- meLeave - курсор покинул элемент.
- Id позволяет выбрать нужный HTML-элемент.
- Внутри case можно выполнять свой код: вызвать процедуру, изменить значение, обновить другую часть интерфейса и так далее.
То есть теперь можно обрабатывать наведение обычным кодом Inno Setup, а не только стилями CSS.
Это один общий обработчик OnElementMouseEvent, а не отдельное свойство OnEnter у каждой HTML-карточки. Но по смыслу ты получаешь именно нужное поведение: проверяешь элемент и выполняешь своё действие при meEnter или meLeave.