Иллюстрированный самоучитель по Delphi 7 для профессионалов

Использование диалогов для загрузки и сохранения графических файлов

Приводимый ниже пример ModifDlg – усовершенствованная программа просмотра и сохранения файлов растровой графики, к которым относятся файлы форматов JPEG и BMP. Чтобы исключить метафайлы и значки (*.wmf, *.emf, *.ico), соответствующим образом настраиваются фильтры в диалогах открытия и сохранения.

Для изменения размеров диалогового окна нужно отыскать среди входящих в его состав компонентов панель picturePanel (так назвали ее разработчики Borland) и увеличить ее высоту. Следует также поменять и размеры родительских окон. Поскольку они не являются компонентами Delphi (стандартные диалоги являются составными частями Windows) для этой цели используются функции API GetWindowRect и SetWindowPos.

Обратите также внимание, что при загрузке используется событие OnProgress класса TGraphic. В его обработчике информация об объеме проделанной работы отображается на компоненте progressBar1. Для маленьких картинок обработчик вызывается только в начале и в конце операции, пользователь ничего не заметит. Зато при загрузке большого изображения он будет спокоен, видя, что процесс загрузки идет и машина не зависла.

Листинг 10.1. Исходный текст главного модуля программы ModifDlg.

unit mainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
Dialogs,
ExtDlgs, StdCTRLs, ComCTRLs, ExtCTRLs, Buttons;
type
TForml = class(TForm)
SavePictureDialogl: TSavePictureDialog;
OpenPictureDialogl: TOpenPictureDialog;
ScrollBoxl: TScrollBox; Imagel: TImage;
ProgressBari: TProgressBar;
OpenBitBtn: TBitBtn;
SaveBitBtn: TBitBtn;
procedure SavePictureDialoglTypeChange(Sender: TObject);
procedure ImagelProgress(Sender: TObject; Stage: TProgressStage;
PercentDone: Byte;
RedrawNow: Boolean;
const R: TRect;
const Msg: String);
procedure SavePictureDialoglClose(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SavePictureDialoglShow(Sender: TObject);
procedure OpenBitBtnClick(Sender: TObject);
procedure SaveBitBtnClick(Sender: TObject);
private
public
end;
var
Forml: TForml;
implementation
{$R *.DFM}
uses jpeg;
const DeltaH: Integer = 80;
var Quality: TJpegQualityRange;
ProgressiveEnc: Boolean;
procedure TForml.OpenBitBtnClick(Sender: TObject);
begin
if OpenPictureDialogl.Execute
then Imagel.Picture.LoadFromFile
(OpenPictureDialogl.FileName);
end;
procedure TForml.SaveBitBtnClick(Sender: TObject);
var ji: TJpeglmage;
begin
if SavePictureDialogl.Execute then
begin
ji: = TJpeglmage.Create;
ji.CompressionQuality: = Quality;
ji.ProgressiveEncoding: = ProgressiveEnc;
j i.Assign(Imagel.Picture.Bitmap);
ji.SaveToFile(SavePictureDialogl.FileName);
ji.Free;
end;
end;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.