Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Рабочий стол
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.07.2006, 09:49
perdimonokl perdimonokl вне форума
Прохожий
 
Регистрация: 24.07.2006
Сообщения: 2
Репутация: 10
По умолчанию Кто ответит тот король!!!

Привет всем.
У меня вот тут проблема.
Пишу програмку для себя и никак не могу разобраться.Программа пока состоит из ListBox,MainMenu и Button.Так вот послевыбора из подпункта
MainMenu открыть я добовляю файл в ListBox так:
"var
FileName: String;
begin
if OpenDialog1.Execute then Filename:=OpenDialog1.FileName;
listbox1.items.add(Filename);
end;"
а по нажатию Button нужно,чтобы менялась картинка рабочего стола на выбранный из ListBox файл.Функция отвечающая за смену картинки рабочего стола:
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,'файл из listbox',WM_SETTINGCHANGE);
Помогите кто может!!!
Ответить с цитированием
  #2  
Старый 24.07.2006, 12:13
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Ну и в чем проблема, получить текущую строку из листбокса? Если твой код верен то:
Код:
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar(ListBox1.Items[ListBox1.ItemIndex]),WM_SETTINGCHANGE);
Ответить с цитированием
  #3  
Старый 24.07.2006, 12:18
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

Цитата:
Сообщение от Aristarh Dark
Ну и в чем проблема, получить текущую строку из листбокса? Если твой код верен то:
Код:
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar(ListBox1.Items[ListBox1.ItemIndex]),WM_SETTINGCHANGE);

to Aristarh Dark: Предложенный тобой код у меня не сработал.

А вот так получилось:

Код:
uses
  ..., Registry, ShlObj, ComObj;

// Процедура для смены обоев
procedure ChangeWallpaper( WallPath: string );
var
  Reg: TRegistry;
  ActiveDesktop: IActiveDesktop;
begin
   with TRegistry.Create do
   begin
      RootKey := HKEY_CURRENT_USER;
      OpenKey( 'Control Panel\Desktop', false );
      WriteString( 'Wallpaper', WallPath );
      // Если обои надо растянуть на весь рабочий стол, пиши так
      WriteString( 'Desktop\TileWallpaper', '0' );
      WriteString( 'Desktop\WallpaperStyle', '2' );
      // Если обои надо сделать по центру
      // WriteString( 'Desktop\TileWallpaper', '0' );
      // WriteString( 'Desktop\WallpaperStyle', '0' );
      // Если рабочий стол нужно "замостить"
      // WriteString( 'Desktop\TileWallpaper', '1' );
      // WriteString( 'Desktop\WallpaperStyle', '0' );
      CloseKey;
      Free;
   end;
   SystemParametersInfo( SPI_SETDESKWALLPAPER, 0, nil, SPIF_SENDWININICHANGE );
   ActiveDesktop := CreateComObject( CLSID_ActiveDesktop ) as IActiveDesktop;
   ActiveDesktop.ApplyChanges( AD_APPLY_ALL or AD_APPLY_FORCE );
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   ChangeWallpaper( ListBox1.Items.Strings[ListBox1.ItemIndex] );
end;

В ListBox соответственно должен быть полный путь к картинке.
Ответить с цитированием
  #4  
Старый 24.07.2006, 18:19
perdimonokl perdimonokl вне форума
Прохожий
 
Регистрация: 24.07.2006
Сообщения: 2
Репутация: 10
По умолчанию

Спасибо вам ребята огромное, что откликнулись.
Теперь всё работает.
Я проверил и первый, и второй варианты и немного доделал певый:
"procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
begin
if ListBox1.ItemIndex = -1 then S := '' else S := ListBox1.Items[ListBox1.ItemIndex];
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(S) ,WM_SETTINGCHANGE);
end;"
Спасибо за ответы огромное. Если что, то только к вам.
Ответить с цитированием
  #5  
Старый 25.07.2006, 05:40
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Decoding
to Aristarh Dark: Предложенный тобой код у меня не сработал.
Так я и не обещал его работоспособности, т.к. картинки на рабочем столе не менял никогда ибо это детские шалости Я просто предположил, что perdimonokl начинающий и не знает как обратится к текущему элементу ListBox'а
Ответить с цитированием
  #6  
Старый 25.07.2006, 12:03
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

to perdimonokl:

Скажи, ты под какой операционкой работаешь? У меня WinXP SP2, и твой код
Цитата:
procedure TForm1.Button1Click(Sender: TObject);
var
S: String;
begin
if ListBox1.ItemIndex = -1 then S := '' else S := ListBox1.Items[ListBox1.ItemIndex];
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, PChar(S) ,WM_SETTINGCHANGE);
end;
нифига не работает.

И потом, изменения в реестре лучше сделать, т.к. когда ты откравыешь настройки рабочего стола (вкладку "Рабочий стол"), то все данные о каритнке и ее положении на рабочем столе берутся именно из реестра. В твоем случае может получиться несовпадение, на рабочем столе одна картинка, а в свойствах другая.
Ответить с цитированием
  #7  
Старый 25.07.2006, 13:39
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

А код действительно не работающий т.к. я его и не проверял. Повторяю, я посчитал что вопрошающий не знает как обратится к текущему элементу ListBox'а
ЗЫЖ вот этот код работает на ура:
Код:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,PChar('C:\1.bmp'),SPIF_UPDATEINIFILE)
причем картинка добавляется в свойства и противоречия типа:
Цитата:
...может получиться несовпадение, на рабочем столе одна картинка, а в свойствах другая...
не наблюдается
ЗЗЫЖ WinXPSP2
Ответить с цитированием
  #8  
Старый 25.07.2006, 14:15
Аватар для Decoding
Decoding Decoding вне форума
Местный
 
Регистрация: 03.06.2006
Адрес: Почту найдете на моем сайте
Сообщения: 576
Версия Delphi: D10.2
Репутация: 214
По умолчанию

to Aristarh Dark:

Цитата:
ЗЫЖ вот этот код работает на ура:
Код:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,PChar('C:\1.bmp'),SPIF_UPDATEINIFILE)
А знаешь в чем фишка? Фишка в том, что приведенный тобой код сработает, только если картинка формата BMP. Мой код сработает и с другими картинками (проверено на JPG).
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 02:47.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter