Menu

[r202]: / branches / proxy-server / Src / FrHTMLDlg.pas  Maximize  Restore  History

Download this file

192 lines (169 with data), 6.6 kB

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
{
* FrHTMLDlg.pas
*
* Frame containing a web browser control that displays HTML content that takes
* on the appearance of a dialog box.
*
* v0.1 of 30 Jan 2005 - Original version (handled HTML templates).
* v0.2 of 23 Feb 2005 - Now derived from TBrowserFrame that provides web
* browser controller object.
* - Moved code that handled HTML templates to a new
* descendant class.
* v0.3 of 05 Mar 2005 - Added new default CSS style for <table> tag.
* v0.4 of 16 Apr 2006 - Fixed error where user could drop files on dialog box
* and display the file contents, replacing dialog
* contents. Added drag drop handler to browser control
* that inhibits all drag drop.
* v1.0 of 25 May 2006 - Improved and corrected comments.
* v1.1 of 07 Nov 2006 - Changed to use UCSSUtils methods to generate CSS
* attributes.
* - Changed to use new TCSSSelector.Extras property to add
* custom CSS.
* v1.2 of 14 Nov 2006 - Added a:link.help-link, a:visited.help-link and
* a:active.help-link CSS styles to colour links to help
* files appropriately.
* v1.3 of 18 Nov 2006 - Added new h1 CSS style.
* - Changed p CSS style to specify no padding.
* v1.4 of 25 Nov 2006 - Changed to set browser's default CSS by overriding
* method of parent class rather than update browser
* control directly.
* - Removed a-link classes from generated CSS since this
* is now provided by parent class.
* v1.5 of 11 Feb 2007 - Added DocHeight method to retrieve height of current
* HTML document.
* v1.6 of 17 Feb 2007 - Changed DocHeight method to call same named method in
* TWBUIMgr rather than calculating document height
* directly here.
* v1.7 of 05 Nov 2007 - Changed to use revised CSS builder classes.
*
*
* ***** BEGIN LICENSE BLOCK *****
*
* Version: MPL 1.1
*
* The contents of this file are subject to the Mozilla Public License Version
* 1.1 (the "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for
* the specific language governing rights and limitations under the License.
*
* The Original Code is FrHTMLDlg.pas
*
* The Initial Developer of the Original Code is Peter Johnson
* (http://www.delphidabbler.com/).
*
* Portions created by the Initial Developer are Copyright (C) 2005-2007 Peter
* Johnson. All Rights Reserved.
*
* Contributor(s): None
*
* ***** END LICENSE BLOCK *****
}
unit FrHTMLDlg;
interface
uses
// Delphi
OleCtrls, SHDocVw, Classes, Controls, ExtCtrls, Forms,
// Project
FrBrowserBase, UCSSBuilder;
type
{
THTMLDlgFrame:
Frame containing a web browser control that displays HTML content and takes
on the appearance of a dialog box.
}
THTMLDlgFrame = class(TBrowserBaseFrame)
private
fOwner: TForm;
{Form that owns the frame. Used to set font and colours to display in
frame's HTML }
protected
procedure BuildCSS(const CSSBuilder: TCSSBuilder); override;
{Generates CSS classes specific to HTML dialog boxes. This CSS is added to
that provided by parent class.
@param CSSBuilder [in] Object used to build the CSS code.
}
public
constructor Create(AOwner: TComponent); override;
{Class constructor. Sets up frame and initialises web browser.
@param AOwner [in] Component that owns the frame (must be a form).
}
function DocHeight: Integer;
{Calculates height of document displayed in browser.
@return Document height in pixels.
}
end;
implementation
uses
// Delphi
SysUtils, Graphics,
// Project
UCSSUtils, UWBNulDropTarget, UWBUIMgr;
{$R *.dfm}
{ THTMLDlgFrame }
procedure THTMLDlgFrame.BuildCSS(const CSSBuilder: TCSSBuilder);
{Generates CSS classes specific to HTML dialog boxes. This CSS is added to
that provided by parent class.
@param CSSBuilder [in] Object used to build the CSS code.
}
var
CSSFont: TFont; // font used to set CSS properties
begin
inherited;
// Set body style to use dialog box colour and font with no margin
CSSFont := TFont.Create;
try
with CSSBuilder.AddSelector('body') do
begin
AddProperty(CSSBackgroundColorProp(fOwner.Color));
AddProperty(CSSFontProps(fOwner.Font));
AddProperty(CSSMarginProp(0));
end;
// Sets heading margins, padding and font size
with CSSBuilder.AddSelector('h1') do
begin
CSSFont.Assign(Self.Font);
CSSFont.Size := CSSFont.Size + 2;
CSSFont.Style := [fsBold];
AddProperty(CSSFontProps(CSSFont));
AddProperty(CSSMarginProp(0));
AddProperty(CSSPaddingProp(0));
end;
// Sets paragraph margins and padding
with CSSBuilder.AddSelector('p') do
begin
AddProperty(CSSMarginProp(cssTop, 6));
AddProperty(CSSMarginProp(cssBottom, 0));
AddProperty(CSSPaddingProp(0));
end;
// Sets table font info
with CSSBuilder.AddSelector('table') do
AddProperty(CSSFontProps(fOwner.Font));
finally
FreeAndNil(CSSFont);
end;
end;
constructor THTMLDlgFrame.Create(AOwner: TComponent);
{Class constructor. Sets up frame and initialises web browser.
@param AOwner [in] Component that owns the frame (must be a form).
}
begin
inherited;
// Record parent form instance
fOwner := (AOwner as TForm);
// Set up browser control to take on dialog box's appearance
WBController.UIMgr.ScrollbarStyle := sbsHide; // no scroll bars
WBController.UIMgr.AllowTextSelection := False; // can't select text
WBController.UIMgr.DropTarget := // inhibit drag drop in dialog
TWBNulDropTarget.Create;
end;
function THTMLDlgFrame.DocHeight: Integer;
{Calculates height of document displayed in browser.
@return Document height in pixels.
}
begin
Result := WBController.UIMgr.DocHeight;
end;
end.
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.