Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-02-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Invertir funcionamiento botones TDBNavigator

Hola compañeros, quería saber si se puede invertir el funcionamiento de los botones de un TDBNavigator en Delphi 5.

Lo que quiero es intercambiar el funcionamiento de nbFirst con el de nbLast y el de nbPrior con nbNext. Lo intente capturando el boton pulsado en el evento beforeAction, pero el problema está en que si nos encontramos en uno de los extremos (primero o último registros), el par nbFirst-nbPrior y el nbLast-nbNext aparecen desabilitados según corresponda y me quedo bloqueado en un registro.

También pensé en crear un componente heredado de TDBNavigator, pero si puedo hacerlo de otra manera y evitar esto lo prefiero.

¿Se les ocurre alguna idea de como realizarlo?

Muchas gracias por vuestra ayuda.

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #2  
Antiguo 02-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Hola Ivanzinho,
Extraño requerimiento.

¿Porqué es necesario hacer eso? ¿Lo dices más por una cuestión de alguna "estética" de los botones?
¿Necesariamente debes usar un TNavigator?
Porque la solución "pobre" Y simple es poner tantos botones como sean necesarios y que llame al evento adecuado del TNavigator (estando este ocultado).

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #3  
Antiguo 02-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
creo que a fin de cuentas seria mejor derivar del componente y cambiarle el comportamiento, es menos trabajo
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #4  
Antiguo 02-02-2008
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Poder: 25
Delphius Va camino a la fama
Puede que la solución de Eduardo si se puede llegar a cabo. Al menos asi lo estoy entiendo ahora... me acabo de fijar en la VCL y los métodos necesarios para alterar están en la sección protected por lo que en teoria no habría problemas.

Yo estaba pensando en que serían privados.

Saludos,
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita
  #5  
Antiguo 02-02-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por Delphius
Hola Ivanzinho,
Extraño requerimiento.
Te doy la razón.

Cita:
Empezado por Delphius
¿Porqué es necesario hacer eso? ¿Lo dices más por una cuestión de alguna "estética" de los botones?
La cuestión es que me encargaron un modulo para una aplicación. Este modulo permitirá a los usuarios introducir una serie de registros y sus líneas de detalle.

Cuando los usuarios acceden a la pantalla se deben cargar todos los registros no tratados y los introducidos en el último mes, pueden ser unos 1000 registros, y se visualice el último registro introducido.

Intenté convencerlos de que eso me parecía una tontería, ya que 1000 registros no los van a utilizar, utilizarán a lo sumo 10 y el modulo incluye la posibilidad de realizar filtros que permiten localizar facilemente 1 registro o un grupo de registros en base a unas condiciones, pero me dijeron que no, que el resto de modulos de la aplicación tenían ese funcionamiento y que lo querían así.

Por lo que decidí realizar la consulta ordenada descendentemente por número de registro, para evitar tener que hacer un last y que así solo se realice el fetch de un registro.

El problema de esto es que si queremos ir al registro anterior debemos pulsar el boton nbNext ya que están ordenados descendentemente, y en el resto de la aplicación nbNext te lleva al siguiente y nbPrior al anterior. Por esto es por lo que busco este funcionamiento del TDBNavigator. Espero haberme explicado .

Cita:
Empezado por Delphius
¿Necesariamente debes usar un TNavigator?
Si puedo evitar componentes de terceros lo prefiero, ya que no se usan en ningún otro lado de la aplicación.

Cita:
Empezado por Delphius
Porque la solución "pobre" Y simple es poner tantos botones como sean necesarios y que llame al evento adecuado del TNavigator (estando este ocultado).
Pensé en ello.

Un saúdo y muchas gracias, Delphius, por responder
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #6  
Antiguo 02-02-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por eduarcol
creo que a fin de cuentas seria mejor derivar del componente y cambiarle el comportamiento, es menos trabajo
Cita:
Empezado por Delphius
Puede que la solución de Eduardo si se puede llegar a cabo. Al menos asi lo estoy entiendo ahora... me acabo de fijar en la VCL y los métodos necesarios para alterar están en la sección protected por lo que en teoria no habría problemas.

Yo estaba pensando en que serían privados.

Saludos,

Sí, si no tengo otra solución lo haré así, pero de principio me da algo de miedo
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #7  
Antiguo 02-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por Ivanzinho Ver Mensaje
Sí, si no tengo otra solución lo haré así, pero de principio me da algo de miedo
Hombre y cual es el miedo, si el TDBNavigator es uno solo y en el club somos muchos
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #8  
Antiguo 02-02-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Cita:
Empezado por eduarcol
Hombre y cual es el miedo, si el TDBNavigator es uno solo y en el club somos muchos
Gracias Eduardo, esto anima a cuaquiera a ponerse manos a la obra.

Lo dejo aquí por hoy, que es sabado por la tarde y me está esperando mi novia (no puedo tardar ). Si mañana no tengo otra respuesta ya saben que camino van a llevar mis próximas intervenciones en el foro.

Muchas gracias por sus aportes, uno se siente comodo con gente así.

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)

Última edición por Ivanzinho fecha: 02-02-2008 a las 16:54:04.
Responder Con Cita
  #9  
Antiguo 02-02-2008
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 25
eduarcol Va por buen camino
Cita:
Empezado por Ivanzinho Ver Mensaje
Gracias Eduardo, esto anima a cuaquiera a ponerse manos a la obra.

Lo dejo aquí por hoy, que es sabado por la tarde y me está esperando mi novia (no puedo tardar ). Si mañana no tengo otra respuesta ya saben que camino van a llevar mis próxima intervenciones en le foro.

Muchas gracias por sus aportes, uno se siente comodo con gente así.

Un saúdo.
Ok, que disfrutes la tarde
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #10  
Antiguo 03-02-2008
Avatar de Al González
[Al González] Al González is offline
In .pas since 1991
 
Registrado: may 2003
Posts: 5.604
Poder: 30
Al González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en brutoAl González Es un diamante en bruto
Smile

¡Hola!

Entiendo la situación, una flecha "->" es ir al "siguiente hacia arriba" y una flecha "<-" simboliza ir al "anterior hacia abajo".

Si quieres hacerlo con TDBNavigator, el reto sería estudiar esa clase, en especial sus métodos virtuales/mensaje, y crear una clase derivada que cambie algunos aspectos de su comportamiento.

Antes de llegar a eso, se me ocurre que si el único problema es causado por las propiedades BOF y EOF del conjunto de datos, cuando éstas adquieren un valor de True, y no te importaría que en ningún momento tuviesen ese valor, tal vez podría emplearse un truco de "reposicionamiento" del conjunto de datos para que nunca obtenga de forma permanente los estados BOF y EOF.

Desde luego, la derivación del componente parece ser la solución más elegante, si es que la estructura de la clase lo facilita. Sería cosa de echarle un vistazo...

Seguimos en contacto.

Al González.

Última edición por Al González fecha: 03-02-2008 a las 05:24:20.
Responder Con Cita
  #11  
Antiguo 03-02-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Si el intercambio de acciones ya lo tienes resuelto con el BeforeAction, basta intercambiar el estado de los botones. Esto lo puedes hacer en el evento OnDataChange del DataSource asociado al DBNavigator:

Código Delphi [-]
procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
var
  ButtonEnabled: Boolean;

begin
  with DBNavigator1 do
  begin
    // intercambia estado entre prior y next
    ButtonEnabled := Buttons[nbPrior].Enabled;
    Buttons[nbPrior].Enabled := Buttons[nbNext].Enabled;
    Buttons[nbNext].Enabled := ButtonEnabled;

    // intercambia estado entre first y last
    ButtonEnabled := Buttons[nbFirst].Enabled;
    Buttons[nbFirst].Enabled := Buttons[nbLast].Enabled;
    Buttons[nbLast].Enabled := ButtonEnabled;
  end;
end;

El único impedimento aquí, es que Buttons es una propiedad protegida del DBNavigator, pero puedes "desprotegerla" fácilmente añadiendo esta declaración antes de tu formulario:

Código Delphi [-]
type
  TDBNavigator = class(DBCtrls.TDBNavigator);

Bye
Responder Con Cita
  #12  
Antiguo 04-02-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Efectivamente, con la propuesta de keyboy consigo lo deseado, por lo que para ir tirando me va a valer. Pero mi intención es derivar el componente ya que es una opción que no descarto utilizar en otros modulos de la aplicación.

Muchas gracias a todos por vuestra ayuda.

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #13  
Antiguo 04-02-2008
keyboy keyboy is offline
Miembro
 
Registrado: oct 2004
Posts: 367
Poder: 20
keyboy Va por buen camino
Veo un poco difícil que pueda derivarse un componente del TDBNavigator para lograr este comportamiento. Los métodos involucrados en el cambio de estado del dataset (DataChanged, EditingChanged y ActiveChanged), si bien son métodos protegidos, no son virtuales, por lo que no pueden redefinirse.

Bye
Responder Con Cita
  #14  
Antiguo 04-02-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
Sí, ya me había fijado. En principio a mi sólo me interesaba modificar el DataChanged, pero me encontré con ese problema.

Al final lo dejé como me indicaste anteriormente incluyendo en el formcreate el siguiente código :
Código Delphi [-]
procedure TFMovRec.FormCreate(Sender: TObject);
var
  Button: TNavigateBtn;
begin

.......

  with DBNavigator do
    begin
      Button := Buttons[nbPrior].Index;
      Buttons[nbPrior].Index := Buttons[nbNext].Index;
      Buttons[nbNext].Index := Button;
      Button := Buttons[nbFirst].Index;
      Buttons[nbFirst].Index := Buttons[nbLast].Index;
      Buttons[nbLast].Index := Button;
    end;

......

end;

Así obtengo el funcionamiento requerido y por ahora me vale perfectamente.

Un saúdo y nuevamente gracias.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
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
TDBNavigator emeritos Conexión con bases de datos 8 04-09-2007 11:52:30
Invertir colores del texto de un richedit viveba OOP 2 27-05-2007 16:38:26
invertir columnas por filas en dbgrid emeceuy Varios 5 10-10-2005 05:30:54
Invertir un color Keiso API de Windows 1 20-08-2004 02:05:27
invertir una tabla ebeltete SQL 8 23-05-2003 01:10:59


La franja horaria es GMT +2. Ahora son las 05:20:47.


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