Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Agregar texto en primera fila de TStringrid (https://www.clubdelphi.com/foros/showthread.php?t=94405)

compuin 26-01-2020 19:02:39

Agregar texto en primera fila de TStringrid
 
Hola amigos,

Como puedo agregar texto a cada celda de la primera linea de un TStringgrid ?

Uso Delphi 7

Gracias de antemano

compuin 26-01-2020 19:46:35

Cita:

Empezado por compuin (Mensaje 535364)
Hola amigos,

Como puedo agregar texto a cada celda de la primera linea de un TStringgrid ?

Uso Delphi 7

Gracias de antemano

Ya logre hacerlo,

Código Delphi [-]
StringGrid1.Cells[1,0] := 'Longitud';

ahora me gustaria centrarlos dentro del campo o ajustarlo a la derecha

Alguna sugerencia ?

escafandra 26-01-2020 21:27:42

Para eso tienes que pintar tú mismo las celdas. Te pongo un ejemplo:


Código Delphi [-]
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with Sender as TStringGrid do
  begin
    // Dibujar texto centrado horizontal y verticalmente o a la derecha
    InflateRect(Rect, -1, -1);
    Canvas.FillRect(Rect);
    InflateRect(Rect, -3, -3);
    DrawText(Canvas.Handle, PAnsiChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), Rect,
      DT_CENTER or DT_VCENTER or DT_SINGLELINE);   // Texto centrado en la celda
//      DT_RIGHT or DT_VCENTER or DT_SINGLELINE);   // Texto alineado a la derecha en la celda
  end;
end;




Saludos.

compuin 26-01-2020 21:30:13

Cita:

Empezado por escafandra (Mensaje 535367)
Para eso tienes que pintar tú mismo las celdas. Te pongo un ejemplo:


Código Delphi [-]
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
begin
  with Sender as TStringGrid do
  begin
    // Dibujar texto centrado horizontal y verticalmente o a la derecha
    InflateRect(Rect, -1, -1);
    Canvas.FillRect(Rect);
    InflateRect(Rect, -3, -3);
    DrawText(Canvas.Handle, PAnsiChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), Rect,
      DT_CENTER or DT_VCENTER or DT_SINGLELINE);   // Texto centrado en la celda
//      DT_RIGHT or DT_VCENTER or DT_SINGLELINE);   // Texto alineado a la derecha en la celda
  end;
end;




Saludos.


Me sale el error Expected '='('found. en una pequena ventana

escafandra 26-01-2020 21:37:31

Revisa lo que has escrito. En algún sitio metiste la gamba.















Saludos.

compuin 26-01-2020 21:41:47

Aqui la declare

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);

private
{ Private declarations }

Casimiro Notevi 26-01-2020 21:47:01

No olvides las etiquetas para código, gracias:



escafandra 26-01-2020 22:13:23

Cita:

Empezado por compuin (Mensaje 535370)
Aqui la declare

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);

private
{ Private declarations }

En el IDE debes ir a Eventos del TSringGrid y buscar OnDrawCell Haces dobleclick y se abrirá en el editor de código con la función preparada para escribir. Allí pega el código que puse. Si lo haces "a mano" No debes poner Form1.

Código Delphi [-]
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    StringGrid2: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;


Pero luego tienes que is al editor de eventos igualmente para que quede asignado dicho evento.




Saludos.

compuin 26-01-2020 22:19:51

Ya lo intente

Coloco el procedure y se ejecuta el formulario pero no hace el arreglo en el grid

escafandra 26-01-2020 22:24:51

Cita:

Empezado por compuin (Mensaje 535373)
Ya lo intente

Coloco el procedure y se ejecuta el formulario pero no hace el arreglo en el grid

No has asignado el evento


Saludos.

compuin 26-01-2020 22:26:36

Cuando trato de asignarlo me da error apuntando al nombre de la procedure

Sera que no lo estoy haciendo bien ??

escafandra 26-01-2020 22:28:57

Borra todo y deja que delphi lo haga. Cuando se muestre el editor de código, escribes el código que te puse.


Saludos.

compuin 26-01-2020 22:38:42

El evento OnDrawCell queda vacio luego que borro el codigo y ejecuto

Es normal ?

escafandra 26-01-2020 22:44:26

Cuando un evento que ha asignado delphi no tiene código, directamente se borra por completo al ejecutar o guardar. Si el evento tiene código, delphi no borra nada.




Saludos.

escafandra 26-01-2020 22:47:04

Esto es lo que te debe aparecer en el editor de eventos:








Saludos.

compuin 26-01-2020 22:49:42

Ahora si, era eso

Mil gracias mi estimado

compuin 26-01-2020 22:53:49

Aunque el ejemplo lo hace con todas las celdas

Yo necesito que las celdas de escabezado queden centradas y el resto alineadas a la derecha

Como logro ajustarlo

Adicional, el color azul de la celda activa me gustaria quitarlo tambien

Te muestro como esta


escafandra 26-01-2020 23:41:42

Cita:

Empezado por compuin (Mensaje 535382)
Aunque el ejemplo lo hace con todas las celdas

Yo necesito que las celdas de escabezado queden centradas y el resto alineadas a la derecha

Código Delphi [-]
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Alin: integer;
begin
  with Sender as TStringGrid do
  begin
    if ARow = 0 then
       Alin:= DT_CENTER
    else
       Alin:= DT_RIGHT;

    // Dibujar texto centrado horizontal y verticalmente o a la derecha
    InflateRect(Rect, -1, -1);
    Canvas.FillRect(Rect);
    InflateRect(Rect, -3, -3);
    DrawText(Canvas.Handle, PAnsiChar(Cells[ACol, ARow]), Length(Cells[ACol, ARow]), Rect,
      Alin or DT_VCENTER or DT_SINGLELINE);
  end;
end;


Cita:

Empezado por compuin (Mensaje 535382)
Adicional, el color azul de la celda activa me gustaria quitarlo tambien

Código Delphi [-]
DefaultDrawing:= false;


Saludos.

compuin 26-01-2020 23:48:24

Muchisimas gracias

:)

compuin 28-01-2020 01:38:03

Amigos,

Tengo el stringgrid funcionando correctamente pero ahora necesito agregar un tipo de font diferente entre textos sin que me cambie el font a todo el grid. Necesito algo asi como esta imagen

[IMG][/IMG]

Agradezco sus aportes


La franja horaria es GMT +2. Ahora son las 21:13:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi