Главная страницаОбратная связьКарта сайта

Экспортировать DBGrid в HTML

Звонит юзеp oпеpатоpу АТС:
- Девушка! Мне тут какой-то совеpшенно дикий счет пpишел за услуги связи...
- Ваш номеp?
- 555-55-55
- Так... Все веpно. Это счет за секс-услуги по телефону.
- Да ты че! Я такой гадостью сpоду не занимался!
- Как? А неделю назад вы звонили Васе Пупкину по телефону 444-44-44 и пытались настpоить полуось?


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;


Обсудить статью на форуме


Если Вас заинтересовала или понравилась информация по разработке на Delph - "Экспортировать DBGrid в HTML", Вы можете поставить закладку в социальной сети или в своём блоге на данную страницу:

Так же Вы можете задать вопрос по работе этого модуля или примера через форму обратной связи, в сообщение обязательно указывайте название или ссылку на статью!
   


Copyright © 2008 - 2023 Дискета.info