Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с процедурой [D7, XP]


Adios ©   (2006-03-08 20:27:00) 

у меня в программе есть процедура которая устанавливает обои на рабочий стол, 2 типа файлов: .bmp и .jpg, процедура копирует картинку в юзертемп, а если это .jpg то сначала конвертирует её в .bmp, а потом устанавливает в качестве обоев, проблема в следующем: если картинка .bmp, то проблем нет, а если .jpg, то нажатие на кнопку вообще убирает обои с рабочего стола, но если сначала выбрать в качестве обоев .bmp, то потом и .jpg работает нормально, вот процедура:

procedure Tmenu1.choiseClick(Sender: TObject);
begin
FileExt := ExtractFileExt(FileListBox1.Filename);
 if FileExt='.jpg' then
 begin
 JPEGtoBMP(filelistbox1.FileName);
 end;
 if FileExt='.bmp' then
 begin
 f:=FileListBox1.Filename;
 f1:=c_GetTempPath+'\'+'wallpapers'+'.bmp';
 Copyfile(PChar(f),PChar(f1),false);
 end;
wallpapers('wallpapers');
panel1.SetFocus;
end;
========================================
procedure wallpapers(const FileName: TFileName);
begin
reg := TRegIniFile.Create('Control Panel\\Desktop' );
with reg do begin
sWallpaperBMPPath:=f1;
bTile:=false;
WriteString( '', 'Wallpaper', sWallpaperBMPPath );
if( bTile )then begin
WriteString('', 'TileWallpaper', '1' );
end
else begin
WriteString('', 'TileWallpaper', '0' );
end;
end;
reg.Free;
SystemParametersInfo(SPI_SETDESKWALLPAPER, 0, Nil, SPIF_SENDWININICHANGE );

end;
============================================
procedure JPEGtoBMP(const FileName: TFileName);
var
 jpeg: TJPEGImage;  
 bmp:  TBitmap;  
begin  
   jpeg := TJPEGImage.Create;
 try
   jpeg.CompressionQuality := 100;
   jpeg.LoadFromFile(filename);
   bmp := TBitmap.Create;
   try
     bmp.Assign(jpeg);
     bmp.SaveTofile(ChangeFileExt(c_GetTempPath+'\'+'wallpapers', '.bmp'));
   finally
     bmp.Free
 end;
 finally
   jpeg.Free
end;
end;


Adios   (2006-03-10 19:47:00) [1]

на всякий случай отвечу на свой вопрос сам:

> procedure Tmenu1.choiseClick(Sender: TObject);
> begin
> FileExt := ExtractFileExt(FileListBox1.Filename);
>  if FileExt='.jpg' then
>  begin                                <=  f1:=c_GetTempPath+'\'+'wallpapers'+'.bmp';
>  JPEGtoBMP(filelistbox1.FileName);
>  end;
>  if FileExt='.bmp' then
>  begin
>  f:=FileListBox1.Filename;
>  f1:=c_GetTempPath+'\'+'wallpapers'+'.bmp';
>  Copyfile(PChar(f),PChar(f1),false);
>  end;
> wallpapers('wallpapers');
> panel1.SetFocus;
> end;

<= там я забыл объявить переменнуб в которой содержится путь к обоям "f1", поэтому если сначала устанавливать jpg то процедуре негде взять путь к обоям, а если сначала ставить bmp, то переменная объявляется и потом jpg тоже работает нормально.


ЮЮ   (2006-03-09 10:02:00) [2]


> а если это .jpg то сначала конвертирует её в .bmp, а потом
> устанавливает в качестве обоев,


А потом не будет, ибо JPEGtoBMP никак не мееняет FileExt, т.е  условие FileExt='.bmp' всегда ложно для .jpg


Adios   (2006-03-09 09:47:00) [3]

чё никто не знает чтоли?, люди, очень надо знать почему клинит!


Наверх

Титульная страница Поиск, карта сайта Написать письмо