Рабочий стол windows delphi

Клуб программистов

Delphi programming

Подписаться на рассылку:

Рабочий стол.

Итак, Рабочий стол- это первое что мы видим после загрузки пользователя. Сначала я дам код, как изменить фоновый рисунок на Столе. Вот что надо написать:

Uses ShlObj, ComObj;

procedure ChangeWallpaper;
const
CLSID_ActiveDesktop: TGUID = ‘<75048700-ef1f-11d0-9888-006097deacf9>‘;
var
ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop)
as IActiveDesktop;
ActiveDesktop.SetWallpaper(‘Путь к файлу’, 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;

Затем в нажатии на кнопку пишем:

procedure TForm1.ButtonClick(Sender: TObject);
begin
ChangeWallpaper;
end;

Всё, с первым пунктом покончено. Второе, как скрыть иконки на рабочем столе:

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowWindow(FindWindow(nil, ‘Program Manager’), SW_HIDE);//Скрыть
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowWindow(FindWindow(nil, ‘Program Manager’), SW_SHOW); //Показать
end;

Всё элементарно. Третье, как зазумить часть Стола. Нам понадобиться Timer, Image:

private
procedure WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo); message WM_GETMINMAXINFO;
public

procedure TForm1.WMGetMinMaxInfo(var Msg: TWMGetMinMaxInfo);
begin
inherited;
Msg.MinMaxInfo^.ptMinTrackSize := Point(158, 177); // Минимальный размер формы
Msg.MinMaxInfo^.ptMaxTrackSize := Point(350, 350); // Максимальный размер формы
end;

Теперь в процедуре изменения размеров формы пишем:

procedure TForm1.FormResize(Sender: TObject);
begin
Image1.Picture:=nil;
end;

И обязательно при уничтожении:

procedure TForm1.FormDestroy(Sender: TObject);
begin
Timer1.Interval:=0;
end;

И финал пишем в таймере:

procedure TForm1.Timer1Timer(Sender: TObject);
var
Srect,Drect,PosForme:TRect;
FWidth,FHeight,X,Y:Integer;
TmpX,TmpY:Real;
CanvasX:TCanvas;
Kursor:TPoint;
begin
// Увеличиваем экран, если приложение не свёрнуто
If not IsIconic(Application.Handle) then begin
GetCursorPos(Kursor);// Координаты курсора
PosForme:=Rect(Form1.Left,Form1.Top,Form1.Left+Form1.Width,Form1.Top+Form1.Height);
If not PtInRect(PosForme,Kursor) then begin

If Panel1.Visible=True then Panel1.Visible:=False;
If Image1.Visible=False then Image1.Visible:=True;

// Далее код можно использовать для увеличения выбранной части экрана.
FWidth:=Image1.Width;
FHeight:=Image1.Height;
Drect:=Rect(0,0,FWidth,FHeight);
//zoom
TmpX:=FWidth / (TrackBar1.Position * 4);
TmpY:=FHeight / (TrackBar1.Position * 4);

Srect:=Rect(Kursor.x,Kursor.y,Kursor.x,Kursor.y);
InflateRect(Srect,Round(TmpX),Round(TmpY));
// move Srect if outside visible area of the screen
If Srect.Left Screen.Width then OffsetRect(Srect,-(Srect.Right-Screen.Width),0);
If Srect.Bottom>Screen.Height then OffsetRect(Srect,0,-(Srect.Bottom-Screen.Height));

CanvasX:=TCanvas.Create; //Получаем handle окна рабочего стола.
try
CanvasX.Handle:=GetDC(GetDesktopWindow);
Image1.Canvas.CopyRect(Drect,CanvasX,Srect); //Передаём часть изображения в TImage.
finally
CanvasX.Free;
end;
If CheckBox1.Checked=True then begin
with Image1.Canvas do begin
X:=TrackBar1.Position * 2 * (Kursor.X-Srect.Left);
Y:=TrackBar1.Position * 2 * (Kursor.Y-Srect.Top);
MoveTo(X — (FWidth div 4),Y);
LineTo(X + (FWidth div 4),Y);
MoveTo(X,Y — (FHeight div 4));
LineTo(X,Y + (FHeight div 4));
end;
end;
Application.ProcessMessages; // Это чтобы Windows не повис.
end
else begin
If Panel1.Visible=False then Panel1.Visible:=True;
If Image1.Visible=True then Image1.Visible:=False;
end;
end;
end;

Исходник к последней части качать здесь (8,83 КБ) >>

Рабочий стол

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

Любимое занятие хакера — это подшутить над Рабочим столом Windows А подшутить тут есть над чем. Сейчас мы изучим некоторые интересные приемы, с помощью которых можно неплохо развлечься.

Создайте новый проект. Поместите на форму две кнопки. Имена оставьте по умолчанию (Buttonl и Button2). По нажатии первой кнопки будем отображать на экране окно сообщения:

procedure TForml.ButtonlClick(Sender: TObject): begin ShowMessage(‘Привет’):

Зачем это нужно? Для наглядности примера, который мы сейчас будем рассматривать.

По нажатии второй кнопки пишем следующий код:

Здесь всего лишь две строки кода между операторами begin и end. В первой мы ищем окно Рабочего стола. Да, Рабочий стол — это именно окно, с которым можно работать с помощью функций Win API, как и с любым другим окном Ну а самое главное, Рабочий стол может содержать практически любые элементы управления.

Во второй строке вызывается функция SetParent. Функции с таким именем есть в библиотеке VCL и в Windows API. Нам нужна вторая, поэтому перед именем функции ставим название модуля, в котором нужно искать функцию. Функции Win API находятся в модуле windows, поэтому для вызова используется конструкция wi ndows.SetParent.

Функция SetParent изменяет главное окно для любого элемента управления. Элемент управления нужно указать в качестве первого параметра (мы указываем первую кнопку), а указатель на окно передается во втором параметре (передаем указатель на окно Рабочего стола). После выполнения этой функции кнопка появится прямо на Рабочем столе, а на форме исчезнет (рис. 3.12).

Читайте также:  Представление задач windows 10 для чего

Рис. 3.12. Кнопка на Рабочем столе

Теперь понятно, для чего мы делали обработчик события. Запустите программу и нажмите первую кнопку. Окно с сообщением будет показано. Но после переноса кнопки на Рабочий стол нажатия кнопки не приведут ни к чему хорошему. Это значит, что на Рабочий стол переносится только кнопка, а обработчик события теряется.

Несмотря на то что кнопка находится уже на Рабочем столе, связь между кнопкой и нашей программой остается. Если закрыть программу, то кнопка исчезнет.

Еще один недостаток — в Панели задач появляется новая кнопка, как для нашего приложения, но по нажатии которой активируется кнопка на Рабочем столе. Получается, что кнопка стала как бы отдельным, практически независимым окном, несмотря на то что связь осталась.

Усложним пример и посмотрим, как можно засыпать Рабочий стол своими кнопками (рис. 3.13).

Рис. 3.13. Экран, засыпанный кнопками

Для этого установим на форме еще одну кнопку и по ее нажатии напишем код из листинга 3.9.

Листинг 3.9. Засыпание Рабочего стола кнопками procedure TForml.Button3Click(Sender: TObject). var h: HWND: b: TButton: i: Integer: begin h := GetDesktopWindowO: for i := 1 to 100 do begin b := TButton.Create(Owner):

В этом примере мы запускаем цикл из 100 шагов, в котором создаем кнопку, устанавливаем ее размеры и помещаем на Рабочий стол. Обратите внимание, что после создания свойство Parent принимает значение Forml (наша главная форма). Если у элемента управления нет родительского окна, то невозможно изменять размеры или положение. Именно поэтому кнопка временно помещается на форму главного окна, а потом переносится на Рабочий стол.

Исходный код рассмотренного здесь примера находится на компакт-диске в каталоге Sources\ch03\Desktop.

Рабочий стол

Delphi site: daily Delphi-news, documentation, articles, review, interview, computer humor.

Чтобы начать работу с Delphi, необходимо дважды щелкнуть кнопкой мыши на пиктограмме Delphi на рабочем столе Windows или в меню выбора программ. При этом на экране сначала появится рекламная заставка, сообшаюшая о том, что среда разработки загружается в оперативную память компьютера. После загрузки Delphi появится рабочий стол Delphi с отображением в главном окне страницы Welcome Page. Эту страницу, как в все другие используемые страницы, можно удалить, если щелкнуть правой кнопкой мыши на корешке вверху окна и в появившемся раскрывающемся меню выбрать команду Close Page. В верхней части рабочего стола находится главное меню с кнопками, на которых перечислены названия команд, и дополнительные панели меню с пиктограммами, где размещаются все основные команды, необходимые при разработке программ. Названия дополнительных панелей меню можно увидеть, если щелкнуть правой кнопкой мыши на поле, где размешаются панели. В появившемся ниспадающем списке будут перечислены следующие пункты: Standard (Стандартная), Debug (Отладка), Desktop (Рабочий стол), Custom (Обычная), Align (Выравнивание), Spacing (Заполнение), Position (Расположение), Browser (Браузер), HTML Design (HTML-эскиз), HTML Format (HTML-формат), HTML Table (HTML-таблица), View (Просмотр), Customize (Настройка), Причем пункт Customize представляет не отдельную панель, а окно настройки. Тот же эффект можно получить, используя команду View* Tool Bars (Просмотр^Панели). Установленная галочка около пункта говорит о том, что соответствующая панель отображается на экране. Галочки устанавливаются простым щелчком мыши. Ниже будет рассказано о каждой из этих панелей.

С левой и правой сторон главного окна находятся окна Object Inspector, Project Manager и Tool Pafette (Палитра инструментов).

Для начала работы необходимо выбрать тип приложения, которое будет создаваться. На панели главного меню надо выбрать команду Fife^New и в появившемся списке выбрать команду VCL Forms Application, при этом Delphi автоматически создаст новый проект (рис. 1.3). Это будет уже полностью работающее приложение (т.е. можно будет произвести компиляцию и получить выполняемый файл с расширением .ехе), но пока не имеющее никаких полезных функций.

Читайте также:  Характеристики для windows 10 2004

Если не производилось дополнительной настройки, то по умолчанию на переднем плане будет отображаться страница с именем Unîtl (Модуль I), на которой будет располагаться окно, названное Formi (Форма 1). Эта страница имеет две вкладки — Code (Код) и Design (Эскиз), для переключения между которыми можно использовать корешки с соответствующими названиями, расположенные внизу окна. На вкладке Code будет отображаться рабочий код программы, а на вкладке Design — создаваемый интерфейс пользователя. Вкладку Code обычно называют редактором кодов, а вкладку Design — проектировщиком форм, или формой. Вся страница представляет один программный модуль, который содержит в себе все необходимые конструкции для независимой работы. То есть реализуется концепция модульного программирования. Все необходимые процедуры и функции нужно будет добавить в процессе разработки нового приложения. В среде Delphi предусмотрены различные типы проектов, но в данной книге основное внимание будет уделено проектам типа VCL Forms Application.

В процессе работы необходимо открывать и закрывать различные модули в зависимости от того, с каким фрагментом программы нужно работать. Для того чтобы добавить страницу с необходимым модулем в проект, необходимо в главном меню выбрать пиктограмму с изображением раскрытой папки и знаком «+», после чего в появившемся окне Add To Project выбрать соответствуюший файл. Для удаления модуля из проекта выбирается пиктограмма с изображением открытой папки и знака Для того чтобы закрыть страницу с соответствующим модулем, не удаляя его из проекта, поместите страницу на передний план и нажмите клавиши , или щелкните правой кнопкой мыши на корешке страницы и выберите соответствующую команду.

Рис. 1.3. Проект, созданный по умолчанию

Для открытия файла можно выбрать команду File^Open. Аналогичный эффект можно получить и при щелчке мыши на пиктограмме открывающейся папки на панели Standard. Когда открывается файл, который связан с формой, нет необходимости дополнительно открывать форму, это делается автоматически.

Для повторного открытия файла можно использовать команды File^Reopen. Аналогичный эффект можно получить и при щелчке мыши на стрелке рядом с пиктограммой открывающейся папки на панели Standard.

Команда Save (Сохранить) находится в меню File, как и все остальные команды для работы с файлами. Для сохранения работы можно выбрать команды Save, Save As. (Сохранить как. ), Save Project As. (Сохранить проект как. ) или Save АН (Сохранить все). Команда Save используется только для сохранения файла из активного окна, находящегося на переднем плане. При выборе команды Save As можно сохранить файл из активного окна с новым именем. Команда Save Project As предназначена для сохранения проекта с другим именем, а с помощью команды Save АН сохраняются все файлы проекта. Когда сохраняется проект, то создается файл с асширением .dpr, который используется при компиляции программы.

Используя пункты главного меню (см. рис. 1.1), можно выполнить все задачи, которые необходимы при разработке проекта. Для вызова некоторых задач удобно использовать специальные панели и отдельные пиктограммы, но они также дублируются в главном меню. Знакомство с отдельными пунктами главного меню будет происходить на протяжении всей книги, поэтому сейчас не будем их последовательно рассматривать. Также не будем останавливаться на пунктах меню, которые хорошо известны по системе Windows, так как читатель должен быть знаком с этой операционной системой.

Рабочий стол и DELPHI

Рабочий стол и DELPHI

В сегодняшнем разделе графики я решил познакомить тебя с издевательством над десктопом. Если говорить точнее, мы сегодня научимся на нём рисовать и запоминать его содержимое. Как всегда, я постараюсь всё хорошенечко растолковать и показать. Надеюсь, что тебе понравится сегодняшнее занятие.

Для издевательств нам понадобиться форма с двумя кнопками и одной картинкой. Создай новый проект и поставь на него две пимпы TButton и один штука TImage. Приступим? Для первой кнопки напишем в событии OnClick :

Читайте также:  Панель быстрого доступа проводника windows

С помощью этой процедуры я рисую прямо на десктопе. Во время рисования, мне насрать на все запущенные приложения. Если они попадаются под руку, то рисование происходит поверх них.

Теперь о содержимом. Я объявляю переменную ScreenDC типа HDC. HDC — это контекст рисования в windows, и работает почти так же, как и TCanvas (чуть позже ты увидешь связь). С помощью функции GetDC(0) я возвращаю контекст окна указанного в скобках. Но в этих скобках стоит 0 (ноль), а это значит, что мне нужен глобальный контекст, то есть самого десктопа.

Далее, я вызываю функцию Rectangle, она похожа на ту, что мы использовали раньше TCanvas.Rectangle. Есть только одно отличие — первый параметр теперь, это контекст устройства, а затем идут координаты прямоугольника. Это связано с тем, что раньше мы рисовали через объект TCanvas, а сейчас будем рисовать средствами GDI Windows. Скажу по секрету 🙂 TCanvas.Rectangle всего лишь вызывает Rectangle из Windows API и подставляет нужный контекст устройства и размеры. Сейчас мы сами сделаем это, без помощь TCanvas.

После рисования, я освобождаю больше не нужный мне контекст через функцию ReleaseDC. Такие вещи обязательно надо освобождать, чтобы не засорять память.

Если ты захочешь рисовать не на десктопе, а внутри определённого окна, то в этой процедуре нужно поправить только первую строчку. А именно, в качестве параметра GetDC передавать указатель на окно. Сразу возникает вопрос: «Как узнать указатель окна чужой проги?». Для этого можно воспользоваться функцией FindWindow (с ней мы уже знакомились в предыдущих номерах).

Сейчас можно запустить прогу и посмотреть на результат, а мы я пока перейду ко второй пимпе. Для неё мы напишем следующий текст:

Сразу скажу, что здесь я получаю копию десктопа.

Первая строка такая же, как и в предыдущей процедуре. Я точно также получаю контекст десктопа. Потом я создаю новую переменную Canvas типа ТCanvas (знакомый нам контекст рисования). Потом я связываю их между собой с помощью простого присваивания в Canvas.Handle:=ScreenDC. Теперь мой TCanvas указывает на декстоп, и я могу рисовать на нём, привычными нам методами.

Далее, я получаю копию экрана и записываю её в картинку TImage с помощью функции Copyrect у контекста рисования картинки (Image1.Canvas.Copyrect). Эта функция выглядит так:

CopyRect производит копирование изображения и одновременное масштабирование из размеров Source в Dest.

В качестве первого параметра идут размеры получаемого изображения. Размеры передаются в виде переменной типа TRect. TRect — это простая запись, которая содержит четыре параметра:

С этим типом мы ещё не знакомы. Если хорошенько рассмотреть, то можно заметить сходство с объявлением объектов. Это так. Записи — это маленькие объекты, но не имеющие методов (процедур и функций), а только параметры любого типа. Все параметры общедоступны и внутри записи нельзя использовать директивы private, protected или public.

Для получения такого типа и использую функцию Rect которая создаёт TRect. В качестве параметров выступают соответствующие размеры Rect(0, 0, Image1.Width, Image1.Height).

Второй параметр — контекст рисования Canvas, который у нас ассоциирован с контекстом десктопа. Из него и будет происходить копирование.

Третий параметр — размеры исходного изображения.

И в самом конце, я освобождаю контекст рисования десктопа ReleaseDC(0,ScreenDC); и Canvas.Free.

Запусти прогу и посмотри на результат. Если что-то ещё осталось непонятным, то после этого всё станет на свои места.

Попробуй поиграть с этой прогой, это поможет тебе получше вникнуть во всё происходящее в ней. А я прощаюсь до следующего номера. Удачи.

Оцените статью