Site icon Обучение программированию с нуля

Отображение картинки в delphi image

Delphi 7. Занятие 2_5. Часть 2.

Продолжение. Начало -> Перейти

Расположим основные элементы управления программы на «Form2».

Интерфейс второй формы.

Как и прежде, решая основной вопрос, мы попутно будем знакомиться с новыми компонентами и функциями.

Для функционировании программы нам понадобятся компонент image delphi и компоненты MainMenu, CheckBox и Panel.

Для начала настроим размеры компонента «Panel».

Для этого введём две глобальные переменные для хранения значений высоты и ширины панели:

var

Form2: TForm2;

var h_rem,w_rem:integer;

и расположим их в секции Interface.

В инспекторе объектов на вкладке «Events» (события) найдём событие «onCreate» (событие возникает перед тем, как среда IDE завершит внутри себя процесс построение кода формы. После завершения построения информация передаётся процессу отображения формы, в конце которого возникает событие «onShow»).

Дважды щёлкаем по пустому полю, в результате чего будет создан обработчик события «CreateForm».

В нём мы зададим и запомним начальные значения высоты и ширины панели на второй форме, после чего установим высоту и ширину панели:

procedure TForm2.FormCreate(Sender: TObject);

begin

h_rem:=380;

w_rem:=630;

//

form2.Image1.Height:=h_rem;

form2.Image1.Width:=w_rem;

//

form2.Panel1.Color:=rgb(200,170,120); //функция rgb(r,g,b) устанавливает цвет по 3-м компонентам: r-красному, g-зелёному и b-синему. Каждый из них может принимать значение от 0 до 255.

//

end;

Здесь мы также устанавливаем цвет панели с помощью функции rgb().

Если менять числа в скобках этой функции от 0 до 255, то получим всю возможную палитру цветов.

Теперь разместим компонент «MainMenu» (главное меню), который находится на вкладке «Standad» и позволяет создать главное меню формы. На форме этот компонент отображается в виде значка, который не виден в период прогона программы. Например:

Компонент «CheckBox» (выбрать) находится на вкладке «Standad» и позволяет организовать в программе выбор. При установленном флажке — один вариант действий, при неустановленном — другой.

Компонент delphi image находится на вкладке «Additional» и на форме выглядит в виде пунктирной рамки. В границах этого компонента отображаются точечные изображения. Стандартно Delpahi поддерживает графические файлы с расширением «.bmp». Чтобы в delphi image загрузить картинку jpg необходимо подключить модуль «JPEG» в предложении «Uses», после чего можно загружать файлы с расширением «.jpg» или «.jpeg».

После размещения компонент на форме последняя будет иметь вид (если раскрыть пункт меню «Показать»):

В качестве фона нарисуем на форме прямоугольник с помощью компонента «Shape»:

площадь которого зальём зелёным цветом.

Над ним разместим панель «Panel1», на которой расположим компонент «Image1».

Главное меню «Form2» создадим в виде:

Первый пункт меню «розы» информационный, он не несёт никакой функциональности и поэтому его свойство «Enabled» выставим в «false». Щелчок по нему ни к чему не приведёт.

В двух следующих пунктах указан размер картинки в пикселях.

Обработчики «кликов» по второму и третьему пунктам будут вызывать загрузку картинок с указанным размером.

В зависимости от состояния флага CheckBox1 будет меняться режим отображения.

При неустановленном флаге картинка будет показаны в своём естественном размере.

При установленном флаге картинка, сохраняя пропорции, будет вписана в изначально заданные границы «Image1».

Обработчики событий пунктов меню.

Чтобы в delphi загрузить картинку в image, создадим следующие обработчики событий.

Первый пункт:

procedure TForm2.N4Click(Sender: TObject);

var ss:string;

begin

ss:=’picters\roza2.jpg’;

unit3.ImageShow(ss);

end;

Второй пункт:

procedure TForm2.N5Click(Sender: TObject);

var ss:string; b:boolean; h,w:integer;

begin

ss:=’picters\roza3.jpg’;

unit3.ImageShow(ss);

end;

Здесь «ImageShow(ss)» процедура, размещённая в модуле «unit3». Она отвечает за отображение картинки в компоненте «Image1» в «Form2».

Модуль «unit3».

В этот модуль вынесем код реализации отображения картинки компонентом «Image». Для этого создана процедура ImageShow():

procedure ImageShow(s:string);

var h,w:integer;

begin

//

form2.Image1.Picture.LoadFromFile(s);//загружаем картинку из файла, чтобы в дальнейшем получить её размеры.

//

if form2.CheckBox2.Checked then //проверяем состояние флажка

begin //флажок возвращает значение «true», которое содержится в свойстве «Checked» компонента CheckBox2.

form2.Image1.Proportional:=true; //устанавливаем свойство Proportional компонента Image1 в true.

//

form2.Image1.Width:=w_rem; //устанавливаем исходные размеры

form2.Image1.Height:=h_rem;

//

form2.Panel1.Width:=w_rem+15; //добавляем 15 пикселей, чтобы образовалась «рамка»

form2.Panel1.Height:=h_rem+15;

//

end //точка с запятой не ставится !!!

else

begin //флажок возвращает значение «false» (галочка в поле флажка не установлена)

form2.Image1.Proportional:=false;

//

w:=form2.Image1.Picture.Width; //получаем размер картинки (ширину и высоту)

h:=form2.Image1.Picture.Height;

//

form2.Image1.Width:=w; //устанавливаем размер поля «Image1» равным размеру картинки.

form2.Image1.Height:=h;

//

form2.Panel1.Width:=w+15;

form2.Panel1.Height:=h+15;

//

end; //конец оператора if

//

form2.Image1.Picture.LoadFromFile(s); //перезагружаем картинку, чтобы применить новые параметры.

//

end; //конец proc

Здесь мы использовали логическую конструкцию if (логическое_выражение) then действия, если (логическое_выражение) после своего вычисления возвращает значение «true» (истина), далее — без «;»! else действия, если (логическое_выражение) после своего вычисления возвращает значение «false» (ложь) ;

Формирование секций «Interface»

Теперь рассмотрим связь модулей между собой.

Как мы отмечали ранее, модуль Unit1 обращается к модулю Unit2, вызывая его отображение: form2.Show;

Поэтому в модуле Unit1 указываем, что модуль Unit1 использует модуль Unit2:

uses Unit2;

Модуль Unit2 обращается к модулю Unit3 для использования расположенной в ней процедуры. Поэтому в модуле Unit2 указываем:

uses Unit3;

Далее, один модуль может видеть переменные и функции в другом модуле, только если они описаны в секции Interface. Если переменные описаны в секции implementation то они видны только внутри этого модуля.

В модуле Unit3 расположена процедура ImageShow(). Чтобы она была видна извне, её описание надо разместить в секции Interface модуля:

unit Unit3;

interface

procedure ImageShow(s:string);

implementation

uses Unit2;

Теперь все модули, в которых есть ссылки в uses на Unit3, могут обращаться к этой процедуре.

С другой стороны, в процедуре ImageShow() есть обращение к переменным h_rem и w_rem. Эти же переменные первоначально используются в модуле Unit2. Поэтому помещаем описание этих переменных в секцию Interface этого модуля:

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ExtCtrls, Menus,JPEG, Spin;

type

var

Form2: TForm2;

var h_rem,w_rem:integer;

Результаты работы программы.

Отображение картинок в реальных размерах.

и

В первом случае картинка полностью вписывается в размеры панели (её размеры меньше).

Во втором — появились полосы прокрутки, так как размер картинки больше размеров панели.

Выставляем флаг «пропорционально».

Отображение первой картинки не изменится (она и так вписывалась в размеры панели), а вот вторая картинка ужмётся, полностью одним из своих размеров вписавшись в панель.

***

Перейти к первой части статьи.