Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-04-2014
Luvac Luvac is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
Luvac Va por buen camino
Stringgrid doble texto

Que tal buen dia,estoy utilizando un stringgrid lo que quiero hacer es que al momento que esta esta seleccionada resalte la fila encontre este codigo buscando en este foro:

Código:
var
  i:Integer;
  texto:STring;
begin
   For i:=1 to StringGrid1.ColCount-1 Do
   begin
      If (gdSelected in State) Then
      begin
         StringGrid1.Canvas.Font.Color := clred;
         StringGrid1.Canvas.Font.Style:=[fsBold];
      end
      else
      StringGrid1.Canvas.Font.Color := clBlack;

      Texto := StringGrid1.Cells[ACol,ARow];
      StringGrid1.Canvas.TextRect( Rect, Rect.Left+2, Rect.Top+2, Texto);
   end;
Lo hase como lo necesito pero el problema es que me escribe doble,una en color rojo adelante y la otra en negro atras,y los titulos tambien los pone dobles,como corrijo esto.(disculpen si este tema ya se habia tocado pero no encontre el topic)
Responder Con Cita
  #2  
Antiguo 15-04-2014
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 Luvac Ver Mensaje
...estoy utilizando un stringgrid lo que quiero hacer es que al momento que esta esta seleccionada resalte la fila encontre este codigo buscando en este foro...
Hola Luvac.

No termino de entender el efecto que buscas lograr, pero el código de tu mensaje hace exáctamente lo mismo que este:
Código Delphi [-]
procedure TForm1.StringGrid2DrawCell(Sender: TObject; ACol, ARow: Integer; 
  Rect: TRect; State: TGridDrawState);
begin
  with Sender as TStringGrid do
  begin
    if gdSelected in State then
    begin
      Canvas.Font.Color:= clred;
      Canvas.Font.Style:= [fsBold];
    end;
    Canvas.TextRect(Rect, Rect.Left+2, Rect.Top+2, Cells[ACol,ARow])
  end
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 15-04-2014
Luvac Luvac is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
Luvac Va por buen camino
Hola ecfisa,gracias por tu pronta respuesta:

El efecto que quiero lograr es cuando el usuario seleccione una celda del stringgrid toda la fila resalte,vamos que resalte la fila seleccionada, pero me repinta dos veces una con el color rojo que esta bien pero atrás vuelve a escribir con color negro,con tu código da el mismo resultado.
Imágenes Adjuntas
Tipo de Archivo: jpg dobletexto.jpg (11,8 KB, 22 visitas)
Responder Con Cita
  #4  
Antiguo 16-04-2014
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 Luvac.

A ver... fijate si te sirve de este modo:
Código Delphi [-]
...
type
  TStringGrid = class(Grids.TStringGrid)
  private
    FRowSelected: Integer;
  protected
    function CreateEditor: TInplaceEdit; override;
  public
    property RowSelected: Integer read FRowSelected write FRowSelected;
  end;

  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1Enter(Sender: TObject);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    ...
  private
  public
  end;
...

implementation

{ TStringGrid }
function TStringGrid.CreateEditor: TInplaceEdit;
begin
  Result := inherited CreateEditor;
  if Focused then
    TMaskEdit(Result).Font.Color := clRed
  else
    TMaskEdit(Result).Font.Color := clBlack;
end;

{ TForm }
procedure TForm1.FormCreate(Sender: TObject);
begin
   ...
end;

procedure TForm1.StringGrid1Enter(Sender: TObject);
begin
  TStringGrid(Sender).RowSelected:= -1;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
  ROWCOL : array[Boolean] of TColor = (clBlack, clRed);
begin
  with TStringGrid(Sender) do
  begin
    Canvas.Font.Color:= ROWCOL[ARow = RowSelected];
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[Acol,ARow]);
  end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  with TStringGrid(Sender) do
  begin
    RowSelected:= ARow;
    Invalidate;
  end;
end;
...

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-04-2014
Luvac Luvac is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
Luvac Va por buen camino
Gracias ecfisa

Solo que ahora no me deja ingresar datos me dise que no conoce Rowcount,cell[] etc.

Estoy utilizando Xe4, por cierto en esta parte

Código:
function TStringGrid.CreateEditor: TInplaceEdit;
begin
  Result := inherited CreateEditor;
  if Focused then
    TMaskEdit(Result).Font.Color := clRed
  else
    TMaskEdit(Result).Font.Color := clBlack;
end;
'if Focused' me marca error,si pudieras decirme que unidades utilizaste te lo agradecería ya que yo puse unas y no se si son las correctas.
Responder Con Cita
  #6  
Antiguo 16-04-2014
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 Luvac.

El código funciona correctamente en Delphi 7 pero tal vez no lo haga en Delphi XE4... En realidad todo el embrollo de reescribir TInplaceEdit era a fin de que también pusiera el texto en rojo cuando editaras, pero no es relevante para la seleccion de la fila.

Anulando esa parte del código y usando sólo los eventos del StringGrid supongo que tendría funcionarte en XE4 :
Código Delphi [-]
...
implementation

var
  RowSelected: Integer;

procedure TForm1.StringGrid1Enter(Sender: TObject);
begin
  RowSelected:= 0; 
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
  ROWCOL : array[Boolean] of TColor = (clBlack, clRed);
begin
  with TStringGrid(Sender) do
  begin
    Canvas.Font.Color:= ROWCOL[ARow = RowSelected];
    Canvas.TextOut(Rect.Left+2, Rect.Top+2, Cells[Acol,ARow]);
  end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  with TStringGrid(Sender) do
  begin
    RowSelected:= ARow;
    Invalidate;
  end;
end;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #7  
Antiguo 16-04-2014
Luvac Luvac is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
Luvac Va por buen camino
Lo siento ecfisa pero sigue igual,no se que le pasa,me pinta dos veces,sabes como cambiarle el color de la fuente por defecto porque se le podria poner un color igual que el del grid y ya no importaria si lo pinta o no porque no se veria.
Responder Con Cita
  #8  
Antiguo 16-04-2014
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 Luvac.

No se que decirte... Funciona correctamente en Delphi 7 y lamentablemente no poseo la versión con que trabajas como para revisar el comportamiento que mencionas.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #9  
Antiguo 16-04-2014
Luvac Luvac is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
Luvac Va por buen camino
Gracias ecfisa por tu tiempo,voy a dejarlo asi entonces por el momento y seguiré buscándole.
Responder Con Cita
  #10  
Antiguo 16-04-2014
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 Luvac.

Ahora me surge una duda... ¿ Estas trabajando con VCL o FireMonkey ?

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 16-04-2014
Luvac Luvac is offline
Miembro
 
Registrado: nov 2007
Posts: 24
Poder: 0
Luvac Va por buen camino
Con vcl eficsa
Responder Con Cita
  #12  
Antiguo 16-04-2014
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 Luvac.

Hagamos el último intento, te adjunto el código de prueba que funciona correcto en Delphi 7 y probalo con el XE4, por ahí encontras como adecuarlo...

Recordá que si te da problemas el reescribir la clase TStringGrid podes eliminar esa parte del código y declarar la variable RowSelected como global a la unidad.

Saludos
Archivos Adjuntos
Tipo de Archivo: zip Luvac.zip (4,1 KB, 11 visitas)
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 17-04-2014
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
Luvac,

Cita:
Empezado por ecfisa
...Funciona correctamente en Delphi 7 y lamentablemente no poseo la versión con que trabajas (Delphi XE4)...
Cita:
Empezado por Luvac
...sigue igual, no se que le pasa, me pinta dos veces...
El código del archivo adjunto del Msg #12 funciona correctamente en Delphi 7 y Delphi 2010 bajo Windows 7 Professional x32, en Delphi XE4 sin embargo requiere de un pequeño ajuste para que se visualice correctamente la data en las celdas del TStringGrid:
Código Delphi [-]
  
procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
const
  ROWCOL : array[Boolean] of TColor = (clBlack, clRed);
begin
  with TStringGrid(Sender) do
  begin
    Canvas.Font.Color:= ROWCOL[ARow = RowSelected];
    Canvas.TextOut(Rect.Left+3, Rect.Top+3, Cells[Acol,ARow]);
  end;
end;
Espero sea útil

Nelson.
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
Problema al alinear texto en StringGrid en XE adrall OOP 0 21-06-2011 11:58:05
Centrar texto StringGrid mizzard C++ Builder 17 11-05-2011 23:20:38
StringGrid doble fila mjjj Varios 3 11-07-2008 16:19:08
Escanear Doble Cara, Doble Lector karenthyuliana Gráficos 2 11-04-2008 17:29:42
alinear a la derecha texto de un stringgrid ctronx Varios 10 07-09-2007 21:54:59


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


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