![]() |
![]() |
| 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
|
||||
|
||||
|
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. |
|
#2
|
||||
|
||||
|
aams01 te está dando parte de la solución.
Piensa que estás escribiendo textos en las rejillas dos veces, una centrado con DrawTextW y la otra a la izquierda con TextOutA. Lo propio es añadir los nuevos textos en otro procedimiento, de carga o en todo caso, con DrawTextW para poder centrarlos. Pero aún te falta otra cosa. La VCL escribe por su cuenta las celdas a la izquierda. Si quieres redibujarlas debes borrarlas previamente y luego reescribirlas. Código:
void __fastcall TForm1::StringGrid1DrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
TStringGrid *grid = dynamic_cast<TStringGrid*>(Sender);
InflateRect(&Rect, -1, -1);
// Ajusto los colores de las celdas a las preestablecidos
if(State.Contains(gdFixed))
grid->Canvas->Brush->Color = grid->FixedColor;
else
grid->Canvas->Brush->Color = grid->Color;
// Borro las celdas
grid->Canvas->FillRect(Rect);
DrawText(grid->Canvas->Handle, grid->Cells[ACol][ARow].c_str(), grid->Cells[ACol][ARow].Length(), &Rect, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
// Restauro el Rect que se pasó por referencia, no por valor...
InflateRect(&Rect, 1, 1);
}
Última edición por escafandra fecha: 08-05-2011 a las 00:51:00. |
|
#3
|
|||
|
|||
|
Hola a ambos, muchisimas gracias por las respuestas.
aams01, esa parte del código es porque en la propiedad del StringGrid Drawing Style uso gdsGradient Cita:
He probado cambiando el Style e incluso poniendo clNone, pero no consigo que salga con efecto degradado..., se podría aplicar al Canvas el estilo gdsGradient? o al menos que sea transparente? Muchisimas gracias! , Un saludo! |
|
#4
|
|||
|
|||
|
Hola de nuevo, ¿sabeis si existe alguna forma de detectar cuando se entra 2 veces en la misma celda?, me explico.
Resulta que cuando entro una celda la detecto con la propiedad OnSelectCell, recojo la fila en donde se ha hecho click y así actualizo los datos cuando se introduce un nuevo valor. Si pulso un boton actualizo de nuevo el StringGrid y si me da por hacer click otra vez en la misma celda de antes, como no la detecta no modifico los datos que corresponden. He probado con eventos OnMouseEnter/Leave, OnGetEditText, etc..., pero no consigo que me funcionen ¿Existe alguna manera de coger y mover en ejecución la celda seleccionada? Se me ocurre que de esta forma si siempre tras pulsar el boton selecciono la Cells[0][0], siempre detectare cuando hago click en la misma celda. Alguna idea??, muchas gracias |
|
#5
|
||||
|
||||
|
Puedes escribir una función que pinte un rectángulo con un degradado para sustituir a grid->Canvas->FillRect(Rect);
Cita:
Código:
void __fastcall TForm1::StringGrid1MouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
int ACol, ARow;
StringGrid1->MouseToCell(X, Y, ACol, ARow);
//..............
// Tu código....
}
|
|
#6
|
||||
|
||||
|
Cita:
Código:
StrGridTique->Col=0; StrGridTique->Row=0; No obstante toy seguro de que este codigo te podra servir para otra cosa. ![]()
__________________
El Software es como el Sexo, si es de gratis es Mejor |
|
#7
|
|||
|
|||
|
Gracias a ambos por las respuestas ya que me han sido de gran ayuda.
Ahora estoy mirando bugs e intentar corregirlos para mejorar la estabilidad del programa y uno que me surge como consecuencia directa de ir incorporando estos cambios es que me he dado cuenta que cuando se queda marcada una de las celdas el texto aparece dos veces una a la izquierda y otra vez centrado y cuando hago clic en otra celda todo vuelve a la normalidad. Tras diversas pruebas, me he dado cuenta que si no hay ninguna celda marcada parece q todo va bien. Comento este problema pq mi código de repente se vuelve inestable cuando pasa esto, lo que pasa es que tendré que mirarlo con más detenimiento para sacar una conclusión clara. Como siempre, pinto con el evento ondrawcell en funcion de unas banderas que activo desde otras secciones del codigo. Alguna idea de pq puede pasar esto? Un saludo! |
|
#8
|
||||
|
||||
|
Hola como mencionas si solo pasa eso cuando dejas seleccionada una celda por que no quitas el focus de ese componente y lo pasas ya sea a un botón o a un edit.
El problema creo es por q tienes el stringrid en modo edición. Si el stringrid solo lo quieres para mostrar y jalar información yo diría que le quites la opción de editar, ya q te ahorraras tiempo en validar
__________________
El Software es como el Sexo, si es de gratis es Mejor |
![]() |
| 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 |
|