Основные параметры интерфейса Windows - это картинка рабочего стола, заставка, разрешение экрана, и скорость обновления монитора. С помощью HiAsm вы в силах создать программу, которая будет изменять все эти настройки.
Необходимые компоненты находятся в HiAsm на вкладке "Система", в группе "Компоненты". Тут есть три компоненты со значками в виде экрана, они-то нам и нужны. Установите первый из них (Desktop) на рабочее поле HiAsm.
Как видите, он устанавливает картинку рабочего стола. Можно указать в качестве картинки файл, можно передать картинку в потоке. Про работу в HiAsm с картинками я уже писал. Так что в потоке передать картинку вы наверняка сможете. Но стоит помнить, что при этом она просто сохраняет в файл во временной папке и оттуда устанавливается как обои. А при очистке временной папки - удаляется. Поэтому лучше указывать известный файл на диске.
Компонент Desktop может получить имя файла текущей картинки, чем мы и воспользовались. И при каждом кизменении картинки она будет отображаться у нас на форме.
У компонента Desktop есть ещё параметр Style, который определяет стиль размещения картинки на рабочем столе. Рассмотрите его самостоятельно.
В диалоге открытия файлов всгде сначала будет показываться содержимое папки C:\WINDOWS\Web\Wallpaper, потому что именно там лежат картинки, которые берутся для обоев в диалоге "свойства экрана". А задаётся это в параметре StartDir компонента ODialog.
Теперь перейдём к HiAsm'овскому компоненту Screen, он следующий за Desktop. Этот компонент управляет разрешением экрана и частотой его обновления. Помимо этого он может получать текущие значения.
В этой схеме HiAsm при запуске программы (событие формы onCreate) во все поля устанавливаются значения, и вы узнаете ширину, высоту и частоту обновления экрана. При нажатии кнопки "Применить" устанавливается новая ширина и высота экрана. Но не любую можно установить, а только ту, которая поддерживается вашим монитором.
Чтобы выяснить, какие режимы поддерживаются вашим монитором, есть метод doEnum компонента HiAsm Screen. Однако перед его использованием нужно установить маску вывода значений. Она задаётся в параметре EnumMask. В описании этого параметра есть все необходимые сведения. Можно, конечно, оставить маску по умолчанию. Вот вариант схемы.
Вот здесь кнопка "Режимы" перечисляет все возможные режимы монитора.
Теперь перейдём к заставке (скринсейверу). HiAsm позволет управлять заставками при помощи компонента SCR. Методы компонента SCR хорошо описаны в подсказках HiAsm, а пример я сейчас покажу.
Из этой программы HiAsm вы можете запустить заставку, а можете отключить её (тогда она автоматически запускаться не будет) или включить.
Ну и напоследок, если вам хочется увидеть что-то подобное диалогу "свойства экрана", сделаю красивый интерфейс для выбора заставки.
Здесь пока не используется компонент HiAsm SCR, потому что он не умеет запускать предпросмотр заставки.
Первым делом при входе в программу начинается поиск файлов с расширением scr (имеено такое имеют заставки) в папке C:\WINDOWS\system32, ведь именно там лежат заставки. Имена найденных файлов выдаются в список, у которого параметр ReadOnly=True (да и у формы некоторые параметры изменены).
По событию выпадающего списка onClick в поток выдаётся имя (параметр списка DataType=String). При этом происходит соединение строк "/p" и идентификатор окна компонента Image. Да, визуальный компонент является окном, и у него есть идентификатор. Но точка свойств для его получения спрятана на вкладке "Точки" панели парметров.
Однако картинки на форме две, потому что одна - декоративная (обрамление монитора), а во второй должна показываться заставка. Она тоже имеет рисунок, но при выборе заставки из списка вместо рисунка появляется заставка.
Чтобы так происходило, заставку нужно запустить файл заставки с параметром /p и идентификатором окна, в котором нужно отрисовать заставку. Сцепляются именно эти парметры в компонента StrCat (причём после /p обязательно ставится пробел). А потом происходит запуск файла заставки.
Однако если вы здесь выберете заставку несколько раз, то новые заставки будут просто поверх старых, потому что старые остаются открытыми. Это мы исправим, и я приведу полный код схемы HiAsm, а вы попытайтесь разобраться в нём без подсказок. Он будет довольно большим. По многим компонентам и приёмам из него я напишу потом отдельные статьи.
Пример с выбором заставок чреват тем, что просматривая в нем имеющиеся заставки можно не заметить, как изменить существующие настройки (именно так у меня получилось).
ОтветитьУдалитьА изменять разрешение экрана при том многообразии типов экранов, что сейчас у пользователей, - это бегать по минному полю с закрытыми глазами...
В разделе компонентов Система мне понравился компонент, переключающий языки ввода. Случается так, что индикатор языковой панели пропадает - и Вы в полном неведении, какой язык будете набирать.
Отсюда пример утилитки, выдающей язык ввода на индикатор Scroll Lock:
Add(KeyboardLayout,16534512,196,105)
{
}
Add(BitBtn,11480063,112,105)
{
Left=10
Top=10
Color=15780518
Caption="English"
link(onClick,15293190:doEvent1,[(152,111)(152,83)])
}
Add(BitBtn,9672189,112,154)
{
Left=10
Top=50
Color=255
Caption="Русский"
link(onClick,9508717:doEvent1,[])
}
Add(LedKey,11053175,350,105)
{
Point(doScrollLockOff)
}
Add(Hub,9508717,161,154)
{
link(onEvent1,16534512:doRussianKbd,[(185,160)(185,118)])
link(onEvent2,11053175:doScrollLock,[(263,167)(263,125)])
}
Add(Hub,15293190,161,77)
{
link(onEvent1,11053175:doScrollLockOff,[(252,83)(252,132)])
link(onEvent2,16534512:doEnglishKbd,[(185,90)(185,111)])
}
Строго говоря, для включения этой лампочки нужно использовать метод doScrollLockOn, а если используется doScrollLock, то в потоке нужно передать 0 для выключения и 1 для включения. В Вашем примере ничего не передано, и это интерпретируется как 1 (так уж заведено в HiAsm). У кнопки есть параметр Data для задания данных, передаваемых в потоке.
ОтветитьУдалить