Skip to content

Commit 6eecdd8

Browse files
committed
fix: crash in printer dialog with 0 printers available
Refs #2283
1 parent 65c1472 commit 6eecdd8

File tree

1 file changed

+117
-107
lines changed

1 file changed

+117
-107
lines changed

source/printlist.pas

Lines changed: 117 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -1,107 +1,117 @@
1-
unit printlist;
2-
3-
{$mode delphi}{$H+}
4-
5-
// -------------------------------------
6-
// Print TListView-Content
7-
// -------------------------------------
8-
9-
10-
interface
11-
12-
uses
13-
Classes, Controls, Forms, Dialogs, StdCtrls, Printers, laz.VirtualTrees,
14-
PrintersDlgs;
15-
16-
type
17-
18-
{ TprintlistForm }
19-
20-
TprintlistForm = class(TForm)
21-
comboPrinters: TComboBox;
22-
btnConfigure: TButton;
23-
btnCancel: TButton;
24-
btnPrint: TButton;
25-
PrinterSetup: TPrinterSetupDialog;
26-
lblSelect: TLabel;
27-
chkPrintHeader: TCheckBox;
28-
procedure btnConfigureClick(Sender: TObject);
29-
procedure btnPrintClick(Sender: TObject);
30-
procedure comboPrintersChange(Sender: TObject);
31-
procedure FormShow(Sender: TObject);
32-
private
33-
{ Private declarations }
34-
public
35-
{ Public declarations }
36-
end;
37-
38-
39-
implementation
40-
41-
uses main, apphelpers, {table_editor, }dbconnection;
42-
43-
{$R *.lfm}
44-
45-
46-
procedure TprintlistForm.FormShow(Sender: TObject);
47-
begin
48-
// show!
49-
Screen.Cursor := crHourGlass;
50-
comboPrinters.Items := Printer.printers;
51-
comboPrinters.ItemIndex := Printer.printerIndex;
52-
Screen.Cursor := crDefault;
53-
end;
54-
55-
procedure TprintlistForm.btnConfigureClick(Sender: TObject);
56-
begin
57-
Screen.Cursor := crHourglass;
58-
printerSetup.Execute;
59-
comboPrinters.ItemIndex := Printer.PrinterIndex;
60-
Screen.Cursor := crDefault;
61-
end;
62-
63-
procedure TprintlistForm.btnPrintClick(Sender: TObject);
64-
var
65-
list: TVirtualStringTree;
66-
begin
67-
// print!
68-
Screen.Cursor := crHourglass;
69-
list := nil;
70-
// which ListView to print?
71-
case Mainform.PageControlMain.ActivePageIndex of
72-
0: case Mainform.PageControlHost.ActivePageIndex of
73-
0: list := Mainform.ListDatabases;
74-
1: list := Mainform.ListVariables;
75-
2: list := Mainform.ListStatus;
76-
3: list := Mainform.ListProcesses;
77-
else list := Mainform.ListCommandStats;
78-
end;
79-
1: list := Mainform.ListTables;
80-
2: begin
81-
if Assigned(Mainform.ActiveObjectEditor)
82-
and (Mainform.ActiveObjectEditor.DBObject.NodeType = lntTable)
83-
and Mainform.ActiveObjectEditor.Visible then
84-
list := (Mainform.ActiveObjectEditor as TfrmTableEditor).listColumns;
85-
end;
86-
else list := Mainform.ActiveGrid;
87-
end;
88-
if Assigned(list) then
89-
try
90-
list.Print(Printer, chkPrintHeader.Checked);
91-
except
92-
on E:EPrinter do
93-
ErrorDialog(E.Message);
94-
end;
95-
Screen.Cursor := crDefault;
96-
end;
97-
98-
99-
procedure TprintlistForm.comboPrintersChange(Sender: TObject);
100-
begin
101-
// chose printer
102-
Screen.Cursor := crHourglass;
103-
Printer.PrinterIndex := comboPrinters.ItemIndex;
104-
Screen.Cursor := crDefault;
105-
end;
106-
107-
end.
1+
unit printlist;
2+
3+
{$mode delphi}{$H+}
4+
5+
// -------------------------------------
6+
// Print TListView-Content
7+
// -------------------------------------
8+
9+
10+
interface
11+
12+
uses
13+
Classes, Controls, Forms, Dialogs, StdCtrls, Printers, laz.VirtualTrees,
14+
PrintersDlgs, SysUtils;
15+
16+
type
17+
18+
{ TprintlistForm }
19+
20+
TprintlistForm = class(TForm)
21+
comboPrinters: TComboBox;
22+
btnConfigure: TButton;
23+
btnCancel: TButton;
24+
btnPrint: TButton;
25+
PrinterSetup: TPrinterSetupDialog;
26+
lblSelect: TLabel;
27+
chkPrintHeader: TCheckBox;
28+
procedure btnConfigureClick(Sender: TObject);
29+
procedure btnPrintClick(Sender: TObject);
30+
procedure comboPrintersChange(Sender: TObject);
31+
procedure FormShow(Sender: TObject);
32+
private
33+
{ Private declarations }
34+
public
35+
{ Public declarations }
36+
end;
37+
38+
39+
implementation
40+
41+
uses main, apphelpers, {table_editor, }dbconnection;
42+
43+
{$R *.lfm}
44+
45+
46+
procedure TprintlistForm.FormShow(Sender: TObject);
47+
begin
48+
// show!
49+
Screen.Cursor := crHourGlass;
50+
comboPrinters.Items := Printer.printers;
51+
try
52+
if comboPrinters.Items.Count > 0 then begin
53+
comboPrinters.ItemIndex := Printer.printerIndex;
54+
btnConfigure.Enabled := True;
55+
end;
56+
except
57+
on E:Exception do begin
58+
btnConfigure.Enabled := False;
59+
ErrorDialog(E.Message);
60+
end;
61+
end;
62+
Screen.Cursor := crDefault;
63+
end;
64+
65+
procedure TprintlistForm.btnConfigureClick(Sender: TObject);
66+
begin
67+
Screen.Cursor := crHourglass;
68+
printerSetup.Execute;
69+
comboPrinters.ItemIndex := Printer.PrinterIndex;
70+
Screen.Cursor := crDefault;
71+
end;
72+
73+
procedure TprintlistForm.btnPrintClick(Sender: TObject);
74+
var
75+
list: TVirtualStringTree;
76+
begin
77+
// print!
78+
Screen.Cursor := crHourglass;
79+
list := nil;
80+
// which ListView to print?
81+
case Mainform.PageControlMain.ActivePageIndex of
82+
0: case Mainform.PageControlHost.ActivePageIndex of
83+
0: list := Mainform.ListDatabases;
84+
1: list := Mainform.ListVariables;
85+
2: list := Mainform.ListStatus;
86+
3: list := Mainform.ListProcesses;
87+
else list := Mainform.ListCommandStats;
88+
end;
89+
1: list := Mainform.ListTables;
90+
2: begin
91+
if Assigned(Mainform.ActiveObjectEditor)
92+
and (Mainform.ActiveObjectEditor.DBObject.NodeType = lntTable)
93+
and Mainform.ActiveObjectEditor.Visible then
94+
list := (Mainform.ActiveObjectEditor as TfrmTableEditor).listColumns;
95+
end;
96+
else list := Mainform.ActiveGrid;
97+
end;
98+
if Assigned(list) then
99+
try
100+
list.Print(Printer, chkPrintHeader.Checked);
101+
except
102+
on E:EPrinter do
103+
ErrorDialog(E.Message);
104+
end;
105+
Screen.Cursor := crDefault;
106+
end;
107+
108+
109+
procedure TprintlistForm.comboPrintersChange(Sender: TObject);
110+
begin
111+
// chose printer
112+
Screen.Cursor := crHourglass;
113+
Printer.PrinterIndex := comboPrinters.ItemIndex;
114+
Screen.Cursor := crDefault;
115+
end;
116+
117+
end.

0 commit comments

Comments
 (0)