|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Кто ответит тот король!!!
Привет всем.
У меня вот тут проблема. Пишу програмку для себя и никак не могу разобраться.Программа пока состоит из 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
|
||||
|
||||
Ну и в чем проблема, получить текущую строку из листбокса? Если твой код верен то:
Код:
SystemParametersInfo(SPI_SETDESKWALLPAPER,0,PChar(ListBox1.Items[ListBox1.ItemIndex]),WM_SETTINGCHANGE); |
#3
|
||||
|
||||
Цитата:
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
|
|||
|
|||
Спасибо вам ребята огромное, что откликнулись.
Теперь всё работает. Я проверил и первый, и второй варианты и немного доделал певый: "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
|
||||
|
||||
Цитата:
|
#6
|
||||
|
||||
to perdimonokl:
Скажи, ты под какой операционкой работаешь? У меня WinXP SP2, и твой код Цитата:
И потом, изменения в реестре лучше сделать, т.к. когда ты откравыешь настройки рабочего стола (вкладку "Рабочий стол"), то все данные о каритнке и ее положении на рабочем столе берутся именно из реестра. В твоем случае может получиться несовпадение, на рабочем столе одна картинка, а в свойствах другая. |
#7
|
||||
|
||||
А код действительно не работающий т.к. я его и не проверял. Повторяю, я посчитал что вопрошающий не знает как обратится к текущему элементу ListBox'а
ЗЫЖ вот этот код работает на ура: Код:
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0,PChar('C:\1.bmp'),SPIF_UPDATEINIFILE) Цитата:
ЗЗЫЖ WinXPSP2 |
#8
|
||||
|
||||
to Aristarh Dark:
Цитата:
|