Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Consulta celda de una grilla (https://www.clubdelphi.com/foros/showthread.php?t=84116)

Caroso 11-09-2013 21:18:12

Consulta celda de una grilla
 
hola de nuevo...

tengo este problemilla con mi StringGrid en delphi 2010...



alguien sabra a que se debe?¿ gracias :)

ecfisa 11-09-2013 21:33:38

Hola Caroso.

Sin dudas las propiedades FixedCols y FixedRows tienen como valor 0 y ColCount y RowCount tienen como valor 1. Desde el Object Inspector modifica esos valores para apreciar el resultado.Saludos. :)

Caroso 12-09-2013 01:07:31

hola ecfisa muchas gracias por la respuesta... pero el problema es el siguiente... tengo un stringgrid en el cual listare unos nombres (en la columna 0) y una cruz en la columna 2... lo quiero es que se mantenga el color de selección de la celda, pero no el tedioso rectángulo de lineas puntiadas... en el articulo que me pasaste (muchas gracias) leí que el rectángulo punteado sirve para informar donde se encuentra posicionado uno en la grilla... yo quiero eliminar ese recuadro y que solo aparezca el color de seleccion de celda...

muchas gracias de antemano... :D

Caminante 12-09-2013 01:43:50

Activaste Drawfocusselected en options???

Saludos

Caroso 12-09-2013 01:54:45

Cita:

Activaste Drawfocusselected en options???
asi es amigo... lo eh activado... como eh comentado... aparece el color de seleccion y el tedioso rectangulo punteado... pero eh comprobado que sucede con todos los componentes de un form... si uno se encuentra posicionado en un componente y presiona TAB para cambiar de componente aparece... es decir aparece cuando se le hace foco a un objeto...

saludos y gracias por sus respuestas :)

ecfisa 12-09-2013 09:07:01

Cita:

Empezado por Caroso (Mensaje 466752)
... lo quiero es que se mantenga el color de selección de la celda, pero no el tedioso rectángulo de lineas puntiadas...

Hola Caroso.

Ahora sí interpreté lo que buscabas... Podes realizarlo interponiendo la clase TStringGrid para poder redefinir el método Paint:
Código Delphi [-]
unit FocusCellCol;

interface

uses Windows, Grids, Graphics, Types;

type
  TStringGrid = class(Grids.TStringGrid)
  private
    FFocusColor: TColor;
  protected
     procedure Paint; override;
  public
     property FocusColor: TColor read FFocusColor write FFocusColor;
  end;

implementation

procedure TStringGrid.Paint;
var
  R: Trect;
begin
  inherited;
  R := CellRect(Col,Row);
  with Canvas do
  begin
    Brush.Style := bsSolid;
    Brush.Color := FFocusColor;
    FillRect(R);
    DrawText(Canvas.Handle, PChar(Cells[Col, Row]), -1, R, DT_SINGLELINE);
  end;
end;

end.

Ejemplo de uso:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,  Grids, StdCtrls,
  FocusCellCol; (* Importante: Inclui FocusCellCol en la sección interface *)

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    procedure FormCreate(Sender: TObject);
  private
  public
  end;

var
  Form1: TForm1;

implementation {$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var
  i,j,c: Integer;
begin
  with StringGrid1 do
  begin
    Options   := Options - [goVertLine] - [goHorzLine] + [goEditing];
    FixedCols := 0;
    FixedRows := 0;
    // mostrar algunos datos
    c := 1;
    for i := 0 to ColCount-1 do
      for j := 0 to RowCount-1 do
      begin
        Cells[j,i] := IntToHex(c, 4);
        Inc(c);
      end;
    // Color de foco a gusto
    FocusColor := clHighLight;
  end;
end;

end.
(Para otros tipos de formatos de presentación del texto de la celda revisa la función DrawText)

Saludos :)

Caroso 12-09-2013 19:27:31

gracias ecfisa por el codigo.. lo eh probado pero me sale un error en la parte:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
var
  i,j,c: Integer;
begin
  with StringGrid1 do
  begin
    Options   := Options - [goVertLine] - [goHorzLine] + [goEditing];
    FixedCols := 0;
    FixedRows := 0;
    // mostrar algunos datos
    c := 1;
    for i := 0 to ColCount-1 do
      for j := 0 to RowCount-1 do
      begin
        Cells[j,i] := IntToHex(c, 4);
        Inc(c);
      end;
    // Color de foco a gusto
    FocusColor := clHighLight;
  end;
end;

el error es el siguiente...

Cita:

[DCC Error] Unit1.pas(44): E2003 Undeclared identifier: 'FocusColor'
Saludos :)

Caroso 12-09-2013 19:41:10

ya lo solucione jeje muchas gracias ecfisa por el codigo...

saludos :)

ecfisa 12-09-2013 19:44:12

Hola Caroso.

Como comenté en el código del ejemplo de uso del mensaje anterior, es indispensable que incluyas la unidad FocusCellCol donde desees usarla:
Código Delphi [-]
unit Unit1;

interface

uses ..., FocusCellCol;
...

Saludos :)

Edito: No ví tu último mensaje mientras escribía este , me alegro que lo hayas solucionado. :)


La franja horaria es GMT +2. Ahora son las 19:44: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