PDA

Ver la Versión Completa : Control grafico StringGrid


Sir16
15-02-2019, 16:49:31
Buenas compañeros, me encuentro que tengo un stringGrid en el que lo hago mas ancho de la siguiente forma :


Procedure AmpliarRow;
begin
StringGrid1.RowHeights[1] := StringGrid1.RowHeights[1] + 10;
end;
procedure Form1.StringGrid1.DrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var texto :string;
indice,posicion:integer;
begin
if Pos(#13,StringGrid1..Cells[Acol,Arow])<>0 then
begin
texto:= StringGrid1..Cells[Acol,Arow]+#13;
StringGrid1.Canvas.FillRect(Rect);
indice:= 0;
repeat
posicion := pos(#13,texto);
with StringGrid1.Canvas do
textout(rect.Left,rect.Top+(indice*(textHeight(copy(texto,1,posicion-1))+5)),copy(Texto,1,posicion-1));
inc(indice);
delete(texto,1,posicion);
until posicion = 0;
end;
end;


El problema lo tengo que al seleccionar una de estas lineas, en la que lo tengo particionado, me sale el texto en medio sin la separación como si fuera un hint. Adjunto imagen del problema.

He encontrado que si cambio el DrawingStyle de gsdThemed a gsdClassic el problema me desaparece, pero no es tan atractivo visualmente.
Alguna recomendación de como controlar esto para que no me salga o quede igual que con el modo del drawcell.

Gracias de antemano.

PD. Trabajo con Delphi en entorno de desarrollo versión Berlin.

Sir16
16-02-2019, 11:03:40
Después de estar peleando unas buenas horas solo con esto encontré la solución añadiendo una linea antes de hacer el fillRect con muestro a continuación en el proceso del draw cell;


if Pos(#13,StringGrid1.Cells[Acol,Arow])<>0 then
begin
texto:= StringGrid1.Cells[Acol,Arow]+#13;
// lineas añadidas para arreglar el problema

StringGrid1.Canvas.Brush.Color := StringGrid1.Color;
StringGrid1.Canvas.FillRect(Rect);
indice:= 0;
repeat
posicion := pos(#13,texto);
with StringGrid1.Canvas do
begin
Brush.Color := StringGrid1.Color;
textout(rect.Left,rect.Top+(indice*(textHeight(copy(texto,1,posicion-1))+5)),copy(Texto,1,posicion-1));
end;
inc(indice);
delete(texto,1,posicion);
until posicion = 0;
end;


Espero que a alguien le sirva.

Casimiro Notevi
16-02-2019, 11:34:46
^\||/^\||/^\||/

ElKurgan
18-02-2019, 07:58:32
Gracias por compartir la solución

Saludos