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
Нужно использовать следующее:
usesComObj, ShlObj;
procedureChangeActiveWallpaper;
constCLSID_ActiveDesktop: TGUID = '{75048700-EF1F-11D0-9888-006097DEACF9}';
varActiveDesktop: IActiveDesktop;
begin
ActiveDesktop := CreateComObject(CLSID_ActiveDesktop) asIActiveDesktop;
ActiveDesktop.SetWallpaper('c:\windows\forest.bmp', 0);
ActiveDesktop.ApplyChanges(AD_APPLY_ALL orAD_APPLY_FORCE);
end;
Этим способом можно также изменять обои картинками jpg и gif.
А как поместить свою иконку на taskbar, там где часы и переключатель клавиатуры?
Nomadicсоветует:
A: В библиотеке rxLib есть компонент TrxTrayIcon. Заметьте, что для корректного завершения работы операционной системе вам потребуется обрабатывать сообщение WM_QUERYENDSESSION.
Как ограничить перемещение курсора мыши какой-либо областью экрана?
Nomadicотвечает:
A: ClipCursor(). Учтите, что использование этой функции – плохой тон.
Использование InputBox и InputQuery
Тема: Использование InputBox, InputQuery и ShowMessage
Данная функция демонстрирует 3 очень мощных и полезных процедуры, интегрированных в Delphi.
Диалоговые окна InputBox и InputQuery позволяют пользователю вводить данные.
Функция InputBox используется в том случае, когда не имеет значения что пользователь выбирает для закрытия диалогового окна – кнопку OK или кнопку Cancel (или нажатие клавиши Esc). Если вам необходимо знать какую кнопку нажал пользователь (OK или Cancel (или нажал клавишу Esc)), используйте функцию InputQuery.
ShowMessage – другой простой путь отображения сообщения для пользователя.
procedureTForm1.Button1Click(Sender: TObject);
var
s, s1: string;
b: boolean;
begin
s := Trim(InputBox('Новый пароль', 'Пароль', 'masterkey'));
b := s <> '';
s1 := s;
ifb thenb := InputQuery('Повторите пароль', 'Пароль', s1);
if notb or(s1 <> s) thenShowMessage('Пароль неверен');
end;
Текст на кнопках MessageDlg
Как можно сменить текст на кнопках диалогового окна MessageDlg? Английский язык для текста кнопок пользователь хочет заменить на родной.
Текст кнопок извлекается из списка строк, расположенных в файле …\DELPHI\SOURCE\VCL\CONSTS.PAS. Отредактируйте его, после чего пересоберите VCL.
-Steve Schafer
Дополнение
VSдополняет:
Но можно ничего не менять. Вместо MessageDlg использовать MessageBox – функция WINDOWS. И, если ваш WINDOWS русифицирован, то надписи на кнопках в диалоговых окнах будут на русском языке.
Почитайте про Open Dialog Box (диалоговое окно открытия файла) в файле помощи Windows API. Ознакомьтесь в статье с описанием аргумента lpTemplateName. Главное, вы можете создать новое диалоговое окно для Open Dialog Box и заменить стандартный диалог вашим собственным.
Как вывести диалог выбора каталога?
Nomadicсоветует:
A: (DS): SelectDirectory, rxLib: TDirectoryEdit.
Как послать самостийное сообщение всем главным окнам в Windows?
Nomadicсоветует:
Пример:
VarFM_FINDPHOTO: Integer;
// Для того, чтобы использовать hwnd_Broadcast нужно сперва зарегистрировать уникальное
// сообщение.
Initialization
FM_FindPhoto:=RegisterWindowMessage('MyMessageToAll');
// Чтобы поймать это сообщение в другом приложении (приёмнике) нужно перекрыть DefaultHandler
procedureTForm1.DefaultHandler( var Message);
begin
withTMessage( Message) do begin
ifMsg = Fm_FindPhoto thenMyHandler(WPARAM,LPARAM)
else InheritedDefaultHandler(Message);
end;
end;
// А теперь можно в приложении-передатчике
SendMessage(HWND_BROADCAST, FM_FINDPHOTO, 0, 0);
Кстати, для посылки сообщения дочерним контролам некоего контрола можно использовать метод Broadcast.
Читать дальше