Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Expandir celda de TStringGrid (https://www.clubdelphi.com/foros/showthread.php?t=61546)

Dark_RavenM 12-11-2008 01:40:33

Expandir celda de TStringGrid
 
Hola a todos quisiera saber si alguien tiene idea de como hacerle para que en un TStringGrid al darle doble click sobre la linea que separa las columnas se expanda la celda como en Excel, gracias de antemano

Neftali [Germán.Estévez] 12-11-2008 10:21:51

Deberías poder detectar el MouseDown para quedarte con la posición (X , Y) y lanzar en el OnDblClick el procedimiento de redimensionado.
Con las coordenadas X,Y podrrás saber si estás sobre la columna de títulños o no y siestás sobre una de las líneas de separación.
Una vez detectado esto, basta con ampliar el ancho de esa columna utilizando la propiedad Colwidth (creo recordar) para asignar el nuevo tamaño.
Para calcular el tamaño nuevo deberás recorrer esa columna del TStringGrid y calcular el texto más ancho en pixels (para eso puedes usar el Canvas.TextWidth).

Dark_RavenM 12-11-2008 19:58:54

respuesta
 
Me ayudaron con el problema con este codigo, todos los creditos a su autor paco

Debe estar ligado al evento OnDblClick de tu StringGrid.

Código Delphi [-]
procedure TfrmCatalogos.StringGrid1DblClick(Sender: TObject); 
var 
  rAnt: TRect; 
  oMousePt: TPoint; 
  nRow, nCol, nWidth, nWidthMax: Integer; 
begin 

  oMousePt := Mouse.CursorPos; 
  oMousePt := StringGrid1.ScreenToClient(oMousePt); 

  for nCol := 1 to StringGrid1.ColCount - 1 do 
    begin 
      rAnt := StringGrid1.CellRect(nCol,0); 
      if (oMousePt.X >= rAnt.Right - 3) and 
        (oMousePt.X <= rAnt.Right + 4) and 
        (oMousePt.Y in [rAnt.Top..rAnt.Bottom]) then 
        begin 
          nWidthMax := 0; 
          for nRow := 0 to (StringGrid1.RowCount - 1) do begin 
            if nRow = 0 then //El header es bold 
              StringGrid1.Canvas.Font.Style := [fsBold] 
            else //Las demás líneas no son bold 
              StringGrid1.Canvas.Font.Style := []; 
            nWidth := StringGrid1.Canvas.TextWidth(StringGrid1.Cells[nCol, nRow]); 
            if nWidth > nWidthMax then 
              nWidthMax := nWidth; 
          end; 
          StringGrid1.ColWidths[nCol] := nWidthMax + 5; 
        end; 
    end; 

end;

Neftali [Germán.Estévez] 13-11-2008 10:09:48

Pues gracias por postear este código como respuesta; Es una costumbre que algunos foristas no tienen :(:(; Cuando obtienen la solución se olvidan del hilo.

NOTA: Me he permitodo añadir TAG's a tu código para que sea más legible.


La franja horaria es GMT +2. Ahora son las 11:59:05.

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