Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Varias lineas en StringGrid

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Varias lineas en StringGrid Responder citando

Hola,
quiero visualizar varias lineas en una celda de un String Grid.
He probado con el caracter \n pero no me va.
¿Debo activar alguna opcion de la tabla?
Gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Mmm

En principio creo que no se puede hacer en un StringGrid, tienes que usar un TDrawGrid, y dibujarlo tu mismo.
1.- Pones la propiedad defaultdraw a false
2.- te pongo un ejemplo.. un poco chapucero pero funciona.. si puede alguien mejorarlo o conoce funciones especificas para dividir el Rect etc que lo diga please.. a mi tb me interesa.

La cosa seria asi: (Evento OnDrawCell)

void __fastcall TForm1::DrawGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
TDrawGrid *dg=static_cast<TDrawGrid*>(Sender);
switch(ARow){
case 0: //fila 0
break;
case 1://fila 1
if (ACol==0){}; // columna 0 de la fila 1
if (ACol==1){ //columna 1 de la fila 1.. etc
TRect linea1=Rect;
TRect linea2=Rect;
linea1.Bottom=((linea1.Bottom-linea1.top)/2)+linea1.top;
linea2.Top=linea1.Top+((Rect.Bottom-Rect.top)/2);
dg->Canvas->TextRect(linea1,linea1.left+1,linea1.top,"Linea1"); //escribo la linea 1
dg->Canvas->TextRect(linea2,linea2.left+1,linea2.top,"Linea2");//escribo la linea 2
};
break;
}
}

Explicacion:
cada vez que dibujo una celda.. tengo sus coordenadas,. divido el Rect en las lineas que quiera, y escribo el texto..
Espero haberte sido de ayuda.
Un saludo
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Así va bien!!!
Si consiguo optimizarlo lo publicaré.
MUCHAS GRACIAS,saludos
Volver arriba
Mensaje    Asunto: Responder citando

Una forma que me parece mas sencilla:
- Evento OnDrawCell del TStringGrid
Código:
TStringGrid* sg = static_cast<TStringGrid*>(Sender);
sg->Canvas->FillRect(Rect);
InflateRect(&Rect, -2, -2); // Margenes
DrawText(sg->Canvas->Handle, sg->Cells[ACol][ARow].c_str(),
         -1, &Rect, DT_EDITCONTROL | DT_WORDBREAK);


Y para provocar un salto de línea al rellenarlas usamos "\r\n", por ejemplo:
Código:
StringGrid1->Cells[1][1] = "Primera línea\r\nSegunda\r\nTercera";


Y cuando editas manualmente la celda puedes usar CTRL+ENTER para provocar un salto de línea.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

¿Ke tal si la segunda línea de texto pudiéramos pintarla de un color diferente a la primera? Es sólo una sugerencia Wink .
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Hola amigos, Como hago para que al apretar un botón, este me lleve a una determinada linea en una celda del String Grid?

por ejemplo:

Código:

StringGrid1->Cells[1][1] = "Primera línea\r\nSegunda\r\nTercera";
Focus()->Linea(2); // Segunda;


Gracias.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Puedes probar con la siguiente función:
Código:
void SelectGridLine(TStringGrid* sg, int col, int row, int line)
{
    sg->Col = col;
    sg->Row = row;
    sg->EditorMode = true;
    sg->SetFocus();
    if (sg->ComponentCount > 0)
    {
        TInplaceEdit* ed = static_cast<TInplaceEdit*>(sg->Components[0]);
        ed->SelStart = ed->Perform(EM_LINEINDEX, line - 1, 0);
        ed->SelLength = ed->Perform(EM_LINEINDEX, line, 0) - ed->SelStart - 2;
    }
}

Un ejemplo de uso:
Código:
SelectGridLine(
    StringGrid1,   // Nombre del TStringGrid al que nos referimos
    1,             // Columna
    2,             // Fila
    2              // Línea dentro de la celda
);
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Very Happy Very Happy Very Happy Muchiiiisimas gracias Very Happy Very Happy Very Happy
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.