Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-05-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Centrar texto StringGrid

Hola a todos, antes de nada decir q he mirado en este foro pero no consigo aclararme con la información que busco, en concreto en este thread:
http://www.clubdelphi.com/foros/show...ght=stringgrid

Mi intención es a partir de un evento en un boton, recoger una serie de información y mostrarla en mi StringGrid. Parace que la información la recojo bien y se muestra correctamente, pero me sale el texto justificado a la izquierda.

Tras mucho pelearme he conseguido que el texto del nombre de cada columna salga en negrita, pero ahora me gustaría que todo el texto del grid apareciese centrado.

Alguien me podría explicar (si es en codigo se agradece), como deberia hacerlo en el evento drawcell?

Muchas gracias por anticipado, cualquier respuesta se agradece debido a los cabezazos que llevo ya... jeje

Un saludo!
Responder Con Cita
  #2  
Antiguo 06-05-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Precisamente en ese hilo respondía a la misma pregunta que tu haces. El evento OnDrawCell expuesto se encarga de centrar los textos, sólo tienes que colocar ese código y rellenar las celdas con tus datos sin preocuparte de nada mas.

No termino de entender bien cual es tu duda.

Saludos.
Responder Con Cita
  #3  
Antiguo 06-05-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
pues que he probado con muchos codigos y no consigo nada. Con ese en concreto copiando y pegando tal cual me salta el siguiente error en la línea:

Código:
   char *Cadena = grid->Cells[ACol][ARow].c_str();
[BCC32 Error] MainForm.cpp(1013): E2034 Cannot convert 'wchar_t *' to 'char *'

Uso C++ Builder 2010 y en concreto el codigo compreto es:

Código:
  TStringGrid *grid = dynamic_cast<TStringGrid*>(Sender);
   HDC dc = grid->Canvas->Handle;
   char *Cadena = grid->Cells[ACol][ARow].c_str();


    StrGridTique->Canvas->Font = StrGridTique->Font;

    // Ponemos el título en negrita
    if (ACol>=0 && State.Contains(gdFixed)){
        StrGridTique->Canvas->Font->Style = TFontStyles()<< fsBold;
    }

    const AnsiString Conceptos[3]= {"Cantidad","Precio ud","Precio"};
    if(ARow==0 && ACol==0){
        StrGridTique->Canvas->TextOutA(Rect.Left, Rect.Top,"Producto");
        }
    else if(ARow==0){
        StrGridTique->Canvas->TextOutA(Rect.Left, Rect.Top, Conceptos[ACol-1] );
    }

   grid->Canvas->Brush->Style = bsClear;
   DrawText(dc, Cadena, strlen(Cadena), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE );

Un saludo!
Responder Con Cita
  #4  
Antiguo 06-05-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El problema es que la versión 2010 usa Unicode.

Debes usar la versión unicode de la API DrawText: DrawTextW (el copmpilador lo hace automáticamente) y cambiar la línea
Código:
char *Cadena = grid->Cells[ACol][ARow].c_str();
a
Código:
wchar_t *Cadena = grid->Cells[ACol][ARow].c_str();
Saludos.
Responder Con Cita
  #5  
Antiguo 07-05-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Hola, perdona x no contestar antes pero he estado muy liado, gracias por la respuesta.

Tras hacer ese cambio ahora me pasa lo siguiente:


Error 1:Cannot convert wchar_t *' to const char *
Error 2: Type mismatch in parameter '__s' (wanted 'const char *', got 'wchar_t *')

en la 2ª línea:

Código:
grid->Canvas->Brush->Style = bsClear;
   DrawText(dc, Cadena, strlen(Cadena), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE );

Un saludo!
Responder Con Cita
  #6  
Antiguo 07-05-2011
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Te explico:

Las APIs de Windows Que usan cadenas, tienen dos versiones, la terminada en A y la terminada en W. Para DrawText tenemos internamente DrawTextA y DrawTextW. Lo normal es que el compilador escoja ya apropiada según si usa Unicode (W) o no (A).

Usa la versión DrawTextW;
Código:
DrawTextW(dc, Cadena, wcslen(Cadena), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE );
o bien:

Código:
DrawTextW(grid->Canvas->Handle, grid->Cells[ACol][ARow].c_str(), grid->Cells[ACol][ARow].Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);

Saludos.
Responder Con Cita
Respuesta



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
Centrar imagen que esta en las celdas de un StringGrid gulder Varios 4 11-12-2008 19:48:02
Centrar texto en un memo Tilk Varios 1 12-11-2008 01:19:13
Centrar el texto de un edit Sayuri Varios 2 19-03-2008 21:28:59
Centrar el texto de una columna en el componente DrawGrid Aprendiendo OOP 0 30-09-2004 00:55:00
Centrar bmp en celda de stringgrid mosorio OOP 2 31-03-2004 06:15:27


La franja horaria es GMT +2. Ahora son las 10:33:42.


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
Copyright 1996-2007 Club Delphi