Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos


Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 171
Poder: 14
ramonibk Va por buen camino
Cell StringGrid Multilinea (Tiempo Ejecucion)

Hola de nuevo a todos.

Bueno como el titulo muy bien indica. lo que estoy intentando es que una celda de un StringGrid en la cual estoy escribiendo en tiempo de ejecución pueda tener multi-linea.
mas o menos como se comporta Excel cuando Pulsas Alt+Enter.

Gracias de antemano por vuestra colaboración.
Responder Con Cita
  #2  
Antiguo 27-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.668
Poder: 27
ecfisa es conocido por todosecfisa es conocido por todosecfisa es conocido por todosecfisa es conocido por todosecfisa es conocido por todosecfisa es conocido por todos
Hola ramonibk.

Aunque no sé si es exáctamente lo que andas buscando, pegale una leida a estos enlaces:
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 28-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 171
Poder: 14
ramonibk Va por buen camino
Gracias Ecfisa. Estos link ya los visite previamente antes de poner mi consulta.
pero por lo que he visto y mi poco entendimiento, esto solo ocurres en la carga o creación del form.

lo que yo necesito es que durante la ejecución de mi aplicación cuando el usuario introduzca los datos pueda poner varias lineas.
Responder Con Cita
  #4  
Antiguo 28-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 171
Poder: 14
ramonibk Va por buen camino
Bueno mas o menos ya esta.

la solucion ha sido utilizar un Memo que he insertado en la celda del TStringGrid y acto seguido usando el metodo que me a sugerido ecfisa de los metodos multi linea.

En el DrawCell.
Código Delphi [-]
var
  Grid     : TStringGrid;
  Texto  : String;
  R       : TRect;
begin
 Grid := TStringGrid(Sender);
 if (ARow < Grid.FixedRows) or (ACol < Grid.FixedCols)
  then
   Grid.Canvas.Brush.Color := clBtnFace
  else
   Grid.Canvas.Brush.Color := clWhite;
   Grid.Canvas.FillRect(Rect);
   Texto := Grid.Cells[ACol,ARow];
   DrawText( Grid.Canvas.Handle, PChar(Texto), StrLen(PChar(Texto)), Rect, DT_WORDBREAK);
 if (gdSelected in State)and(ACol=1) Then // Si estanos en la columna 1 insertamos el momo en la celda.
   with Memo1 do
    begin
     memo1.Visible := True;
     BringToFront;
     CopyRect(R, Rect);
     R.TopLeft :=     Form1.ScreenToClient(StringGrid1.ClientToScreen(R.TopLeft));
     R.BottomRight := Form1.ScreenToClient(StringGrid1.ClientToScreen(R.BottomRight));
     SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
     Memo1.SetFocus;
    end;
 if ACol <> 1 Then
  Begin
   Memo1.Lines.Text := '';
   Memo1.Visible := False;
  end;

y para terminar. en el evento OnChange del memo
Código Delphi [-]
 StringGrid1.Cells[Col, Row] :=  Memo1.Lines.Text;
 StringGrid1.Options:= StringGrid1.Options+[goRowSizing,goColSizing];

Bueno ya solo queda que si pulsamos Tab saltemos a la siguiente celda de TStringGrid y por supuesto cambiar a altura de la celda según el numero de lineas. y en cuanto lo tenga lo publico para vuestra información.
Responder Con Cita
  #5  
Antiguo 28-05-2012
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 9.668
Poder: 27
ecfisa es conocido por todosecfisa es conocido por todosecfisa es conocido por todosecfisa es conocido por todosecfisa es conocido por todosecfisa es conocido por todos
Hola.

Bueno, más o menos le había buscado por el mismo lado , te pongo la prueba que hice por si te ayuda en algo.
Código Delphi [-]
...
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Memo1: TMemo;
    procedure FormCreate(Sender: TObject);
    procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
      Rect: TRect; State: TGridDrawState);
    procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure Memo1Exit(Sender: TObject);
  private
    procedure CMDialogKey(Var Msg: TWMKey);message CM_DIALOGKEY;
  public
  end;

var
  Form1: TForm1;

implementation 

var
  TabPressed: Boolean = False;

procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Clear;
end;

procedure TForm1.CMDialogKey(var Msg: TWMKey);
begin
  if(ActiveControl is TMemo)and(Msg.Charcode = VK_TAB) then
    with StringGrid1 do
    begin
      Cells[Col,Row]:=  Memo1.Lines.Text;
      Col:= Col + 1;
      TabPressed:= True;
    end;
  inherited;
end;

procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  Rect: TRect; State: TGridDrawState);
var
  Texto: string;
begin
  with TStringGrid(Sender) do
  begin
    Canvas.FillRect(Rect);
    Texto:= Cells[ACol,ARow];
    DrawText(Canvas.Handle, PChar(Texto), StrLen(PChar(Texto)),
    Rect, DT_WORDBREAK);
    if (gdSelected in State) and (ACol=1) then
    begin
      Memo1.Left := Rect.Left + Left + 2;
      Memo1.Top := Rect.Top + Top + 2;
      Memo1.Width := Rect.Right - Rect.Left;
      Memo1.Height := Rect.Bottom - Rect.Top;
      Memo1.Visible := True;
      Memo1.SetFocus;
    end
    else
      Memo1.Visible := False;
  end;
end;

procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  Memo1.Lines.Text:= StringGrid1.Cells[ACol,ARow];
end;

procedure TForm1.Memo1Exit(Sender: TObject);
begin
  if not TabPressed then
   StringGrid1.Cells[StringGrid1.Col,StringGrid1.Row]:=  Memo1.Lines.Text;
  TabPressed:= False;
end;


end.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 28-05-2012
ramonibk ramonibk is offline
Miembro
 
Registrado: may 2004
Posts: 171
Poder: 14
ramonibk Va por buen camino
Muchas Gracias ecfisa probare tu código y te comento.
gracias.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cargar datos en StringGrid en tiempo de ejecucion!! ezequiel913 Varios 5 02-07-2011 23:37:42
Cargar imágenes en celdas de StringGrid dependiendo de una consulta en tiempo de eje gulder Varios 8 11-12-2008 20:58:45
desmarcar cell en un StringGrid elcigarra OOP 1 18-10-2005 10:34:49
StringGrid con celdas multilinea [Gunman] Tablas planas 2 19-09-2005 08:27:11
Tiempo de ejecucion? st7 Varios 3 11-05-2004 22:03:28


La franja horaria es GMT +2. Ahora son las 09:05:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi