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

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

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

unit mainUnit;

interface

uses

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

ExtBlgs, StdCtrls, ComCtrls, ExtCtrls, Buttons; type

TForml = class(TForm)

SavePictureDialogl: TSavePictureBialog;
OpenPictureDialogl: TOpenPictureBialog;
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; irrplarentat ion

{$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: TObj ect) ;
var ji : TJpeglmage;
begin
if SavePictureDialogl.Execute then begin
ji := TJpeglmage.Create;
ji.CompressionQuality := Quality;
ji.ProgressiveEncoding := ProgressiveEnc;
ji.Assign(Imagel.Picture.Bitmap);
ji.SaveToFile(SavePictureDialogl.FileName);
ji.Free;
end;
end;
procedure TForml. SavePictureDialoglTypeChange (Sender: TObject) ;
var ParentHandle:THandle;wRect:TRect;
PicPanel, PaintPanel:TPanel;
JEdit : TEdit;
Expanded : boolean;

begin With Sender as TSavePictureDialog do

begin
PicPanel := (FindComponent('PicturePanel') asTPanel);
if not Assigned(PicPanel) then Exit;
ParentHandle:=GetParent(Handle) ;
PaintPanel: = (FindComponent('PaintPanel') as TPanel) ;
PaintPanel.Align := alNone;
Expanded := FindComponent('JLabel') <>
nil;
if Filterlndex >1 then begin
if not Expanded then begin
GetWindowRect(ParentHandle,WRect);
SetWindowPos(ParentHandle,0,0,0,WRect.Right-WRect.Left, WRect.Bottom-WRect.Top+DeltaH,SWPJSIOMOvE+SWPJSIOZORDER);
GetWindowRect(Handle,WRect);

⇐ Предыдущая страница| |Следующая страница ⇒

Программирование в Delphi 7



Новости за месяц

  • Август
    2017
  • Пн
  • Вт
  • Ср
  • Чт
  • Пт
  • Сб
  • Вс