Читаем Delphi. Трюки и эффекты полностью

Листинг 10.5.

Определение общей информации об окне

procedure TfrmWindowProp.LoadWindowInfo;

var

rect: TRect;

buffer: String;

begin

//Сбор сведений об окне

//..имя класса

SetLength(buffer, 1024);

SetLength(buffer, GetClassName(wnd, PAnsiChar(buffer), 1024));

txtClassName.Text := buffer;

//..имя (заголовок) окна

SetLength(buffer, SendMessage(wnd, WM_GETTEXTLENGTH, 0, 0) + 1);

SendMessage(wnd, WM_GETTEXT, Length(buffer),

Integer(PAnsiChar(buffer)));

txtWindowName.Text := buffer;

//..идентификатор (или дескриптор меню) окна

txtId.Text := IntToStr(GetWindowLong(wnd, GWL_ID));

//..оконный прямоугольник

GetWindowRect(wnd, rect);

txtWindowRect.Text :=

\'(\' + IntToStr(rect.Left) + \',\' + IntToStr(rect.Top) + \')\' +

\' – \' +

\'(\' + IntToStr(rect.Right) + \',\' + IntToStr(rect.Bottom) + \') \' +

IntToStr(rect.Right–rect.Left) + \'x\' + IntToStr(rect.Bottom –

rect.Top);

//Определение стиля окна

LoadWindowStyle;

LoadWindowExStyle;

end;

Если вы внимательно просмотрели листинг 10.5, то могли заметить вызовы двух процедур в двух последних строках кода. Процедура LoadWindowStyle заполняет списки используемых и доступных оконных стилей (см. рис. 10.4), а процедура LoadWindowExStyle соответственно заполняет списки используемых и доступных дополнительных (или расширенных) стилей окна.

Реализация процедуры LoadWindowStyle приводится в листинге 10.6

...

Листинг 10.6.

Заполнение списков оконных стилей

procedure TfrmWindowProp.LoadWindowStyle;

var

i: Integer;

style: DWORD;

begin

style := GetWindowLong(wnd, GWL_STYLE);

lstStyle.Clear;

lstAvailStyle.Clear;

//Выделение из 32-битного значения составляющих стиля окна

for i := 0 to 17 do

if styles[i].value and style <> 0 then

begin

//Стиль используется

lstStyle.Items.Add(styles[i].name);

styles[i].used := True;

end

else

begin

//Стиль не используется

lstAvailStyle.Items.Add(styles[i].name);

styles[i].used := False;

end;

end;

Вместо громоздкой проверки наличия в значении, возвращенном API-функцией GetWindowLong, битов каждого возможного стиля при помощи, например, case здесь используется глобальный массив styles структур Styleinf о. Объявление типа структуры (записи) Styleinf о выглядит следующим образом:

...

type

StyleInfo = record

value: DWORD; //Код стиля

name: String; //Текстовое обозначение стиля

used: Boolean; //Служебное поле

end;

Каждый элемент массива styles хранит информацию об определенном оконном стиле. Объявление этого массива, так же, как структуры Stylelnfo и прочих рассмотренных в этом разделе типов данных, находится в модуле WindowData, расположенном на диске в папке с номером главы.

Ниже приведено объявление массива styles (флаги стиля, являющиеся комбинацией других флагов, в массив не попали) (листинг 10.7).

...
Перейти на страницу:

Похожие книги

102 способа хищения электроэнергии
102 способа хищения электроэнергии

Рассмотрена проблема хищений электроэнергии и снижения коммерческих потерь в электрических сетях потребителей. Приведены законодательно–правовые основы для привлечения к ответственности виновных в хищении электроэнергии. Изложены вопросы определения расчетных параметров средств учета электроэнергии, показаны схемы подключения счетчиков электрической энергии. Описаны расчетные и технологические способы хищения электроэнергии. Обсуждаются организационные и технические мероприятия по обнаружению, предотвращению и устранению хищений.Для работников энергоснабжающих организаций и инспекторского состава органов Ростехнадзора. Материалы книги могут быть использованы руководителями и специалистами энергослужб предприятий (организаций) для правильного определения расчетных параметров средств учета и потерь электроэнергии в электрических сетях.Если потенциальные расхитители электроэнергии надеются найти в книге «полезные советы», они должны отдавать себе отчет, что контролирующие структуры информированы в не меньшей степени и, следовательно, вооружены для эффективной борьбы с противоправной деятельностью.Настоящая книга является переработанным и дополненным изданием выпущенной в 2005 г. книги «101 способ хищения электроэнергии».

Валентин Викторович Красник

Технические науки / Образование и наука
100 великих чудес инженерной мысли
100 великих чудес инженерной мысли

За два последних столетия научно-технический прогресс совершил ошеломляющий рывок. На что ранее человечество затрачивало века, теперь уходят десятилетия или всего лишь годы. При таких темпах развития науки и техники сегодня удивить мир чем-то особенным очень трудно. Но в прежние времена появление нового творения инженерной мысли зачастую означало преодоление очередного рубежа, решение той или иной крайне актуальной задачи. Человечество «брало очередную высоту», и эта «высота» служила отправной точкой для новых свершений. Довольно много сооружений и изделий, даже утративших утилитарное значение, тем не менее остались в памяти людей как чудеса науки и техники. Новая книга серии «Популярная коллекция «100 великих» рассказывает о чудесах инженерной мысли разных стран и эпох: от изобретений и построек Древнего Востока и Античности до небоскребов в сегодняшних странах Юго-Восточной и Восточной Азии.

Андрей Юрьевич Низовский

История / Технические науки / Образование и наука
Электроника для начинающих (2-е издание)
Электроника для начинающих (2-е издание)

В ходе практических экспериментов рассмотрены основы электроники и показано, как проектировать, отлаживать и изготавливать электронные устройства в домашних условиях. Материал излагается последовательно от простого к сложному, начиная с простых опытов с электрическим током и заканчивая созданием сложных устройств с использованием транзисторов и микроконтроллеров. Описаны основные законы электроники, а также принципы функционирования различных электронных компонентов. Показано, как изготовить охранную сигнализацию, елочные огни, электронные украшения, устройство преобразования звука, кодовый замок и др. Приведены пошаговые инструкции и более 500 наглядных рисунков и фотографий. Во втором издании существенно переработан текст книги, в экспериментах используются более доступные электронные компоненты, добавлены новые проекты, в том числе с контроллером Arduino.

Чарльз Платт

Радиоэлектроника / Технические науки