DBHForm.pas
上传用户:fh681027
上传日期:2022-07-23
资源大小:1959k
文件大小:6k
源码类别:

Delphi控件源码

开发平台:

Delphi

  1. unit DBHForm;
  2. interface
  3. uses
  4.   SysUtils, Windows, Messages, Classes, Graphics,
  5.   Controls, Forms, DBCtrls, StdCtrls, DBTables,
  6.   ExtCtrls, Mask, Db, Dialogs, HTTPApp, DSProd, DBWeb, HTTPProd,
  7.   IdBaseComponent, IdComponent, IdTCPServer, IdHTTPServer;
  8. type
  9.   TFormProd = class(TForm)
  10.     BtnPrintAll: TButton;
  11.     DBEdit3: TDBEdit;
  12.     Label3: TLabel;
  13.     Label2: TLabel;
  14.     DBEdit2: TDBEdit;
  15.     DBEdit1: TDBEdit;
  16.     Label1: TLabel;
  17.     DBNavigator1: TDBNavigator;
  18.     Table1: TTable;
  19.     DataSource1: TDataSource;
  20.     SaveDialog1: TSaveDialog;
  21.     Memo1: TMemo;
  22.     BtnSave: TButton;
  23.     CheckStart: TCheckBox;
  24.     BtnLine: TButton;
  25.     PageProducer1: TPageProducer;
  26.     DataSetPageProducer1: TDataSetPageProducer;
  27.     Table1Name: TStringField;
  28.     Table1Capital: TStringField;
  29.     Table1Continent: TStringField;
  30.     Table1Area: TFloatField;
  31.     Table1Population: TFloatField;
  32.     BtnDemo: TButton;
  33.     DataSetTableProducer1: TDataSetTableProducer;
  34.     DataSetTableProducer2: TDataSetTableProducer;
  35.     cbCss: TCheckBox;
  36.     IdHTTPServer1: TIdHTTPServer;
  37.     procedure BtnPrintAllClick(Sender: TObject);
  38.     procedure BtnSaveClick(Sender: TObject);
  39.     procedure BtnLineClick(Sender: TObject);
  40.     procedure DataSetPageProducer1HTMLTag(Sender: TObject; Tag: TTag;
  41.       const TagString: String; TagParams: TStrings;
  42.       var ReplaceText: String);
  43.     procedure PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
  44.       const TagString: String; TagParams: TStrings;
  45.       var ReplaceText: String);
  46.     procedure BtnDemoClick(Sender: TObject);
  47.     procedure DataSetTableProducer1FormatCell(Sender: TObject; CellRow,
  48.       CellColumn: Integer; var BgColor: THTMLBgColor;
  49.       var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
  50.       CellData: String);
  51.     procedure DataSetTableProducer2FormatCell(Sender: TObject; CellRow,
  52.       CellColumn: Integer; var BgColor: THTMLBgColor;
  53.       var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
  54.       CellData: String);
  55.     procedure IdHTTPServer1CommandGet(AThread: TIdPeerThread;
  56.       RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
  57.   end;
  58. var
  59.   FormProd: TFormProd;
  60. implementation
  61. {$R *.DFM}
  62. uses
  63.   ShellAPI;
  64. procedure TFormProd.BtnPrintAllClick(Sender: TObject);
  65. begin
  66.   Table1.First;
  67.   Memo1.Clear;
  68.   if not cbCss.Checked then
  69.     Memo1.Text := DataSetTableProducer1.Content
  70.   else
  71.     Memo1.Text := DataSetTableProducer2.Content;
  72.   BtnSave.Enabled := True;
  73. end;
  74. procedure TFormProd.BtnSaveClick(Sender: TObject);
  75. begin
  76.   if SaveDialog1.Execute then
  77.   begin
  78.     Memo1.Lines.SaveToFile (SaveDialog1.FileName);
  79.     if CheckStart.Checked then
  80.       ShellExecute (Handle, 'open',
  81.         PChar (SaveDialog1.FileName),
  82.         '', '', sw_ShowNormal);
  83.   end;
  84. end;
  85. procedure TFormProd.BtnLineClick(Sender: TObject);
  86. begin
  87.   Memo1.Clear;
  88.   Memo1.Text := DataSetPageProducer1.Content;
  89.   BtnSave.Enabled := True;
  90. end;
  91. procedure TFormProd.DataSetPageProducer1HTMLTag(Sender: TObject; Tag: TTag;
  92.   const TagString: String; TagParams: TStrings; var ReplaceText: String);
  93. begin
  94.   if TagString = 'program' then
  95.     ReplaceText := ExtractFilename (Forms.Application.Exename)
  96.   else if TagString = 'date' then
  97.     ReplaceText := DateToStr (Date);
  98. end;
  99. procedure TFormProd.PageProducer1HTMLTag(Sender: TObject; Tag: TTag;
  100.   const TagString: String; TagParams: TStrings; var ReplaceText: String);
  101. var
  102.   nDays: Integer;
  103. begin
  104.   if TagString = 'date' then
  105.     ReplaceText := DateToStr (Now)
  106.   else if TagString = 'appname' then
  107.     ReplaceText := ExtractFilename (Forms.Application.Exename)
  108.   else if TagString = 'expiration' then
  109.   begin
  110.     nDays := StrToIntDef (TagParams.Values['days'], 0);
  111.     if nDays <> 0 then
  112.       ReplaceText := DateToStr (Now + nDays)
  113.     else
  114.       ReplaceText := '<I>{expiration tag error}</I>';
  115.   end;
  116. end;
  117. procedure TFormProd.BtnDemoClick(Sender: TObject);
  118. begin
  119.   Memo1.Clear;
  120.   Memo1.Text := PageProducer1.Content;
  121.   BtnSave.Enabled := True;
  122. end;
  123. procedure TFormProd.DataSetTableProducer1FormatCell(Sender: TObject;
  124.   CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;
  125.   var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
  126.   CellData: String);
  127. begin
  128.   if (CellRow > 0) and (((CellColumn = 3) and (Length (CellData) > 8)) or
  129.      ((CellColumn = 4) and (Length (CellData) > 9))) then
  130.   begin
  131.     BgColor := 'red';
  132.     CellData := '<b>' + CellData + '</b>';
  133.   end;
  134. end;
  135. procedure TFormProd.DataSetTableProducer2FormatCell(Sender: TObject;
  136.   CellRow, CellColumn: Integer; var BgColor: THTMLBgColor;
  137.   var Align: THTMLAlign; var VAlign: THTMLVAlign; var CustomAttrs,
  138.   CellData: String);
  139. begin
  140.   if (CellRow > 0) and (((CellColumn = 3) and (Length (CellData) > 8)) or
  141.       ((CellColumn = 4) and (Length (CellData) > 9))) then
  142.     CustomAttrs := 'class="highlight"';
  143. end;
  144. procedure TFormProd.IdHTTPServer1CommandGet(AThread: TIdPeerThread;
  145.   RequestInfo: TIdHTTPRequestInfo; ResponseInfo: TIdHTTPResponseInfo);
  146. var
  147.   I: Integer;
  148.   Req, Html: String;
  149.   CssTest: TStringList;
  150.   Comp: TComponent;
  151. begin
  152.   // version 1: see what's selected
  153.   // ResponseInfo.ContentText := Memo1.Text;
  154.   // version 2: use path
  155.   Req := RequestInfo.Document;
  156.   if Pos ('test.css', Req) > 0 then
  157.   begin
  158.     CssTest := TStringList.Create;
  159.     try
  160.       CssTest.LoadFromFile (ExtractFilePath (
  161.         Application.ExeName) + 'test.css');
  162.       ResponseInfo.ContentText := CssTest.Text;
  163.       ResponseInfo.ContentType := 'text/css';
  164.     finally
  165.       CssTest.Free;
  166.     end;
  167.     Exit;
  168.   end;
  169.   // standard request
  170.   if Req [1] = '/' then
  171.     Req := Copy (Req, 2, 1000); // skip '/'
  172.   Comp := FindComponent (Req);
  173.   if (Req <> '') and Assigned (Comp) and
  174.     (Comp is TCustomContentProducer) then
  175.   begin
  176.     Table1.First;
  177.     Html := TCustomContentProducer (Comp).Content;
  178.   end
  179.   else
  180.   begin
  181.     // define a menu
  182.     Html := '<h1>Html Proc Menu<h1><p><ul>';
  183.     for I := 0 to ComponentCount - 1 do
  184.       if Components [i] is TCustomContentProducer then
  185.         Html := Html + '<li><a href="/' + Components [i].Name +
  186.           '">' + Components [i].Name + '</a></li>';
  187.     Html := Html + '</ul></p>';
  188.   end;
  189.   ResponseInfo.ContentText := Html;
  190. end;
  191. end.