Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Desarrollo en Delphi para Android
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-02-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Colorear las celdas de un TStringGrid

Hola, buenas tardes a todos.
Tengo hecho en Delphi un sencillo juego de sudoku para mis amigos. Me gustaría adaptarlo para Android, pero como no tengo ninguna experiencia con este tema, entiendo que voy a tener que consultaros a los expertos más de una cuestión. El primer problema que me ha surgido es que al diseñar el tablero, (para lo que estoy utilizando un TGridPanelLayout), no sé como dar colores distintos a las celdas de la rejilla.
No sé si será posible, o tendría que utilizar otro componente.
Una vez más apelo a vuestra buena disposición y a los expertos foreros para recibir vuestros consejos.

Gracias, de antemano, porque sé que os estoy "robando" una parte de vuestro valioso tiempo.

P.D. Naturalmente, no pretendo que me deis las funciones hechas, (sería demasiado abuso por mi parte), me conformo con que me orientéis la forma de llevarlo a cabo.

Un saludo.
Responder Con Cita
  #2  
Antiguo 18-02-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Creo que no puedo editar con un TGridPanelLayout.
Lo he cambiado por un TStringGrid de siempre y no sé si voy a tener el mismo problema.
Sigo investigando...
Responder Con Cita
  #3  
Antiguo 18-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Dentro del grid panel, en cada celda, que control estas poniendo? Lo ideal es que pongas algun control que tenga propiedades de color
Responder Con Cita
  #4  
Antiguo 18-02-2016
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Si usas un string grid deberías interceptar el evento OnDraw para cambiar el color
Responder Con Cita
  #5  
Antiguo 18-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jhonalone.

Por favor, cuando hagas dos consultas distintas, crea un hilo para cada una de ellas. Nueva consulta = Nuevo hilo

Saludos y gracias por tu colaboración
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 18-02-2016
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.037
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por ecfisa Ver Mensaje
Hola jhonalone.
Por favor, cuando hagas dos consultas distintas, crea un hilo para cada una de ellas. Nueva consulta = Nuevo hilo
Saludos y gracias por tu colaboración
Error mio, iba a moverlas de foros y he acabado uniéndolas
EDITO: Ya están separadas.

Última edición por Casimiro Notevi fecha: 18-02-2016 a las 20:31:12.
Responder Con Cita
  #7  
Antiguo 18-02-2016
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Error mio, iba a moverlas de foros y he acabado uniéndolas
EDITO: Ya están separadas.
Una moderada colisión , mis disculpas a jhonalone
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #8  
Antiguo 19-02-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Gracias Agustín.
En Windows coloreaba las celdas al seleccionarlas de la siguiente manera:
Código Delphi [-]
procedure TPrinci.grdTableroDrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
  var Tablero:TTablero;
begin        // beep;
    StringGridToTablero(Tablero);
    ColTableroActual:=ACol;
    RowTableroActual:=ARow;
  with grdTablero, grdTablero.Canvas do
  begin
    if  CeldaSeleccionada {and ((FilAnt=FilAct) or (ColAnt=ColAct)) }then
    begin
    Brush.Color:= clYellow;   // FilAnt:=ARow; ColAnt:=ACol;
    CeldaSeleccionada := False;
    end
    else
    if Odd((ACol div 3) + (ARow div 3)) then
      Brush.Color:= clAqua
    else
      Brush.Color:= clWhite;

    if TableroGenerado[ACol, ARow] > 0 then
      Font.Color:= clRed
    else begin
         if (TableroAyudado[ACol, ARow]=1) and
            (Tablero[ACol, ARow]=TableroResuelto[ACol,ARow]) //Es celda ayudada
         then Font.Color:= clBlue
         else Font.Color:= clBlack;  
         end;
      //beep;  sleep(3000);
    ExtTextOut(Handle,
      (Rect.Left + Rect.Right - TextWidth(Cells[ACol,ARow])) div 2,
      (Rect.Top + Rect.Bottom - TextHeight(Cells[ACol,ARow])) div 2,
      ETO_CLIPPED  or ETO_OPAQUE  , @Rect, PChar(Cells[ACol,ARow]),
      Length(Cells[ACol,ARow]),nil);
  end;  // With
LMDStatusBar1.Panels[0].Text:='Columna = '+IntToStr(GrdTablero.Col+1)+'  /  Fila = '+IntToStr(GrdTablero.Row+1);
end;

Pero ahora en DX no sé como voy a hacerlo, pues unas propiedades del TStgringGrid las han cambiado de nombre, otras las han eliminado y hay otras nuevas.
Seguiré peleando.
Gracias por todo.
Saludos.
Responder Con Cita
  #9  
Antiguo 01-03-2016
jhonalone jhonalone is offline
Miembro
 
Registrado: sep 2007
Ubicación: Madrid
Posts: 547
Poder: 17
jhonalone Va por buen camino
Hola a todos.

Después de mucho probar y leer en la ayuda y ver las posibles funciones y procedimientos en muchos componentes de Delphi y, sobre todo, de dedicarle mucho tiempo esta semana, por fin he conseguido mi propósito.

Para ello, he utilizado el mismo evento que usaba en Windows, como decía Agustín, y como no podía ser de otro modo, es decir: el evento OnDraw del TStringGrid.

Por si le sirve a algún novato como yo, copio el código del evento a continuación, modificado desde el original de VCL (Windows), que ya he publicado más arriba, para FireMonkey. De forma que si alguien se encuentra con el mismo problema no tenga que perder tanto tiempo como yo.

Código Delphi [-]

procedure TPrinci.grdTableroDrawColumnCell(Sender: TObject;
  const Canvas: TCanvas; const Column: TColumn; const [Ref] Bounds: TRectF;
  const Row: Integer; const [Ref] Value: TValue; const State: TGridDrawStates);

  var Tablero : TTablero;
      R : TRectF;
      S : String;
begin    Cuantos:=Cuantos+1;
    R:=Bounds;
    StringGridToTablero(Tablero);
    ColTableroActual:=Column.Index;
    RowTableroActual:=Row;

  with grdTablero, grdTablero.Canvas do
  begin
        R.Width := Bounds.Width - 1;
        R.Height :=Bounds.Height-2;
        R.Left := R.Left + 2;
        R.Top := R.Top + 1;

    if  (ColAct = Column.Index) and (FilAct=Row) then
    begin
      ClearRect(R, claGreenyellow);
    end
    else begin
          if Odd((Column.Index div 3) + (Row div 3))
          then ClearRect(R, claLightgrey)
          else ClearRect(R, claLavender);
         end;

    if TableroGenerado[Column.Index, Row] > 0 then
      TextSettings.FontColor:=claRed
    else begin
         if (TableroAyudado[Column.Index, Row]=1) and
            (Tablero[Column.Index, Row]=TableroResuelto[Column.Index,Row]) //Es celda ayudada
         then TextSettings.FontColor:= claBlue
         else TextSettings.FontColor:= claBlack;
         end;
         Canvas.Fill.Color:=TextSettings.FontColor;
         Canvas.Font.SetSettings('Arial',22,grdTablero.TextSettings.Font.Style);
         S := grdTablero.Cells[Column.Index, Row];
         Canvas.FillText(R,S,False,1,[TFillTextFlag.ftRightToLeft],TTextAlign.taCenter, TTextAlign.taCenter);
  end;  // With
end;

Saludos a todos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TStringGrid, colorear UNA celda. TiammatMX OOP 3 03-09-2012 23:01:49
¿Cómo colorear cada celda de un TStringGrid? Almd Internet 0 19-11-2008 12:38:47
Colorear Celdas De Un Objeto Tcalendar JUANRS Varios 0 29-08-2007 01:17:31
Colorear Celdas De Un Objeto Tcalendar JUANRS OOP 0 28-08-2007 01:28:28
colorear las celdas de un TstringGrid mangel OOP 2 16-12-2003 17:22:47


La franja horaria es GMT +2. Ahora son las 09:54:09.


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
Copyright 1996-2007 Club Delphi