Ýêñïîðòèðîâàòü DBGrid â HTML

Previous  Top  Next

    
 

 

 

Code:

type

TGridToHTMLOption = (ghWithHeaders);

TGridToHTMLOptions = set of TGridToHTMLOption;

 

function DBGridToHTML(Grid : TDBGrid;

ExportOptions: TGridToHTMLOptions): String;

const

HTMLStart =

  '< !DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.0 Transitional//EN" > '#13

+

  '< HTML> '#13 +

  '< HEAD> < META http-equiv=Content-Type content=" text/html;

charset=windows-1251" > '#13 +

  '< STYLE> '#13 +

  'BODY {'#13 +

  ' BACKGROUND: white;'#13 +

  ' COLOR: black;'#13 +

  ' FONT-FAMILY: arial;'#13 +

  ' FONT-SIZE: 8pt;'#13 +

  ' VERTICAL-ALIGN: top'#13 +

  '}'#13 +

  'TABLE {'#13 +

  ' BACKGROUND: white;'#13 +

  ' BORDER-BOTTOM: silver 0px solid;'#13 +

  ' BORDER-LEFT: silver 1px solid;'#13 +

  ' BORDER-RIGHT: silver 0px solid;'#13 +

  ' BORDER-TOP: silver 1px solid;'#13 +

  ' FONT-FAMILY: arial;'#13 +

  ' FONT-SIZE: 8pt;'#13 +

  ' FONT-WEIGHT: normal;'#13 +

  '}'#13 +

  'TD {'#13 +

  ' BORDER-BOTTOM: silver 1px solid;'#13 +

  ' BORDER-LEFT: silver 0px solid;'#13 +

  ' BORDER-RIGHT: silver 1px solid;'#13 +

  ' BORDER-TOP: silver 0px solid;'#13 +

  ' VERTICAL-ALIGN: top;'#13 +

  ' TEXT-ALIGN: left;'#13 +

  '}'#13 +

  'TD.grid {'#13 +

  ' TEXT-ALIGN: left;'#13 +

  '}'#13 +

  'TD.gridr {'#13 +

  ' TEXT-ALIGN: right;'#13 +

  '}'#13 +

  'TD.gridc {'#13 +

  ' TEXT-ALIGN: center;'#13 +

  '}'#13 +

  'TH {'#13 +

  ' BACKGROUND: silver;'#13 +

  ' BORDER-BOTTOM: gray 1px solid;'#13 +

  ' BORDER-LEFT: gray 0px solid;'#13 +

  ' BORDER-RIGHT: gray 1px solid;'#13 +

  ' BORDER-TOP: gray 0px solid;'#13 +

  ' FONT-WEIGHT: bold;'#13 +

  '}'#13 +

  'TH.grid {'#13 +

  ' TEXT-ALIGN: left;'#13 +

  '}'#13 +

  'TH.gridr {'#13 +

  ' TEXT-ALIGN: right;'#13 +

  '}'#13 +

  'TH.gridc {'#13 +

  ' TEXT-ALIGN: center;'#13 +

  '}'#13 +

  '< /STYLE> '#13 +

  '< TITLE> Ïå÷àòü òàáëèöû< /TITLE> '#13 +

  '< /HEAD> '#13 +

  '< BODY> '#13;

HTMLEnd = '< /BODY> < /HTML> ';

TableStart = '< TABLE WIDTH=" 100%"  CELLSPACING=0 CELLPADDING=1> '#13;

TableEnd = '< /TABLE> '#13;

HeaderRowStart = '< TR> '#13;

HeaderRowEnd = '< /TR> '#13;

BodyRowStart = '< TR> '#13;

BodyRowEnd = '< /TR> '#13;

 

const

StyleNames: array [TAlignment] of String = ('grid', 'gridr',

'gridc');

 

function TD(Column: TColumn; IsTitle: Boolean; Widht: Integer):

String;

var

   S: String;

   Align: TAlignment;

   Tag: String;

begin

   if IsTitle then begin

     Tag := 'TH';

     Align := Column.Title.Alignment;

     S := StyleNames[Align];

   end else begin

     Tag := 'TD';

     Align := Column.Alignment;

     if Align = taLeftJustify then begin

       if (Column.Field is TBCDField) or

          (Column.Field is TCurrencyField) then

         Align := taRightJustify;

       if (Column.Field is TBooleanField) then

         Align := taCenter;

     end;

     S := StyleNames[Align];

     if (Column.Field is TBCDField) or (Column.Field is

TIntegerField) then

       S := S + ' NOWRAP'

   end;

   if Widht >  0 then

     S := S + Format(' WIDTH=" %d%%" ', [Widht]);

   Result := '< ' + Tag + ' class=' + S + '> ';

   if IsTitle then begin

     S := Column.Title.Caption

   end else begin

     if Column.Field is TBooleanField then

     with TBooleanField(Column.Field) do begin

       if Length(DisplayValues) = 0 then begin

         if AsBoolean then

           S := 'äà'

         else

           S := 'íåò';

       end else

         S := Column.Field.DisplayText;

     end else

       S := Column.Field.DisplayText;

   end;

   if Length(Trim(S)) = 0 then

     S := ' ';

   Result := Result + S + '< /' + Tag + '> '#13;

end;

 

var

BM : String;

I : Integer;

Widhts: array of Integer;

TotalWidht: Integer;

begin

Result := '';

with Grid  do begin

   if Assigned(DataSource) and

      Assigned(DataSource.DataSet) and

      DataSource.DataSet.Active then

   with DataSource.DataSet do begin

     DisableControls;

     BM := BookMark;

     SetLength(Widhts, Columns.Count);

     TotalWidht := 0;

     for I := 0 to Pred(Columns.Count) do begin

       if Assigned(Columns[I].Field) then begin

         Widhts[I] := Columns[I].Width;

         Inc(TotalWidht, Widhts[I]);

       end;

     end;

     for I := 0 to High(Widhts) do begin

       Widhts[I] := Widhts[I] * 100 div TotalWidht;

     end;

     Result := HTMLStart;

     Result := Result + TableStart;

     if (ghWithHeaders in ExportOptions) then begin

       Result := Result + HeaderRowStart;

       for I := 0 to Pred(Columns.Count) do begin

         if Assigned(Columns.Items[I].Field) then begin

           Result := Result + TD(Columns.Items[I], TRUE, Widhts[I]);

         end;

       end;

       Result := Result + HeaderRowEnd;

     end;

     First;

     while not Eof do begin

       Result := Result + BodyRowStart;

       for I := 0 to Pred( Columns.Count ) do begin

         if Assigned(Columns.Items[I].Field) then begin

           Result := Result + TD(Columns.Items[I], FALSE,

-1{Integer(Widhts[Index]});

         end;

       end;

       Result := Result + BodyRowEnd;

       Next;

     end;

     Result := Result + TableEnd + HTMLEnd;

     BookMark := BM;

     EnableControls;

   end;

end;

end;

 

 

©Drkb::03067