Cita:
Empezado por Caroso
... 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;
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;
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;
FocusColor := clHighLight;
end;
end;
end.
(Para otros tipos de formatos de presentación del texto de la celda revisa la función
DrawText)
Saludos