![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
|||
|
|||
|
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(); 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! |
|
#3
|
||||
|
||||
|
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(); Código:
wchar_t *Cadena = grid->Cells[ACol][ARow].c_str(); |
|
#4
|
|||
|
|||
|
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! |
|
#5
|
||||
|
||||
|
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 ); 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. |
|
#6
|
|||
|
|||
|
Muchisimas gracias por la respuesta, pero... sigo teneniendo un problema ...
![]() Resulta q el texto se centra bien, pero me sale dos veces, a la izquierda y centrado ![]() Lo que me gustaría es que se viera todo centrado tanto en la fila 0 que es fija (y en negrita) como en todos los campos. Yo lo que hago es a partir de una serie de botones, recojo unos campos y hago que se muestren en el string grid usando: Código:
StrGridTique->Cells[0][posFila]=DBText->Caption; Y luego en el evento hago: Código:
void __fastcall TfrmMain::StrGridTiqueDrawCell(TObject *Sender, int ACol, int ARow,
TRect &Rect, TGridDrawState State)
{
TStringGrid *grid = dynamic_cast<TStringGrid*>(Sender);
HDC dc = grid->Canvas->Handle;
wchar_t *Cadena = grid->Cells[ACol][ARow].c_str();
grid->Canvas->Brush->Style = bsClear;
DrawTextW(grid->Canvas->Handle, grid->Cells[ACol][ARow].c_str(), grid->Cells[ACol][ARow].Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
StrGridTique->Canvas->Font = StrGridTique->Font;
// Ponemos el título en negrita
if (ACol>=0 && State.Contains(gdFixed)){
StrGridTique->Canvas->Font->Style = TFontStyles()<< fsBold;
}
// Preparamos la rejilla con el tique
const AnsiString Conceptos[3]= {"Precio unitario","Cantidad","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] );
}
else if (ARow>0){
tposFila=ARow;
bEditarCantidad=true;
}
}
Uff perdona por mi insistencia, pero es que voy dando tumbos constantemente, veo que la solución está cerca pero no consigo llegar, jeje Muchísimas gracias por adelantado. Un saludo! |
|
#7
|
||||
|
||||
|
Hola soy re-novato espero comprension si es que me equivoco.
Por que no desde que se active la forma pones los titulos de la rejilla en cuanto se active la forma. Código:
void __fastcall TTfrmMain::FormActivate(TObject *Sender)
{
StrGridTique->Cells[0][0]="Precio unitario";
StrGridTique->Cells[1][0]="Cantidad";
StrGridTique->Cells[2][0]="Precio";
}
Código:
void __fastcall TTfrmMain::StrGridTiqueDrawCell(TObject *Sender, int ACol, int ARow, TRect &Rect,
TGridDrawState State)
{
StrGridTique->Canvas->Brush->Color = clBtnFace; // Color por default,
// cambialo al que gustes, Esto es para que no te empalme la informacion
StrGridTique->Canvas->Rectangle(Rect);
InflateRect(&Rect, -2, -2);
if (ARow==0) {
StrGridTique->Canvas->Font->Style = TFontStyles()<< fsBold;
}
DrawTextW(StrGridTique->Canvas->Handle, StrGridTique->Cells[ACol][ARow].c_str(), StrGridTique->Cells[ACol][ARow].Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
if (ARow>0){
tposFila=ARow;
bEditarCantidad=true;
}
}
Buno yo tengo unas preguntas para que utilizas Código:
StrGridTique->Canvas->Brush->Style = bsClear;
__________________
El Software es como el Sexo, si es de gratis es Mejor Última edición por aams01 fecha: 07-05-2011 a las 22:59:09. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|