Ir al contenido


Foto

Firemonkey Alinear contenido de una Celda.


  • Por favor identifícate para responder
10 respuestas en este tema

#1 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 14 junio 2016 - 08:15

Buen día Compañeros.

 

Vengo con otra duda. ¿De qué manera se puede alinear el texto de una celda del componente TStringrid de FireMonkey?

 

Gracias de antemano,


  • 0

#2 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 14 junio 2016 - 02:10

A ver que tal de esta manera:
 


delphi
  1. procedure TForm1.FormCreate(Sender: TObject);
  2. begin
  3. StringGrid1.DefaultDrawing := False;
  4. end;
  5.  
  6. procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject; const Canvas: TCanvas; const Column: TColumn;
  7. const [Ref] Bounds: TRectF; const Row: Integer; const [Ref] Value: TValue; const State: TGridDrawStates);
  8. begin
  9. Canvas.Fill.Color := StringGrid1.TextSettings.FontColor;
  10. if Column.Index = 0 then
  11. begin
  12. if Odd(Row) then
  13. Canvas.FillText(Bounds, Value.AsString, True, 1, [], TTextAlign.Center)
  14. else
  15. Canvas.FillText(Bounds, Value.AsString, True, 1, [], TTextAlign.Trailing);
  16. end
  17. else
  18. begin
  19. if Odd(Row) then
  20. Canvas.FillText(Bounds, Value.AsString, True, 1, [], TTextAlign.Trailing)
  21. else
  22. Canvas.FillText(Bounds, Value.AsString, True, 1, [], TTextAlign.Leading);
  23. end;
  24. end;


Editado por Agustin Ortu, 14 junio 2016 - 02:10 .

  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 junio 2016 - 09:10

Busqué el evento DrawColumnCell en el StringGrid pero no lo tiene. Probablemente no esté soportado ese evento en Firemonkey


  • 0

#4 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 15 junio 2016 - 09:42

Que versión de Delphi estas usando? Firemonkey cambia mucho de versión a versión. Es posible que ese evento este protegido y que tengas que acceder con un helper

Debería funcionar a partir de XE7 http://stackoverflow...sing-delphi-xe7

Editado por Agustin Ortu, 15 junio 2016 - 09:46 .

  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 junio 2016 - 10:22

Estoy usando Delphi XE5 compañero... :(


  • 0

#6 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 mensajes
  • LocationCali, Colombia

Escrito 15 junio 2016 - 12:50

FireMonkey por ser relativamente nuevo (al menos en delph) se ha ido modificando bastante y entre versión y versión hay cosas que no existen,  pero es para bien.

 

Saludos.


  • 0

#7 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 15 junio 2016 - 01:17

Por lo que he estado leyendo, la gente no se cansa de decir que antes de XE7, Firemonkey es una "beta". Fue recien a partir de XE7 que se ha vuelto mas estable y robusto.No solo el framework en si, sino tambien la comunidad. Me imagino que hace unos años era mas dificil encontrar recursos en firemonkey

 

Hoy esta un poco mejor

 

Lo unico que se me ocurre decirte poly es que uses otro control. Los grid en firemonkey estan compuestos basicamente por otros controles. Estos controles se crean con un metodo protegido de clase, que se llamaba algo asi como CreateCellControl. Este metodo devuelve un objeto TTextObject si mal no recuerdo, o un TStyledControl que contiene justamente on TTextObject. El problema es que todos las celdas se crean igual, asi que si redefines este metodo para que devuelva otro tipo de celda, para cada celda el grid va a invocar y crear el mismo objeto: osea alineas todo a la derecha, todo al centro, o todo a la izquierda

 

Lo que no recuerdo exactamente es donde almacena el grid estos controles que representan cada celda. La otra alternativa es acceder a estos objetos y manipular sus propiedades directamente. Insisto con usar un class helper o una subclase de TStringGrid para lograrlo. Por cierto, existe la propiedad OwnerDraw en XE5?


Editado por Agustin Ortu, 15 junio 2016 - 01:18 .

  • 0

#8 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 15 junio 2016 - 02:49

Al parecer no existe el OwnerDraw amigos...

 

Archivo adjunto  pantalla.jpg   60,02KB   1 descargas

 

 

post-12138-0-83309200-1466023753.jpg


  • 0

#9 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 15 junio 2016 - 07:41

No podes usar un TGrid?
  • 0

#10 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4.945 mensajes
  • LocationMéxico

Escrito 17 junio 2016 - 02:40

Si fuera con un TGrid cómo se hace?


  • 0

#11 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 mensajes
  • LocationArgentina

Escrito 17 junio 2016 - 04:16

No estoy muy seguro, pero en el TGrid quiza tengas mas eventos. O quiza otro tipo de columna que te permita configurar como se imprime el texto, o acceso con una propiedad para hacerlo por codigo


  • 0




IP.Board spam blocked by CleanTalk.