Сам себе программист

SystemParametersInfo.RU

Главная Обучение Рассылка? FAQ Юмор Заказ! Кто мы? Антиглюк 3D:+Delphi Здесь приведён перевод справки Delphi по запросу "SystemParametersInfo".
Извините, перевод пока неполный и кривой :(
SystemParametersInfo - функция, позволяющая изменять текущие настройки системы.
SystemParametersInfo(
UINT uiAction, // Системный параметр
UINT uiParam,  // зависит от параметра и действия
PVOID pvParam, // зависит от параметра и действия
UINT fWinIni   // флаг: нужно ли обновить настройки пользователя(файл WinIni)
  );

Параметр Значение
SPI_GETBEEP Указывает, включено ли предупреждающее устройство звуковой сигнализации. Параметр pvParam является логическим указателем ,если TRUE- включено, FALSE - нет.
SPI_GETBORDER Возвращает ширину границы окна, если uiParam=ширина границы,то возвращается TRUE, иначе - False; pvParam-целое или nil
SPI_GETDEFAULTINPUTLANG Возвращает язык ввода по умолчанию,pvParam-32битная переменная, содержит раскладку клавиатуры
SPI_GETFONTSMOOTHING Указывает, включено ли сглаживание шрифтов
SPI_GETSCREENSAVEACTIVE Определяет, работает ли заставка,pvParam - true/false
SPI_GETSCREENSAVETIMEOUT Определяет время до включения заставки,pvParam-целое число
SPI_GETWHEELSCROLLLINES Определяет,на сколько строк сдвигается страница при прокрутке колёсиком мыши
SPI_GETWORKAREA Определяет размер рабочего стола без панели задач, pvParam - типа RECT, возвращает прямоугольник
SPI_SCREENSAVERRUNNING подаёт сигнал, что работает заставка
SPI_SETBORDER Устанавливает ширину границы окна=pvParam, целое число
SPI_SETDEFAULTINPUTLANG Устанавливает раскладку по умолчанию,pvParam- 32 бита, пример ~ 00000409
SPI_SETDESKWALLPAPER Устаналивает обои. pvParam-путь к картинке в формате BMP
SPI_SETDOUBLECLICKTIME Уст-ет скорость двойного щелчка в миллисекундах
SPI_SETDOUBLECLKHEIGHT Устанавливает высоту прямоугольника, в котором должны произойти 2 щелчка, чтобы быть зарегистрированными как двойной
SPI_SETDOUBLECLKWIDTH Ширина прямоугольника, см выше,
SPI_SETDRAGHEIGHT Устанавливает высоту, на которую нужно сместить обьект,чтобы включилось перетаскивание
SPI_SETDRAGWIDTH Ширина, см выше
SPI_SETFONTSMOOTHING Устанавливает сглаживание экранных шрифтов, uiParam=true- включить
SPI_SETSCREENSAVEACTIVE Если uiParam =truе, включает заставку, иначе - выключает
SPI_SETSCREENSAVETIMEOUT Устанавливает время до включения заставки
SPI_SETWORKAREA Устанавливает рабочую область, без панели задач,pvParam -rect, прямоугольник
Параметр Значение

uiParam-
Зависит от системного параметра, запрашиваемого или установленного. Более подробно об общесистемных параметрах смотри параметр uiAction. Если ничего не указано, определите как нуль(nil,0).
pvparam
Зависит от системного параметра, запрашиваемого или установленного. Более подробно об общесистемных параметрах смотри параметр uiAction. Если ничего не указано, определите как нуль(nil,0).
fWinIni
Если параметр установлен, то профиль пользователя должен быть скорректирован.
А теперь - пример, где это может пригодиться.
Как сделать программу для смены картинки рабочего стола?
Как раз с помощью SPI (SystemParametersInfo). Причём - очень просто!
Запускаем Делфи(без этого почти никак не обойтись!!:)),
Файл-Создать-Программа, естественно. Теперь кидаем на главную форму ListBox,MainMenu(Закладка Standart), OpenPictureDialog (Закладка Dialogs), и Image(закладка Additional). У Списка(ListBox1) align устанавливаем как AlClient, у рисунка (Image) - как alright, затем добавляем в Главное Меню(MainMenu) пункты:
Файл=Добавить-Выход
Список=Очистить-Удалить строку-Переместить вверх-Переместить вниз
А вот теперь начнём писать!
1) Добавляем картинку в список:
//(Действие при щелчке на пункте меню "Добавить"
procedure TForm1.N2Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute
then
 begin
  listbox1.items.add(OpenPictureDialog1.filename);
  //Добавили файл в список
  image1.Picture.LoadFromFile(OpenPictureDialog1.filename);
  //Загрузили картинку в рисунок, чтобы показать
 end;
end;
 
Теперь - делаем обработчик события ONCLICK для Listbox'a: при щелчке будем показывать выбранную картинку
procedure TForm1.ListBox1Click(Sender: TObject);
begin
image1.Picture.LoadFromFile(listbox1.items[listbox1.itemindex]);
end;
Теперь - самое интересное: установка рабочего стола. Пусть она будет выполнятся при двойном щелчке по списку. Идём в Инспектор Обьектов, выделяем Listbox, идём на закладку Evens, щёлкаем в поле рядом с OnDblClick:
procedure TForm1.ListBox1DblClick(Sender: TObject);
begin
systemparametersinfo(spi_setdeskwallpaper,0,
pchar(listbox1.items[listbox1.itemindex]), SPIF_SENDWININICHANGE);
//pchar(listbox1.items[listbox1.itemindex])- загоняем строку типа String в PAnsiChar -
//так, видимо, для Делфи удобней :)

end;
Вот теперь уже пожем поменять картинку на рабочем столе. Наконец-то :))
Теперь сделаем, чтобы программа могла сама менять картинку на рабочем столе через определённое время. Кидаем на форму Timer(закладка System), в обработчик ONtimer добавляем:

procedure TForm1.Timer1Timer(Sender: TObject);
var a: integer;//Вспомогательная переменная
begin
if listbox1.itemindex=-1 then exit;//Если список пуст-выходим из процедуры
a:=listbox1.itemindex;//Присваиваем переменной А значение номера строки
listbox1.itemindex:=listbox1.itemindex+1;
if a=listbox1.itemindex then listbox1.itemindex:=0;
//Если при увеличении номера строки он не изменяется(равн старому),
//то переставляем выделение на первую строку, т.е строку №0
image1.Picture.LoadFromFile(listbox1.items[listbox1.itemindex]);
systemparametersinfo(spi_setdeskwallpaper,1,
pchar(listbox1.items[listbox1.itemindex]), SPIF_SENDWININICHANGE);

end;

Вот теперь уже меняется рабочий стол! Отлично... Теперь при выключении программы нужно сохранить созданный нами список - выделяем Form1, форму, идём в инспктор обьектов, зaкладка Events,событие OnClose
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
listbox1.items.savetofile('c:\list.list');
end;
Конечно, не обязательно сохранять прямо на Диске С: - некоторые любопытные пользователи любят удалять всё подряд :))
Для сохранения файла списка в каталоге с программой используйте следующее:
listbox1.items.savetofile(
extractfilepath(paramstr(0))+'list.list');
extractfilepath-даёт путь к файлу,
paramstr(0)-первый параметр запуска программы, то есть имя программы.
Теперь остаётся сделать, чтобы список сам загружался при старте программы: делаем двойной щелчок по форме, появляется обработчик события OnCreate формы
procedure TForm1.FormCreate(Sender: TObject);
begin
if fileexists(extractfilepath(paramstr(0))+'list.list') then
//Если файл существует, то загружаем из него список
listbox1.Items.LoadFromFile(extractfilepath(paramstr(0))+'list.list');
end;
Теперь мы имеем почти полностью рабочую программу. А как же с пунктами "Переместить вверх" и "Переместить вниз" ?
Это не сложно, подумайте сами:)) Если хотите блеснуть знаниями, то присылайте свои варианты этих действий :) Будут опубликованы все РАЗЛИЧАЮЩИЕСЯ ответы(+имена авторов) и список ответивших одинаково.

Прислать вопрос Прислать анекдот или смешную историю, связанную с компьютером
Обучение Рассылка Мои программы FAQ 3D+Delphi АнтиглюкЮмор Прикольно?ю Заказ! Кто мы? Глюки... System Parameters Info
Хостинг от uCoz