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 08-05-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
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:

Buno yo tengo unas preguntas para que utilizas
Código:
StrGridTique->Canvas->Brush->Style = bsClear;
Y al aplicar el código que has aportado con los cambios de escafranda veo que las celdas fijas se ponen del color que hay puesto en la propiedad fixedColor...

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!
Responder Con Cita
  #2  
Antiguo 08-05-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 08-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
Cita:
Empezado por mizzard Ver Mensaje
...se podría aplicar al Canvas el estilo gdsGradient?...
Puedes escribir una función que pinte un rectángulo con un degradado para sustituir a grid->Canvas->FillRect(Rect);

Cita:
Empezado por mizzard Ver Mensaje
...¿sabeis si existe alguna forma de detectar cuando se entra 2 veces en la misma celda?...
Yo usaría algo como esto:
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....
}
Saludos.
Responder Con Cita
  #4  
Antiguo 08-05-2011
Avatar de aams01
aams01 aams01 is offline
Miembro
 
Registrado: ago 2010
Posts: 44
Poder: 0
aams01 Va por buen camino
Cita:
Empezado por mizzard Ver Mensaje
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.
Para seleccionar un selda es con lo siguiente reucuerda que un StringGrid o DBGrid contiene renglones y columnas

Código:
StrGridTique->Col=0;
StrGridTique->Row=0;
Aunq me agrada mas el codigo de escafandra.
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
Responder Con Cita
  #5  
Antiguo 10-05-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
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!
Responder Con Cita
  #6  
Antiguo 10-05-2011
Avatar de aams01
aams01 aams01 is offline
Miembro
 
Registrado: ago 2010
Posts: 44
Poder: 0
aams01 Va por buen camino
Post

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
Responder Con Cita
  #7  
Antiguo 10-05-2011
mizzard mizzard is offline
Miembro
NULL
 
Registrado: feb 2011
Posts: 100
Poder: 14
mizzard Va por buen camino
Hola aams01,

Al final tras muchos intentos consigo quitar el foco, pero estableciéndoselo a otro elemento no funciona. Buscando por el foro he encontrado este que sí que funciona (aporte de escafandra):

Código:
    TGridRect NoRect;
    NoRect.Top = NoRect.Left = NoRect.Right = NoRect.Bottom = -1;
    frmMain->StrGridTique->Selection=NoRect;
El caso es que funciona, pero nuevamente vuelvo a tener problemas. En mi StringGrid cambio a la opcion de editar cuando hago clic en una columna, en el resto de casos deshabilito la opcion de editar (esto parece que funciona bien).

El error en concreto sale cuando al terminar de realizar rellenar el StringGrid y de realizar las operaciones pertinentes (únicamente cuando edito un dato en una celda, si no lo edito no sale el error), quito la celda seleccionada, la limpio de información y entonces aparece un mensaje de error, a continuación muestro el codigo y cuándo aparece el mensaje:

Cuando termino de operar con el StringGrid... (hasta aquí sin problemas) hago lo siguiente:

Código:
quitarFocoGrid(); // función que contiene el código de arriba

// Limpiamos el Grid de información
// RowCount-2 porque no me interesa la fila fija ni la que se crea despues de la que contiene informacion (esto probado a parte funciona)
        for (int cont = frmMain->StrGridTique->RowCount-2; cont > 0; cont--) {
            frmMain->StrGridTique->Rows[cont]->Clear();
            frmMain->StrGridTique->RowCount=frmMain->StrGridTique->RowCount-1;
        }
        frmMain->StrGridTique->Cells[0][0]="";
        frmMain->StrGridTique->Cells[1][0]="";
        frmMain->StrGridTique->Cells[2][0]="";
        frmMain->StrGridTique->Cells[3][0]="";

// Mostramos un mensaje informativo
Application->MessageBoxA(L"Puede retirar la tarjeta.",L"Información",MB_OK+ MB_ICONINFORMATION);
Y cuando le doy a aceptar sale el siguiente mensaje de error:

EListError with message 'List indexof bounds (-1)'

He probado a poner la de quitar el foco al final del borrado de la tabla y pasa lo mismo pero el mensaje sale en otra parte del código, por lo que el problema es el mismo.

Alguna idea de cómo puedo hacer el borrado y quitar la fila seleccionada (o al revés) sin que dé este problema??

Muchas gracias y un saludo!

Última edición por mizzard fecha: 10-05-2011 a las 11:47:44.
Responder Con Cita
  #8  
Antiguo 10-05-2011
Avatar de aams01
aams01 aams01 is offline
Miembro
 
Registrado: ago 2010
Posts: 44
Poder: 0
aams01 Va por buen camino
Hola por curiosidad solo cambia
Código:
    Application->MessageBoxA(L"Puede retirar la tarjeta.",L"Información",MB_OK + MB_ICONINFORMATION);
por
Código:
Application->MessageBoxA(L"Puede retirar la tarjeta.",L"Información",MB_OK| MB_ICONINFORMATION);
y con respecto al error que te manda probe tu codigo y no marca ningun error
__________________
El Software es como el Sexo, si es de gratis es Mejor
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 19:13:08.


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