Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Control grafico StringGrid (https://www.clubdelphi.com/foros/showthread.php?t=93756)

Sir16 15-02-2019 16:49:31

Control grafico StringGrid
 
1 Archivos Adjunto(s)
Buenas compañeros, me encuentro que tengo un stringGrid en el que lo hago mas ancho de la siguiente forma :

Código Delphi [-]
 
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;


Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 09:53:24.

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