Jump to content


Photo

Firemonkey Alinear contenido de una Celda.


  • Please log in to reply
10 replies to this topic

#1 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 14 June 2016 - 08:15 AM

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 posts
  • LocationArgentina

Posted 14 June 2016 - 02:10 PM

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;


Edited by Agustin Ortu, 14 June 2016 - 02:10 PM.

  • 0

#3 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 15 June 2016 - 09:10 AM

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 posts
  • LocationArgentina

Posted 15 June 2016 - 09:42 AM

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

Edited by Agustin Ortu, 15 June 2016 - 09:46 AM.

  • 0

#5 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 15 June 2016 - 10:22 AM

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


  • 0

#6 genriquez

genriquez

    Advanced Member

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

Posted 15 June 2016 - 12:50 PM

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 posts
  • LocationArgentina

Posted 15 June 2016 - 01:17 PM

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?


Edited by Agustin Ortu, 15 June 2016 - 01:18 PM.

  • 0

#8 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 15 June 2016 - 02:49 PM

Al parecer no existe el OwnerDraw amigos...

 

Attached File  pantalla.jpg   60.02KB   1 downloads

 

 

post-12138-0-83309200-1466023753.jpg


  • 0

#9 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 posts
  • LocationArgentina

Posted 15 June 2016 - 07:41 PM

No podes usar un TGrid?
  • 0

#10 poliburro

poliburro

    Advanced Member

  • Administrador
  • 4945 posts
  • LocationMéxico

Posted 17 June 2016 - 02:40 PM

Si fuera con un TGrid cómo se hace?


  • 0

#11 Agustin Ortu

Agustin Ortu

    Advanced Member

  • Moderadores
  • PipPipPip
  • 831 posts
  • LocationArgentina

Posted 17 June 2016 - 04:16 PM

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.