PDA

Ver la Versión Completa : Consulta celda de una grilla


Caroso
11-09-2013, 21:18:12
hola de nuevo...

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

http://sia1.subirimagenes.net/img/2013/09/11//130911084356185727.png (http://www.subirimagenes.net/i/130911084356185727.png)

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.

El control TStringGrid (http://www.formauri.es/arrobamasmas/Cursos/index.php?apdo=0402&curso=4_02_03&cap=3)

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
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
... 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:

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:

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 (http://msdn.microsoft.com/en-us/library/windows/desktop/dd162498%28v=vs.85%29.aspx))

Saludos :)

Caroso
12-09-2013, 19:27:31
gracias ecfisa por el codigo.. lo eh probado pero me sale un error en la parte:

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...

[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:

unit Unit1;

interface

uses ..., FocusCellCol;
...


Saludos :)

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