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