Листинг 10.10.
Удаление оконного стиля
procedure TfrmWindowProp.cmbDelStyleClick(Sender: TObject);
var
style: DWORD;
delstyle: DWORD;
begin
if lstStyle.ItemIndex = –1 then Exit;
//Удаление выбранного стиля окна
//..определяем, какой стиль удалить
delstyle := styles[GetStyleIndex(lstStyle.ItemIndex, True)].value;
//..вычисляем и устанавливаем новое значение стиля окна
style := GetWindowLong(wnd, GWL_STYLE);
style := style and not delstyle;
SetWindowLong(wnd, GWL_STYLE, style);
//..перерисуем все окна
InvalidateRect(0, nil, True);
//Обновим список стилей окна
LoadWindowStyle();
end;
После удаления или добавления оконного стиля вызывается перерисовка всех окон, чтобы проявился результат проведенной операции. Удаление и добавление дополнительных (расширенных) оконных стилей осуществляется аналогично. Только при этом используются массив exstyles, функция GetExStylelndex и константа GWL_EXSTYLE, передаваемая в функции GetWindowLongи SetWindowLong.
Что же за функция GetStylelndex используется в листинге 10.10? Она позволяет определить положение в массиве styles стиля, выбранного в списке доступных или используемых стилей (верхний список) (листинг 10.11).