| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
mlara Cdt

Registrado: 22 Jul 2004Mensajes: 1
|
Publicado: Jue 22 Jul, 2004 11:34 am Asunto: Varias lineas en StringGrid |
|
|
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 |
|
 |
mopa Cmdr

Registrado: 29 Jun 2004Mensajes: 145
|
Publicado: Vie 23 Jul, 2004 10:01 am Asunto: |
|
|
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 |
|
 |
Invitado
|
Publicado: Vie 23 Jul, 2004 4:35 pm Asunto: |
|
|
Así va bien!!!
Si consiguo optimizarlo lo publicaré.
MUCHAS GRACIAS,saludos |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Vie 23 Jul, 2004 5:41 pm Asunto: |
|
|
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 |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Mar 24 Ago, 2004 10:11 pm Asunto: |
|
|
¿Ke tal si la segunda línea de texto pudiéramos pintarla de un color diferente a la primera? Es sólo una sugerencia . _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Jue 07 Feb, 2008 6:35 pm Asunto: |
|
|
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 |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Jue 07 Feb, 2008 9:36 pm Asunto: |
|
|
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 |
|
 |
Felip Master

Registrado: 09 Jun 2004Mensajes: 200
|
Publicado: Jue 07 Feb, 2008 10:26 pm Asunto: |
|
|
Muchiiiisimas gracias  |
|
| Volver arriba |
|
 |
|