![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с процедурой [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]чё никто не знает чтоли?, люди, очень надо знать почему клинит!