Subversion Repositories autosfx

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 daniel-mar 1
Unit SortGridPreview;
2
(************************************************************************
3
 Copyright (C) 2009, 2010  by Russell J. Peters, Roger Aelbrecht,
4
      Eric W. Engler and Chris Vleghert.
5
 
6
   This file is part of TZipMaster Version 1.9.
7
 
8
    TZipMaster is free software: you can redistribute it and/or modify
9
    it under the terms of the GNU Lesser General Public License as published by
10
    the Free Software Foundation, either version 3 of the License, or
11
    (at your option) any later version.
12
 
13
    TZipMaster is distributed in the hope that it will be useful,
14
    but WITHOUT ANY WARRANTY; without even the implied warranty of
15
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
    GNU Lesser General Public License for more details.
17
 
18
    You should have received a copy of the GNU Lesser General Public License
19
    along with TZipMaster.  If not, see <http://www.gnu.org/licenses/>.
20
 
21
    contact: problems@delphizip.org (include ZipMaster in the subject).
22
    updates: http://www.delphizip.org
23
    DelphiZip maillist subscribe at http://www.freelists.org/list/delphizip
24
************************************************************************)
25
 
26
INTERFACE
27
 
28
uses
29
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
30
  ExtCtrls, StdCtrls, ComCtrls, Buttons, Printers,
31
  ExtDlgs, SortGrid;
32
 
33
type
34
  TSortGridPreviewForm = class( TForm )
35
    ScrollBox1:          TScrollBox;
36
    PreviewImage:        TImage;
37
    Panel1:              TPanel;
38
    Header:              TEdit;
39
    Headers:             TListBox;
40
    Margins:             TListBox;
41
    ckborders:           TCheckBox;
42
    btnprint:            TSpeedButton;
43
    btnshow:             TSpeedButton;
44
    btnsetup:            TSpeedButton;
45
    btnfull:             TSpeedButton;
46
    btnpic:              TSpeedButton;
47
    lblpages:            TLabel;
48
    cklive:              TCheckBox;
49
    PrinterSetupDialog1: TPrinterSetupDialog;
50
    OpenPictureDialog1:  TOpenPictureDialog;
51
    PreviewPage: TEdit;
52
    Margin: TEdit;
53
 
54
    procedure btnshowClick( Sender: TObject );
55
    procedure MarginsClick( Sender: TObject );
56
    procedure btnprintClick( Sender: TObject );
57
    procedure MarginChange( Sender: TObject );
58
    procedure HeaderChange( Sender: TObject );
59
    procedure FormShow( Sender: TObject );
60
    procedure ckbordersClick( Sender: TObject );
61
    procedure previewpageChange( Sender: TObject );
62
    procedure HeadersClick( Sender: TObject );
63
    procedure ckliveClick( Sender: TObject );
64
    procedure btnsetupClick( Sender: TObject );
65
    procedure btnfullClick( Sender: TObject );
66
    procedure FormCreate( Sender: TObject );
67
    procedure FormDestroy( Sender: TObject );
68
    procedure PreviewImageClick( Sender: TObject );
69
    procedure btnpicClick( Sender: TObject );
70
 
71
  private
72
    fGrid:       TSortGrid;
73
    fPrintImage: TBitmap;
74
 
75
    procedure SetGrid( Const Value: TSortGrid );
76
    procedure FullSize;
77
    procedure SetPrintImage( Const Value: TBitmap );
78
    procedure Zoom( factor: Extended );
79
 
80
  published
81
   property Grid: TSortGrid read fGrid write SetGrid;
82
   property PrintImage: TBitmap read fPrintImage write SetPrintImage;
83
end;
84
 
85
var
86
  SortGridPreviewForm: TSortGridPreviewForm;
87
 
88
IMPLEMENTATION
89
 
90
{$R *.DFM}
91
 
92
procedure TSortGridPreviewForm.SetGrid( const Value: TSortGrid );
93
begin
94
   fGrid := Value;
95
end;
96
 
97
procedure TSortGridPreviewForm.btnshowClick( Sender: TObject );
98
begin
99
   if Assigned( fGrid ) then
100
   begin
101
      fGrid.UpdatePreview( fPrintImage.Canvas );
102
      PreviewImage.Picture.Bitmap.Assign( fPrintImage );
103
   end;
104
end;
105
 
106
procedure TSortGridPreviewForm.MarginsClick( Sender: TObject );
107
var
108
   index, s: Integer;
109
begin
110
   index := margins.ItemIndex;
111
   case index of
112
     0: s := Grid.PrintOptions.MarginTop;
113
     1: s := Grid.PrintOptions.PageTitleMargin;
114
     2: s := Grid.PrintOptions.MarginLeft;
115
     3: s := Grid.PrintOptions.MarginRight;
116
     4: s := Grid.PrintOptions.MarginBottom;
117
     5: s := Grid.PrintOptions.Leftpadding;
118
     6: s := Grid.PrintOptions.HeaderSize;
119
     7: s := Grid.PrintOptions.FooterSize;
120
     else
121
       Exit;
122
   end;
123
   Margin.Text := IntToStr( s );
124
end;
125
 
126
procedure TSortGridPreviewForm.btnprintClick( Sender: TObject );
127
begin
128
   Grid.Print;
129
end;
130
 
131
procedure TSortGridPreviewForm.MarginChange( Sender: TObject );
132
var
133
   index, v: Integer;
134
begin
135
   index := margins.ItemIndex;
136
   v := StrToInt( Margin.Text );
137
   case index of
138
     0: Grid.PrintOptions.MarginTop := v;
139
     1: Grid.PrintOptions.PageTitleMargin := v;
140
     2: Grid.PrintOptions.MarginLeft := v;
141
     3: Grid.PrintOptions.MarginRight := v;
142
     4: Grid.PrintOptions.MarginBottom := v;
143
     5: Grid.PrintOptions.Leftpadding := v;
144
     6: Grid.PrintOptions.HeaderSize := v;
145
     7: Grid.PrintOptions.FooterSize := v;
146
   else
147
     Exit;
148
   end;
149
   if cklive.Checked then btnshow.Click;
150
end;
151
 
152
procedure TSortGridPreviewForm.HeaderChange( Sender: TObject );
153
var
154
   index: Integer;
155
begin
156
   index := headers.ItemIndex ;
157
   if index = -1 then Exit;
158
   if index = 0 then
159
      Grid.PrintOptions.PageTitle := header.Text
160
   else if index=1 then
161
      Grid.PrintOptions.PageFooter := header.Text
162
   else if index=2 then
163
      Grid.PrintOptions.DateFormat :=header.Text
164
   else if index=3 then
165
     Grid.PrintOptions.TimeFormat := header.Text
166
   else if index=4 then
167
     Grid.PrintOptions.Logo := header.Text;
168
   if cklive.Checked then btnshow.Click;
169
end;
170
 
171
procedure TSortGridPreviewForm.FormShow( Sender: TObject );
172
begin
173
   Header.Text := Grid.PrintOptions.PageTitle;
174
   Margin.Text := IntToStr( Grid.Printoptions.MarginTop );
175
   Margins.ItemIndex := 0;
176
//   Previewpage.MaxValue := Grid.PageCount;
177
   lblpages.Caption := 'of ' + IntToStr( Grid.PageCount );
178
   Grid.PrintOptions.PreviewPage := 1;
179
   PreviewPage.Text := '1';
180
   ckBorders.Checked := (Grid.PrintOptions.Borderstyle = bsSingle);
181
   Header.Text := Grid.PrintOptions.PageTitle;
182
   Headers.ItemIndex := 0;
183
end;
184
 
185
procedure TSortGridPreviewForm.ckbordersClick( Sender: TObject );
186
begin
187
   if ckborders.Checked then
188
      Grid.PrintOptions.BorderStyle := bsSingle
189
   else
190
     Grid.PrintOptions.BorderStyle := bsNone;
191
   if cklive.Checked then btnshow.Click;
192
end;
193
 
194
procedure TSortGridPreviewForm.previewPageChange( Sender: TObject );
195
begin
196
   Grid.PrintOptions.PreviewPage := StrToInt( PreviewPage.Text );
197
   if cklive.Checked then btnshow.Click;
198
end;
199
 
200
procedure TSortGridPreviewForm.HeadersClick( Sender: TObject );
201
var
202
   index: Integer;
203
begin
204
   index := headers.ItemIndex;
205
   if index = -1 then Exit;
206
   btnpic.Enabled := False;
207
   if index = 0 then
208
     header.Text := Grid.PrintOptions.PageTitle
209
   else if index = 1 then
210
     header.Text := Grid.PrintOptions.PageFooter
211
   else if index = 2 then
212
     header.Text := Grid.PrintOptions.DateFormat
213
   else if index = 3 then
214
     header.Text := Grid.PrintOptions.TimeFormat
215
   else if index = 4 then
216
   begin
217
     header.Text := Grid.PrintOptions.Logo;
218
     btnpic.Enabled := True;
219
   end;
220
end;
221
 
222
procedure TSortGridPreviewForm.ckliveClick( Sender: TObject );
223
begin
224
   if cklive.checked then btnshow.Click ;
225
end;
226
 
227
procedure TSortGridPreviewForm.btnsetupClick( Sender: TObject );
228
begin
229
   if PrinterSetupDialog1.Execute then
230
   begin
231
      Grid.PrintOptions.Orientation := Printer.Orientation;
232
//      Previewpage.MaxValue := Grid.PageCount;
233
      lblpages.Caption := 'of ' + IntToStr( Grid.PageCount );
234
      if cklive.checked then btnshow.Click;
235
   end;
236
end;
237
 
238
procedure TSortGridPreviewForm.FullSize;
239
var
240
   bm:   TBitmap;
241
   w, h: Integer;
242
begin
243
   w := PrintImage.Width;
244
   h := PrintImage.Height ;
245
   bm := TBitmap.Create;
246
   bm.Width := Scrollbox1.ClientWidth;
247
   bm.Height := Round( h / w * bm.Width );
248
   PrintImage.PixelFormat := pf24bit;
249
   bm.PixelFormat := pf24bit;
250
   fGrid.SmoothResize( fPrintImage, bm );
251
   PreviewImage.Picture.Bitmap.Assign( bm );
252
   bm.Free;
253
end;
254
 
255
procedure TSortGridPreviewForm.btnfullClick( Sender: TObject );
256
begin
257
   FullSize;
258
end;
259
 
260
procedure TSortGridPreviewForm.SetPrintImage( const Value: TBitmap );
261
begin
262
   fPrintImage := Value;
263
end;
264
 
265
procedure TSortGridPreviewForm.FormCreate( Sender: TObject );
266
begin
267
   fPrintImage := TBitmap.Create ;
268
end;
269
 
270
procedure TSortGridPreviewForm.FormDestroy( Sender: TObject );
271
begin
272
   fPrintImage.Free;
273
end;
274
 
275
procedure TSortGridPreviewForm.PreviewImageClick( Sender: TObject );
276
var
277
   w, w1: Integer;
278
begin
279
   w1 := PreviewImage.Picture.Bitmap.Width;
280
   w  := fPrintImage.Width;
281
   if ( Round( w * 0.8 ) < w1 ) then
282
   begin
283
      PreviewImage.Picture.Bitmap.Assign( fPrintImage );
284
   end else
285
   begin
286
      Zoom( w1 / w / 0.8 );
287
   end;
288
end;
289
 
290
procedure TSortGridPreviewForm.Zoom( factor: Extended );
291
var bm:   TBitmap;
292
    w, h: Integer;
293
begin
294
   w := PrintImage.Width;
295
   h := PrintImage.Height ;
296
   bm := TBitmap.Create;
297
   bm.Width := Round( factor * w );
298
   bm.Height:= Round( h / w * bm.Width );
299
   PrintImage.PixelFormat := pf24bit;
300
   bm.PixelFormat := pf24bit;
301
   fGrid.SmoothResize( fPrintImage, bm );
302
   Previewimage.Picture.Bitmap.Assign( bm );
303
   bm.Free;
304
end;
305
 
306
procedure TSortGridPreviewForm.btnpicClick( Sender: TObject );
307
begin
308
   if OpenPictureDialog1.Execute then if Headers.ItemIndex = 4 then
309
   begin
310
      header.Text := OpenPictureDialog1.Filename;
311
      Grid.PrintOptions.Logo := OpenPictureDialog1.Filename;
312
   end;
313
end;
314
 
315
End.