unit DBHForm;
interface
uses
SysUtils, Windows, Messages, Classes, Graphics,
Controls, Forms, DBCtrls, StdCtrls, DBTables,
ExtCtrls, Mask, Db, Dialogs, HTTPApp, DSProd, DBWeb, HTTPProd,
IdBaseComponent, IdComponent, IdTCPServer, IdHTTPServer;
type
TFormProd = class(TForm)
BtnPrintAll: TButton;
DBEdit3: TDBEdit;
Label3: TLabel;
Label2: TLabel;
DBEdit2: TDBEdit;
DBEdit1: TDBEdit;
Label1: TLabel;
DBNavigator1: TDBNavigator;
Table1: TTable;
DataSource1: TDataSource;
SaveDialog1: TSaveDialog;
Memo1: TMemo;
BtnSave: TButton;
CheckStart: TCheckBox;
BtnLine: TButton;
PageProducer1: TPageProducer;
DataSetPageProducer1: TDataSetPageProducer;
Table1Name: TStringField;
Table1Capital: TStringField;
Table1Continent: TStringField;
Table1Area: TFloatField;
Table1Population: TFloatField;
BtnDemo: TButton;
DataSetTableProducer1: TDataSetTableProducer;
DataSetTableProducer2: TDataSetTableProducer;
cbCss: TCheckBox;
IdHTTPServer1: TIdHTTPServer;
procedure BtnPrintAllClick(Sender: TObject);
procedure BtnSaveClick(Sender: TObject);
procedure BtnLineClick(Sender: TObject);
procedure DataSetPageProducer1HTMLTag(Sender: TObject; Tag: TTag;
const TagString: String; TagParams: TStrings;
var ReplaceText: String);
procedure PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
const TagString: String; TagParams: TStrings;
var ReplaceText: String);
procedure BtnDemoClick(Sender: TObject);
procedure DataSetTableProducer1FormatCell(Sender: TObject; CellRow,
CellColumn: Integer; var BgColor: THTMLBgColor;
var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
CellData: String);
procedure DataSetTableProducer2FormatCell(Sender: TObject; CellRow,
CellColumn: Integer; var BgColor: THTMLBgColor;
var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
CellData: String);
procedure IdHTTPServer1CommandGet(AThread: TIdPeerThread;
RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
end;
var
FormProd: TFormProd;
implementation
uses
ShellAPI;
procedure TFormProd.BtnPrintAllClick(Sender: TObject);
begin
Table1.First;
Memo1.Clear;
if not cbCss.Checked then
Memo1.Text := DataSetTableProducer1.Content
else
Memo1.Text := DataSetTableProducer2.Content;
BtnSave.Enabled := True;
end;
procedure TFormProd.BtnSaveClick(Sender: TObject);
begin
if SaveDialog1.Execute then
begin
Memo1.Lines.SaveToFile (SaveDialog1.FileName);
if CheckStart.Checked then
ShellExecute (Handle, 'open',
PChar (SaveDialog1.FileName),
'', '', sw_ShowNormal);
end;
end;
procedure TFormProd.BtnLineClick(Sender: TObject);
begin
Memo1.Clear;
Memo1.Text := DataSetPageProducer1.Content;
BtnSave.Enabled := True;
end;
procedure TFormProd.DataSetPageProducer1HTMLTag(Sender: TObject; Tag: TTag;
const TagString: String; TagParams: TStrings; var ReplaceText: String);
begin
if TagString = 'program' then
ReplaceText := ExtractFilename (Forms.Application.Exename)
else if TagString = 'date' then
ReplaceText := DateToStr (Date);
end;
procedure TFormProd.PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
const TagString: String; TagParams: TStrings; var ReplaceText: String);
var
nDays: Integer;
begin
if TagString = 'date' then
ReplaceText := DateToStr (Now)
else if TagString = 'appname' then
ReplaceText := ExtractFilename (Forms.Application.Exename)
else if TagString = 'expiration' then
begin
nDays := StrToIntDef (TagParams.Values['days'], 0);
if nDays <> 0 then
ReplaceText := DateToStr (Now + nDays)
else
ReplaceText := '<I>{expiration tag error}</I>';
end;
end;
procedure TFormProd.BtnDemoClick(Sender: TObject);
begin
Memo1.Clear;
Memo1.Text := PageProducer1.Content;
BtnSave.Enabled := True;
end;
procedure TFormProd.DataSetTableProducer1FormatCell(Sender: TObject;
CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;
var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
CellData: String);
begin
if (CellRow > 0) and (((CellColumn = 3) and (Length (CellData) > 8)) or
((CellColumn = 4) and (Length (CellData) > 9))) then
begin
BgColor := 'red';
CellData := '<b>' + CellData + '</b>';
end;
end;
procedure TFormProd.DataSetTableProducer2FormatCell(Sender: TObject;
CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;
var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
CellData: String);
begin
if (CellRow > 0) and (((CellColumn = 3) and (Length (CellData) > 8)) or
((CellColumn = 4) and (Length (CellData) > 9))) then
CustomAttrs := 'class="highlight"';
end;
procedure TFormProd.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
var
I: Integer;
Req, Html: String;
CssTest: TStringList;
Comp: TComponent;
begin
Req := RequestInfo.Document;
if Pos ('test.css', Req) > 0 then
begin
CssTest := TStringList.Create;
try
CssTest.LoadFromFile (ExtractFilePath (
Application.ExeName) + 'test.css');
ResponseInfo.ContentText := CssTest.Text;
ResponseInfo.ContentType := 'text/css';
finally
CssTest.Free;
end;
Exit;
end;
if Req [1] = '/' then
Req := Copy (Req, 2, 1000);
Comp := FindComponent (Req);
if (Req <> '') and Assigned (Comp) and
(Comp is TCustomContentProducer) then
begin
Table1.First;
Html := TCustomContentProducer (Comp).Content;
end
else
begin
Html := '<h1>Html Proc Menu<h1><p><ul>';
for I := 0 to ComponentCount - 1 do
if Components [i] is TCustomContentProducer then
Html := Html + '<li><a href="/' + Components [i].Name +
'">' + Components [i].Name + '</a></li>';
Html := Html + '</ul></p>';
end;
ResponseInfo.ContentText := Html;
end;
end.
|
object FormProd: TFormProd
Left = 209
Top = 111
Width = 411
Height = 407
Caption = 'HtmlProc'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clBlack
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = True
DesignSize = (
403
380)
PixelsPerInch = 96
TextHeight = 13
object Label3: TLabel
Left = 40
Top = 124
Width = 48
Height = 13
Caption = 'Continent:'
end
object Label2: TLabel
Left = 40
Top = 91
Width = 35
Height = 13
Caption = 'Capital:'
end
object Label1: TLabel
Left = 40
Top = 56
Width = 39
Height = 13
Caption = 'Country:'
end
object BtnPrintAll: TButton
Left = 295
Top = 108
Width = 89
Height = 25
Anchors = [akTop, akRight]
Caption = '&Print Table'
TabOrder = 0
OnClick = BtnPrintAllClick
end
object DBEdit3: TDBEdit
Left = 104
Top = 120
Width = 169
Height = 21
DataField = 'Continent'
DataSource = DataSource1
TabOrder = 1
end
object DBEdit2: TDBEdit
Left = 104
Top = 86
Width = 169
Height = 21
DataField = 'Capital'
DataSource = DataSource1
TabOrder = 2
end
object DBEdit1: TDBEdit
Left = 104
Top = 52
Width = 169
Height = 21
DataField = 'Name'
DataSource = DataSource1
TabOrder = 3
end
object DBNavigator1: TDBNavigator
Left = 0
Top = 0
Width = 403
Height = 25
DataSource = DataSource1
VisibleButtons = [nbFirst, nbPrior, nbNext, nbLast, nbInsert, nbEdit, nbPost, nbCancel]
Align = alTop
Flat = True
TabOrder = 4
end
object Memo1: TMemo
Left = 16
Top = 184
Width = 369
Height = 180
Anchors = [akLeft, akTop, akRight, akBottom]
ScrollBars = ssVertical
TabOrder = 5
end
object BtnSave: TButton
Left = 295
Top = 146
Width = 89
Height = 25
Anchors = [akTop, akRight]
Caption = '&Save HTML'
Enabled = False
TabOrder = 6
OnClick = BtnSaveClick
end
object CheckStart: TCheckBox
Left = 192
Top = 153
Width = 89
Height = 17
Caption = 'Start &Browser'
Checked = True
State = cbChecked
TabOrder = 7
end
object BtnLine: TButton
Left = 295
Top = 70
Width = 89
Height = 25
Anchors = [akTop, akRight]
Caption = 'Print &Line'
TabOrder = 8
OnClick = BtnLineClick
end
object BtnDemo: TButton
Left = 295
Top = 32
Width = 89
Height = 25
Anchors = [akTop, akRight]
Caption = 'Demo &Page'
TabOrder = 9
OnClick = BtnDemoClick
end
object cbCss: TCheckBox
Left = 105
Top = 153
Width = 57
Height = 17
Caption = 'CSS'
TabOrder = 10
end
object Table1: TTable
Active = True
DatabaseName = 'DBDEMOS'
TableName = 'COUNTRY.DB'
Left = 16
Top = 48
object Table1Name: TStringField
FieldName = 'Name'
Size = 24
end
object Table1Capital: TStringField
FieldName = 'Capital'
Size = 24
end
object Table1Continent: TStringField
CustomConstraint = 'X = ''South America'' OR X = ''North America'''
ConstraintErrorMessage = 'Country is not in the American Continent'
DefaultExpression = '''South America'''
FieldName = 'Continent'
Size = 24
end
object Table1Area: TFloatField
FieldName = 'Area'
DisplayFormat = '###,###,###'
end
object Table1Population: TFloatField
FieldName = 'Population'
DisplayFormat = '###,###,###'
end
end
object DataSource1: TDataSource
DataSet = Table1
Left = 16
Top = 96
end
object SaveDialog1: TSaveDialog
DefaultExt = 'HTM'
Filter = 'HTML file (*.htm)|*.htm|Any file (*.*)|*.*'
Options = [ofOverwritePrompt, ofPathMustExist, ofCreatePrompt]
Left = 16
end
object PageProducer1: TPageProducer
HTMLDoc.Strings = (
'<html>'
'<head>'
'<title>Producer Demo</title>'
'</head>'
'<body>'
'<h1>Producer Demo</h1>'
'<p>This is a demo of the page produced by the'
'<b><#appname></b> application on <b><#date></b>.</p>'
'<hr>'
'<p>The prices in this catalog are valid until'
'<b><#expiration days=21></b>.</p>'
'</body>'
'</html>')
OnHTMLTag = PageProducer1HTMLTag
Left = 64
Top = 192
end
object DataSetPageProducer1: TDataSetPageProducer
HTMLDoc.Strings = (
'<HTML><HEAD>'
'<TITLE>Data for <#name></TITLE>'
'</HEAD><BODY>'
'<H1><CENTER>Data for <#name></CENTER></H1>'
'<p>Capital: <#capital></p>'
'<p>Continent: <#continent></p>'
'<p>Area: <#area></p>'
'<p>Population: <#population></p>'
'<HR>'
'<p>Last updated on <#date><br>'
'HTML file produced by the program <#program>.</p>'
'</BODY></HTML>')
DataSet = Table1
OnHTMLTag = DataSetPageProducer1HTMLTag
Left = 64
Top = 240
end
object DataSetTableProducer1: TDataSetTableProducer
Caption = '<h2>American Countries</h2>'
Columns = <
item
BgColor = 'Silver'
FieldName = 'Name'
Title.Align = haLeft
Title.BgColor = 'Silver'
Title.Caption = 'Country'
end
item
FieldName = 'Capital'
end
item
FieldName = 'Continent'
end
item
Align = haRight
FieldName = 'Area'
end
item
Align = haRight
FieldName = 'Population'
end>
Footer.Strings = (
'<hr><i>Produced by HtmlProd</i>'
'</body></html>')
Header.Strings = (
'<html><head>'
'<title>DataSetTableProducer Demo</title>'
''
'</head><body>'
'<h1><center>DataSetTableProducer Demo</center></h1>')
MaxRows = -1
DataSet = Table1
TableAttributes.Border = 1
TableAttributes.CellSpacing = 1
TableAttributes.CellPadding = 5
OnFormatCell = DataSetTableProducer1FormatCell
Left = 208
Top = 192
end
object DataSetTableProducer2: TDataSetTableProducer
Caption = '<h2>American Countries</h2>'
Columns = <
item
BgColor = 'Silver'
FieldName = 'Name'
Title.Align = haLeft
Title.BgColor = 'Silver'
Title.Caption = 'Country'
end
item
FieldName = 'Capital'
end
item
FieldName = 'Continent'
end
item
Align = haRight
FieldName = 'Area'
end
item
Align = haRight
FieldName = 'Population'
end>
Footer.Strings = (
'<hr><i>Produced by HtmlProd</i>'
'</body></html>')
Header.Strings = (
'<html><head>'
'<link rel="stylesheet" type="text/css" href="test.css">'
'<title>DataSetTableProducer Demo</title>'
''
'</head><body>'
'<h1><center>DataSetTableProducer Demo</center></h1>')
MaxRows = -1
DataSet = Table1
TableAttributes.Border = 1
TableAttributes.CellPadding = 5
OnFormatCell = DataSetTableProducer2FormatCell
Left = 208
Top = 240
end
object IdHTTPServer1: TIdHTTPServer
Active = True
Bindings = <>
DefaultPort = 8080
OnCommandGet = IdHTTPServer1CommandGet
ParseParams = False
Left = 64
Top = 296
end
end
|