Пример из серии "Что можно сделать с рабочим столом". В общем, это обычный трюк с кнопкой "Пуск" (Start).
Совместимость: все версии Delphi
{ объявляем глобальные переменные }
var
Form1: TForm1;
StartButton: hWnd;
OldBitmap: THandle;
NewImage: TPicture;
{ добавляем следующий код в событие формы OnCreate }
procedure TForm1.FormCreate(Sender: TObject);
begin
NewImage := TPicture.create;
NewImage.LoadFromFile('C:\Windows\Circles.BMP');
StartButton := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);
OldBitmap := SendMessage(StartButton, BM_SetImage, 0, NewImage.Bitmap.Handle);
end;
{ Событие OnDestroy }
procedure TForm1.FormDestroy(Sender: TObject);
begin
SendMessage(StartButton, BM_SetImage, 0, OldBitmap);
NewImage.Free;
end;
Как программно заменить обои на рабочем столе? III
Igor Nikolaev aKa The Sprite советует:
program wallpapr;
uses Registry, WinProcs;
procedure SetWallpaper(sWallpaperBMPPath: String; bTile: boolean);
var reg : TRegIniFile;
begin
// Изменяем ключи реестра
// HKEY_CURRENT_USER
// Control Panel\Desktop
// TileWallpaper (REG_SZ)
// Wallpaper (REG_SZ)
reg := TRegIniFile.Create('Control Panel\Desktop');
with reg do begin
WriteString('', 'Wallpaper', sWallpaperBMPPath);
if (bTile) then begin
WriteString('', 'TileWallpaper', '1');
end else begin
WriteString('', 'TileWallpaper', '0');
end;
end;
reg.Free;
// Оповещаем всех о том, что мы изменили системные настройки
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil,
{Эта строка – продолжение предыдущей} SPIF_SENDWININICHANGE);
end;
// пример установки WallPaper по центру рабочего стола
SetWallpaper('c:\winnt\winnt.bmp', False);
//Эту строчку надо написать где-то в программе.
Как программно заменить обои на рабочем столе? IV
Владимир Рыбант пишет:
Советы «Как програмно заменить обои на рабочем столе» I, II, III не изменяют обои, если в Windows работает в режиме Active Desktop
Нужно использовать следующее:
uses ComObj, ShlObj;
procedure ChangeActiveWallpaper;
const CLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
var ActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) as IActiveDesktop;
ActiveDesktop.SetWallpaper('c:\windows\forest.bmp', 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL or AD_APPLY_FORCE);
end;
Этим способом можно также изменять обои картинками jpg и gif.
А как поместить свою иконку на taskbar, там где часы и переключатель клавиатуры?
Nomadic советует:
A: В библиотеке rxLib есть компонент TrxTrayIcon. Заметьте, что для корректного завершения работы операционной системе вам потребуется обрабатывать сообщение WM_QUERYENDSESSION.
Как ограничить перемещение курсора мыши какой-либо областью экрана?
Одной строкой
Nomadic отвечает:
A: ClipCursor. Учтите, что использование этой функции – плохой тон.
Диалоги
Использование InputBox и InputQuery
Тема: Использование InputBox, InputQuery и ShowMessage
Данная функция демонстрирует 3 очень мощных и полезных процедуры, интегрированных в Delphi.