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

Negrido Em Algumas Palavras Do Grid


Vivendo&Aprendendo

Pergunta

E ae galera tuda na Santa Paz!!!

Como eu faço para que algumas palavras do meu DBGrid fiquem em negrito?

Exemplo:

------------------------------------------------------------------------------------------------

Histórico do Aluno

------------------------------------------------------------------------------------------------

Serviço: 1º CNH - Categoria: AB - Valor Total: 800,00 - Sendo: 1 + 3 - De: 170,00

------------------------------------------------------------------------------------------------

Gostaria que as palavras Serviço, Categoria, Valor Total, Sendo e De ficassem em negrito, mas somente elas.

Alexandre

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Bom, o grosso do serviço tá aqui, já que pode ser melhorado:

// Procedimento genérico - pode ser colocado em uma unit para reaproveitamento
procedure DrawBold(Canvas :TCanvas; Rect :TRect; Text :string; StrBold :array of string);
var
  Idx,
  IdxPos :Integer;
  SubStr :string;
begin
  Idx := 0;
  Inc(Rect.Left, 2);
  while Idx < High(StrBold) do
  begin
    IdxPos := Pos(StrBold[Idx], Text);
    case IdxPos of
      0 :;  // não encontrou, avança próxima StrBold
      1 : begin  // trata StrBold na 1ª posição
            Canvas.Font.Style := Canvas.Font.Style +[fsBold];
            SubStr := StrBold[Idx];
            Canvas.TextRect(Rect, Rect.Left, Rect.Top+2, SubStr);
            Inc(Rect.Left, Canvas.Textwidth(SubStr)+1);
            Delete(Text, 1, Length(SubStr));
          end;
      else  // todo o resto
        begin
          Canvas.Font.Style := Canvas.Font.Style -[fsBold];
          SubStr := Copy(Text, 1, IdxPos -1);
          Canvas.TextRect(Rect, Rect.Left, Rect.Top+2, SubStr);
          Inc(Rect.Left, Canvas.Textwidth(SubStr)+1);
          Delete(Text, 1, IdxPos -1);
          Continue;
        end;
    end;
    Inc(Idx);
  end;
  Canvas.Font.Style := Canvas.Font.Style -[fsBold];
  if Text <> '' then  // sobrando alguma coisa...
    Canvas.TextRect(Rect, Rect.Left, Rect.Top+2, Text);
end;

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if Column.FieldName = 'Descricao' then
  begin
    if gdSelected in State then
    begin
      DBGrid1.Canvas.Brush.Color := clHighLight;
      DBGrid1.Canvas.Font.Color := clHighLightText;
    end else
    begin
      DBGrid1.Canvas.Brush.Color := clWindow;
      DBGrid1.Canvas.Font.Color := clWindowText;
    end;
    DrawBold(DBGrid1.Canvas, Rect, Column.Field.AsString,
             ['Serviço', 'Categoria', 'Valor Total', 'Sendo', 'De']);
  end else
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;

pela lógica, no seu DBGrid, você deveria precisar modificar a propriedade DefaultDrawing para False, mas a certa altura observei que sem mudá-la também está funcionando - dê uma olhada.

No mesmo DBGrid, crie o evento OnDrawColumnCell e insira o código como acima trocando o FieldName (no meu caso era Descricao).

[]s

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...