Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) DbGrid em Html - Ajuda com Formatação!


gsguma

Pergunta

Galera gostaria de saber o que mudar no código abaixo para obter o tamanho (SIZE) da fonte usada na DBGrid (assim como já acontece com o Nome da Fonte e Estilo da Fonte neste mesmo código):

Uses ShellApi;

function ColorToHtml(mColor: TColor): string;
begin
 mColor := ColorToRGB(mColor); 
 Result := Format('#%.2x%.2x%.2x', [GetRValue(mColor), GetGValue(mColor), GetBValue(mColor)]);
end; { ColorToHtml }


function StrToHtml(mStr: string; mFont: TFont = nil): string;
var
vLeft, vRight: string;
begin
Result := mStr;
Result := StringReplace(Result, '&', '&', [rfReplaceAll]);
Result := StringReplace(Result, '<', '<', [rfReplaceAll]);
Result := StringReplace(Result, '>', '>', [rfReplaceAll]);

if not Assigned(mFont) then Exit;
vLeft := Format('<FONT FACE="%s" COLOR="%s">', [mFont.Name, ColorToHtml(mFont.Color)]);
vRight := '</FONT>';

if fsBold in mFont.Style then begin
   vLeft := vLeft + '<B>';
   vRight := '</B>' + vRight;
end;

if fsItalic in mFont.Style then begin
   vLeft := vLeft + '<I>';
   vRight := '</I>' + vRight;
end;

if fsUnderline in mFont.Style then begin
   vLeft := vLeft + '<U>';
   vRight := '</U>' + vRight;
end;

if fsStrikeOut in mFont.Style then begin
   vLeft := vLeft + '<S>';
   vRight := '</S>' + vRight;
end;

Result := vLeft + Result + vRight;
end; { StrToHtml }


function DBGridToHtmlTable(mDBGrid: TDBGrid; mStrings: TStrings; mCaption: TCaption = ''): Boolean;
const cAlignText: array[TAlignment] of string = ('LEFT', 'RIGHT', 'CENTER');

var
vColFormat: string;
vColText: string;
vAllWidth: Integer;
vWidths: array of Integer;
vBookmark: string;
I, J: Integer;

begin
Result := False;

if not Assigned(mStrings) then Exit;

if not Assigned(mDBGrid) then Exit;

if not Assigned(mDBGrid.DataSource) then Exit;

if not Assigned(mDBGrid.DataSource.DataSet) then Exit;

if not mDBGrid.DataSource.DataSet.Active then Exit;

vBookmark := mDBGrid.DataSource.DataSet.Bookmark;
mDBGrid.DataSource.DataSet.DisableControls;

try
   J := 0;
   vAllWidth := 0;

   for I := 0 to mDBGrid.Columns.Count - 1 do

     if mDBGrid.Columns[I].Visible then begin
       Inc(J);
       SetLength(vWidths, J);
       vWidths[J - 1] := mDBGrid.Columns[I].Width;
       Inc(vAllWidth, mDBGrid.Columns[I].Width);
     end;

   if J <= 0 then Exit;
   mStrings.Clear;
   mStrings.Add(Format('<TABLE BGCOLOR="%s" BORDER=1 WIDTH="100%%">',
     [ColorToHtml(mDBGrid.Color)]));

   if mCaption <> '' then
     mStrings.Add(Format('<CAPTION>%s</CAPTION>', [StrToHtml(mCaption)]));
   vColFormat := '';
   vColText := '';
   vColFormat := vColFormat + '<TR>'#13#10;
   vColText := vColText + '<TR>'#13#10;
   J := 0;

   for I := 0 to mDBGrid.Columns.Count - 1 do

     if mDBGrid.Columns[I].Visible then begin
       vColFormat := vColFormat + Format(
'  <TD BGCOLOR="%s" ALIGN=%s WIDTH="%d%%">DisplayText%d</TD>'#13#10,
         [ColorToHtml(mDBGrid.Columns[I].Color),
         cAlignText[mDBGrid.Columns[I].Alignment],
         Round(vWidths[J] / vAllWidth * 100), J]);

       vColText := vColText + Format(
'  <TD BGCOLOR="%s" ALIGN=%s WIDTH="%d%%">%s</TD>'#13#10,
         [ColorToHtml(mDBGrid.Columns[I].Title.Color),
         cAlignText[mDBGrid.Columns[I].Alignment],
         Round(vWidths[J] / vAllWidth * 100),
         StrToHtml(mDBGrid.Columns[I].Title.Caption,
            mDBGrid.Columns[I].Title.Font)]);

       Inc(J);
     end;

   vColFormat := vColFormat + '</TR>'#13#10;
   vColText := vColText + '</TR>'#13#10;
   mStrings.Text := mStrings.Text + vColText;
   mDBGrid.DataSource.DataSet.First;

   while not mDBGrid.DataSource.DataSet.Eof do begin
     J := 0;
     vColText := vColFormat;

     for I := 0 to mDBGrid.Columns.Count - 1 do

       if mDBGrid.Columns[I].Visible then begin
         vColText := StringReplace(vColText, Format('>DisplayText%d<', [J]),
            Format('>%s<', [StrToHtml(mDBGrid.Columns[I].Field.DisplayText,
              mDBGrid.Columns[I].Font)]),
           [rfReplaceAll]);

         Inc(J);
       end;

     mStrings.Text := mStrings.Text + vColText;
     mDBGrid.DataSource.DataSet.Next;
   end;

   mStrings.Add('</TABLE>');

finally

   mDBGrid.DataSource.DataSet.Bookmark := vBookmark;
   mDBGrid.DataSource.DataSet.EnableControls;
   vWidths := nil;
end;

Result := True;
end; { DBGridToHtmlTable }


//BOTÃO VISUALIZAR EM HTML
procedure TForm1.Button1Click(Sender: TObject);
begin
DBGridToHtmlTable(DBGrid1, Memo1.Lines, Caption);
Memo1.Lines.SaveToFile('c:\temp.htm');
ShellExecute(Handle, nil, 'c:\temp.htm', nil, nil, SW_SHOW);
end;

Editado por gsguma
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0
Galera gostaria de saber o que mudar no código abaixo para obter o tamanho (SIZE) da fonte usada na DBGrid (assim como já acontece com o Nome da Fonte e Estilo da Fonte neste mesmo código):

De maneira bem simples seria isto:

if not Assigned(mFont) then Exit;
vLeft := Format('<FONT FACE="%s" SIZE='+inttostr(Form1.DBGrid1.Font.Size div 4)+' COLOR="%s">', [mFont.Name, ColorToHtml(mFont.Color)]);
vRight := '</FONT>';

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Gostaria de saber se é possível colocar mais esse trecho de código HTML no mesmo código do tópico acima, já que o mesmo contém ' (aspas simples) e como sou iniciante em delphi não sei ainda como tratar isso!

onMouseOver="this.style.backgroundColor='#CCE7FF';" 
onMouseOut="this.style.backgroundColor='';"

Vlw

Editado por gsguma
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,2k
×
×
  • Criar Novo...