Вывод иллюстраций
begin // иллюстрация уже загружена // получим ее размеры pw: = Form1.Image1.Picture.Width; ph: = Form1.Image1.Picture.Height; if pw > iw // ширина иллюстрации больше ширины компонента Image then scaleX: = iw/pw // нужно масштабировать else scaleX: = 1; if ph > ih // высота иллюстрации больше высоты компонента then scaleY: = ih/ph // нужно масштабировать else scaleY: = 1; // выберем наименьший коэффициент if scaleX < scaleY then scale: = scaleX else scale: = scaleY; // изменим размер области вывода иллюстрации Form1.Image1.Height: = Round(Form1.Image1.Picture.Height*scale) Form1.Image1.Width: = Round(Form1.Image1.Picture.Width*scale); // т. к. Strech = True и размер области пропорционален // размеру картинки, то картинка масштабируется без искажений end; // вывести первую иллюстрацию procedure FirstPicture; var r: integer; // результат поиска файла begin aPath: = 'f:\temp\'; r: = FindFirst(aPath+'*.bmp',faAnyFile,aSearchRec); if r = 0 then begin // в указанном каталоге есть bmp-файл aFile: = aPath + aSearchRec.Name; Form1.Image1.Picture.LoadFromFile(aFile); // загрузить // иллюстрацию Scalelmage; //-установить размер компонента Image r: = FindNext(aSearchRec); // найти следующий файл if r = 0 then // еще есть файлы иллюстраций Forml.Button1.Enabled: = True; end; end; // вывести следующую иллюстрацию Procedure NextPicture(); var r: integer; begin aFile: = aPath + aSearchRec.Name; Forml.Image1.Picture.LoadFromFile(aFile); Scalelmage; // подготовим вывод следующей иллюстрации r: = FindNext(aSearchRec); // найти следующий файл if r<>0 then // больше нет иллюстраций Forml.Buttonl.Enabled: = False; end; procedure TForml.FormActivate(Sender: TObject); begin Image1.AutoSize: = False; // запрет автоизменения размера компонента Image1.Stretch: = True; // разрешим масштабирование // запомним первоначальный размер области вывода иллюстрации iw: = Imagel.Width; in: = imagel.Height; Button1.Enabled: = False; // сделаем недоступной кнопку Дальше FirstPicture; // вывести первую иллюстрацию end; //щелчок на кнопке Дальше procedure TForm1.Button1Click(Sender: TObject); begin NextPicture; end; end.
Программа выполняет масштабирование выводимых иллюстраций без искажения, чего нельзя добиться простым присвоением значения True свойству strech. Загрузку и вывод первой и остальных иллюстраций выполняют соответственно процедуры FirstPicture и NextPicture. Процедура FrirstPicture использует функцию FindFirst для того, чтобы получить имя первого BMP-файла. В качестве параметров функции FindFirst передаются:
- имя каталога, в котором должны находиться иллюстрации;
- структура asearchRec, поле Name которой, в случае успеха, будет содержать имя файла, удовлетворяющего критерию поиска;
- маска файла иллюстрации.
Если в указанном при вызове функции FindFirst каталоге есть хотя бы один BMP-файл, значение функции будет равно нулю. В этом случае метод LoadFromFiie загружает файл иллюстрации, после чего вызывается функция scaieimage, которая устанавливает размер компонента пропорционально размеру иллюстрации. Размер загруженной иллюстрации можно получить, обратившись к свойствам Form1.Image1.Picture.Width и Form1.Image1.Picture.Height, значения которых не зависят от размера компонента Image.