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

Duvida StringGrid


Igor Leonne

Pergunta

Minha duvida e bem simples de explicar, mas complicada de resolver.

Tenho um stringGrid, cada celula suporta um valor, mas eu preciso mudar isso.

Quando mando uma celula do meu grid receber um valor, ela substitui o valor anterior, mas o que eu preciso e que ele mantenha os dois valores juntos.

Exemplo:

Suponhamos que isto seja uma celula | |

aki tenho minha celula

| < X | dentro dela preciso de dois valores juntos que seriam o 'X' e o '<'.

Gostaria de uma ajuda de como fazer isso.

Obrigado

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Caro amigo Sou novo por aqui mais se emtendi bem sua pergunta é so fazer assim

StringGrid1.Cells[stringGrid1.Col,StringGrid1.Row] :=StringGrid1.Cells[stringGrid1.Col,StringGrid1.Row] +"texto". onde testo e o valor que você deve inserio...

qualquer duvida poste ai....

te mais...

Link para o comentário
Compartilhar em outros sites

  • 0

Exatamente meu chapa!

Gostaria de tirar mais uma duvida contigo, pois quando faço isso os valores fikm juntos assim:

|>x |

gostaria de que quando estivesse apenas um valor, ele fiksse centralizado:

| X |

e quando tivesse doiis fiksse assim

| > X |

com espaço, assim evita confusaosabe alguma maneira de fazer isso?

Agradeço a resposta anterior.

ahh

já cosegui, usei o espaço mesmo

hehehe

Poderia me dizer como centralizar o width e heigth da celula?

agradeço

Link para o comentário
Compartilhar em outros sites

  • 0

{Use esta função para centralizar strings, informe a ela a string que deseja centralizar e a quantidade de colunas contadas.}

Function alinhaC(s:string;n:integer):string;
// Centraliza uma string em um espaço determinado
var Str:String;
    L:byte;
begin
str :='';
  if n < Length(s) then begin
    Result := '';
    Exit;
  end;
  l:=(n-Length(S)) div 2;
  while l > 0 do begin
    str:=str+' ';
    dec(l);
  end;
  for l:=1 to length(S) do begin
    str := str+s[L];
  end;
 Result := str;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

Eder Moraes, em se tratando de desenho do texto, em modo gráfico, onde os caracteres tem larguras diferentes, este tipo de alinhamento não é apropriado. Ele funciona bem quando você está imprimindo em modo caracter (como, nas matriciais).

A função abaixo é genérica (você pode pô-la em uma unit de utilidades), centraliza o texto verticalmente e permite que você defina qual o alinhamento horizontal desejado:

// procedimento para cálculo e desenho das células
procedure DrawAligned(Grid :TObject; aCol, aRow :Integer;Rect :TRect; Alignment :TAlignment);
var
  XOffset,
  YOffset,
  RectWidth :SmallInt;
  Text :String;
begin
  with TStringGrid(Grid) do
  begin
    Text := Cells[aCol, aRow];
   // desenhando o retângulo (célula)
    Canvas.Pen.Color := clBtnShadow; // cor das linhas
    Canvas.Brush.Style := bsSolid;
    with Rect do
        Canvas.Rectangle(Left -1, Top -1, Right +1, Bottom +1);
   // preparação do alinhamento horizontal
    RectWidth := Rect.Right -Rect.Left;
    case Alignment of
      taLeftJustify:
         XOffset := Rect.Left +2;
      taCenter :
         XOffset := Rect.Left +(RectWidth -Canvas.TextWidth(Text)) div 2;
      taRightJustify:
         XOffset := Rect.Left +(RectWidth -Canvas.TextWidth(Text)) -3;
    end;
   // preparação do alinhamento vertical
    YOffset := Rect.Top +(((Rect.Bottom -Rect.Top) -Canvas.TextHeight('Lj')) div 2);
   // desenhando o texto na célula
    Canvas.Brush.Style := bsClear;
    Canvas.TextRect(Rect, XOffset, YOffset, Text);
  end;
end;
Para usá-la, no evento OnDrawCell do TStringGrid, você faz a chamada passando os parâmetros necessários. Digamos que temos 4 colunas e que elas possuem alinhamentos diferentes, então, programamos o evento para testar a couna e desenhá-la conforme desejado:
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect; State: TGridDrawState);
begin
  case ACol of
    0 : DrawAligned(Sender, ACol, ARow, Rect, taCenter); // centralizado
    1, 
    2 : DrawAligned(Sender, ACol, ARow, Rect, taLeftJustify); // alinhado a esquerda
    3 : DrawAligned(Sender, ACol, ARow, Rect, taRightJustify); // alinhado a direita
  end;
end;

Se não esqueci de nada, é isto.

Abraços

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