Как сделать рабочий стол в делфи

Добавил пользователь Владимир З.
Обновлено: 04.10.2024

Для удобства работы предпочтительнее настроить рабочий стол. Под настройкой понимается как расположение окно так и их количество. Для того чтобы настроить взаимное расположение окон достаточно мышки. После того как вы расположили все окна и отключили отображение не нужных окон вы можете выполнить команду меню "Вид" - "Рабочие столы" - "Сохранить рабочий стол".


Вы можете переключаться между рабочими столами главной форме.
Также вы можете переключаться простыми щелчками по пунктами выпадающего списка.


Кнопки справа списка позволяют сохранить текущий рабочий стол или переключиться между уже сохраненными рабочими столами.

Как подобрать обои на Рабочий стол? Предлагаю использовать все по очереди! Попробуем создать программу для смены обоев на Рабочем столе через заданный интервал времени. Отличие программы от всех подобных в том, что в ней не будет лишних никому не нужных функций, а значит, она будет меньше загружать оперативную память компьютера и мысли пользователя.

Пример выполнен на Delphi 7 и ориентирован на неопытного кодера, поэтому постараюсь описать все очень подробно и доступно. Тем не менее, пример будет отлично работать и в предыдущих версиях.

С чего начнем? Конечно же, с формы приложения. Итак, создаем VCL Forms Application. Посмотрим, какие компоненты нам необходимы. Вкладка палитры компонентов Standart - берем Label, для отображения пути к выбранному файлу; Panel - чисто декоративно, как использовать и сколько надо, не буду комментировать, можно вообще не использовать. Вкладка Additional - Bitbtn - берем две кнопки (старт/стоп); Image - для предварительного просмотра выбранного файла. Вкладка System - здесь нам нужен только Timer, для периодичности смены картинки. Для того, чтобы задавать интервал смены картинки для нашего таймера, возьмем с вкладки Samples компонент SpinEdit. Для полного удобства выбора пути к файлу с вкладки Win 3.11 берем DriveComboBox, DirectoryListBox, FileListBox. Назначение этих компонентов понятно из их названия.

Я не могу ограничить вас в оформлении приложения, поэтому перенесите все необходимые компоненты на форму и разместите их так, как сами считаете нужным. Я сделал это так, как показано на рисунке.


Это отступление только для юных кодеров, чтобы скрасить понимание. Компонентом можно манипулировать в инспекторе объектов (он находится снизу слева), который имеет две вкладки: properties и events. В properties мы можем изменить параметры, которые касаются оформления компонента, в events хранятся процедуры действия компонента. Поэтому если я говорю про значения свойств компонента, я имею в виду вкладку properties, а если про действия - ищите их на вкладке events. Для перехода от дизайнера формы к коду формы и наоборот используется клавиша F12. Названия всех компонентов я оставляю стандартными, чтобы потом ни у кого не возникло недоразумений с названиями.

DriveComboBox - в свойствах меняем параметр DirList (там только одно значение, ошибиться невозможно), соответственно связываем этот объект с DirectoryListBox. Теперь при смене диска в DriveComboBox меняется содержимое DirectoryListBox.

Идем дальше и для DirectoryListBox меняем свойства FileList и DirLabel - тут все и так понятно, если посмотреть на результат.

FileListBox - свойство MASK пишем *.jpg - это чтобы мы смогли смотреть только на картинки jpg и не видеть остальное.

Для того, чтобы наша картинка красиво отображалась пропорционально и по центру, у компоненты Image1 меняем свойства Center, Proportional в TRUE.

В принципе, все необходимое вроде сделано. Другими настройками не буду увлекаться, я думаю, каждый сможет раскрасить свое приложение по собственному усмотрению. Если что-то не получилось, возвращатесь в начало, а если все нормально, то следуте за мной дальше.

Жмем клавишу F12 и в листинге формы в разделе Uses добавляем модули ComObj, ShlObj. Jpeg. Для FileListBox в инспекторе объектов на вкладке events для события OnClick пишем две строчки:

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

Procedure Change;
const
Desktop: TGuid=''; //для получения доступа к рабочему столу
var
ActiveDeskTop:IActiveDesktop; // вроде понятно, зачем
begin
ActiveDesktop:=CreateComObject(Desktop) as IActiveDesktop; //создаем объект и получаем разрешение доступа к рабочему столу
ActiveDesktop.SetWallpaper(StringToOleStr(form1.Label1.Caption), 0); // определились с выбором картинки
ActiveDesktop.ApplyChanges(AD_APPLY_ALL); // применяем картинку на рабочем столе
end;

Есть, конечно, и другие способы менять обои, но преимущество нашей процедуры в том, что она работает под WindowsXP. Я думаю, комментарии написаны понятно. Во всяком случае, для начала хватит с головой. А хитрость в том, что мы работаем с реестром Windows и - это реальный адрес в реестре, в котором есть параметр ActiveDesktop. Если не верите, можете проверить.

Что бы наша программа могла работать с картинками, логично будет сначала посмотреть, есть ли картинки в выбранной папке, и определить их количество. Поэтому нам надо создать числовую переменную i, которая будет выступать у нас в качестве счетчика картинок. В разделе var нашего приложения дописываем:

Для формы form1 в events -> OnCreate пишем i:=0; - при запуске программе обнуляем счетчик.

Переходим к таймеру - свойство enabled ставим в false, interval - 1000 и в действии OnTimer пишем:

i:=i+1; //переходим к следующей картинке
if i=form1.FileListBox1.Items.Capacity // если наш счетчик дошел до конца списка, идем в начало
then i:=0;
label1.caption:=form1.FileListBox1.Items[i]; //все понятно
change; //меняем обои

Дважды щелкните по кнопке BitBtn1 и впишите следующую строку:

В свойстве Caption назовем ее Start, другую назовем Stop и для нее напишем

И еще пара доработок: у счетчика spinedit свойству increment присвоим значение 1000 (а чего мелочиться?), и на событие OnChange напишем следующее

От греха подальше уберем поначалу кнопку Start - в свойстве кнопки enabled->false. А разрешим ее только тогда, когда выберем картинку, то есть кликнем по FileListBox1. Допишем в событие OnClick:

Если мы заходим перейти в другую папку, то логично будет отключить таймер и запретить кнопку Start. Для этого в DirListBox1 в событие OnClick пишем такие строки:

Красота… да, но еще надо поработать. Надо убрать наше приложение с панели задач, дабы оно не раздражало наш зоркий глаз и не портило нам зрение. Спрячем нашу программу в трей. Но про это мы поговорим в следующий раз. А пока смело жмем F9 и наслаждаемся проделанной работой.

Условие: Как запустить Рабочий стол ОС из-под своего приложения? В реестре есть параметр Shell в котором прописано "explorer.exe". Меняю данный параметр на имя своей программы - при старте ОС она запускается. То что надо! Но, если теперь из программы (или из таск менеджера) выполнить тот же самый explorer.exe стартует окно проводника, но никак не рабочий стол с панелью задач. Вот код моего приложения:

uses
Forms,
Windows,
Unit1 in 'Unit1.pas' ,
Unit2 in 'Unit2.pas' ,
splash in 'splash.pas' ;

var
ExtendedStyle: Cardinal;

begin
Application.Initialize;
Application.Title := 'UCT Demo' ;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
ExtendedStyle := GetWindowLong(Application.Handle, GWL_EXSTYLE);
SetWindowLong(Application.Handle, GWL_EXSTYLE, ExtendedStyle or WS_EX_TOOLWINDOW < AND NOT WS_EX_APPWINDOW>);

with TForm3.Create(Application) do
ShowModal;

В сети нарыл такое:

var
LogonDsk: THandle = 0 ;
DefDsk: THandle = 0 ;
begin
try
DefDsk:= OpenInputDesktop( 0 , false, DESKTOP_SWITCHDESKTOP);
LogonDsk:= CreateDesktop( 'LogonDsk' , nil , nil , 0 , GENERIC_ALL, nil );
if SwitchDesktop(LogonDsk) then
try
SetThreadDesktop(LogonDsk);
MessageBox( 0 , 'Нажми кнопку, Макс!' , 'регистрация' , MB_ICONINFORMATION);
finally
SwitchDesktop(DefDsk);
end ;
finally
CloseDesktop(LogonDsk);
CloseDesktop(DefDsk);
end ;
end .


Изменить фон рабочего стола

Если Вы хотите позаботиться о дизайне той машины, на которой запускаете свою прогу, то наиболее эффектно будет изменение фона рабочего стола. Я показываю как это сделать по нажатию кнопки - Button1:

Статья Изменить фон рабочего стола раздела Рабочий стол Рабочий стол может быть полезна для разработчиков на Delphi и FreePascal.

Комментарии и вопросы

Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.

Читайте также: