Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Un DbNavigator muy curioso (https://www.clubdelphi.com/foros/showthread.php?t=58300)

camino 15-07-2008 21:41:15

Un DbNavigator muy curioso
 
Hola amigos estoy trabajando en dos programas en los cuales he usado el componente DbNavigator, y cosa rara, en cada programa se comporta de diferente manera.

Cabe señalar que use un articulo de About.Com: Delphi Programing donde enseña a cambiar loa Glyps y colocar leyenda en cada boton.

El articulo esta aqui: http://delphi.about.com/od/usedbvcl/l/aa090203a.htm

Pues bien la curiosidad del caso es que en un programa la leyenda del boton esta normal, pero en el otro la leyenda esta en negrita por lo que tuve que agrandar el DbNavigator para que se pudiera ver la leyenda completa.

Cabe señalar que solo agregue leyenda sin cambiar los glyps.

Las condiciones de los "Parent Object" son similares.

Agradeceria alguna respuesta.

Gracias.

duilioisola 16-07-2008 12:04:15

Pues lo que debes hacer es enviarnos el código que has modificado, para ver si encontramos algo raro.

Quizá el Font sea diferente.
Has probado a inicializarlo?

Código Delphi [-]
for btn := Low(TNavigateBtn) to High(TNavigateBtn) do
  with THackDBNavigator(Navigator).Buttons[btn] do
  begin
    //from the Captions const array
    Caption := Captions[btn];
{**************************}
    ParentFont := False;
    Font.Name := 'MS Sans Serif';
    Font.Pitch := fpDefault;
    Font.Style := [];
{**************************}
[...]

Nota: Mira también la propiedad ParentFont.
Si es True, tomará el font del componente padre.
Si es False, lo tomará de la inicialización que haga.

camino 17-07-2008 01:17:54

Experimento sin resultado
 
Duilioisola gracias por tu ayuda pero lamentablemente no respondio como se esperaba.

La rutina para modificar el DbNavigator la coloque como un procedimiento en un form que guarda todas las rutinas que uso en mis programas llamado 'RutinasFunciones'. Aqui va:
Código Delphi [-]
procedure SetupHackedNavigator(const Navigator : TDBNavigator);
const   Captions : array[TNavigateBtn] of string =
      ('Primero', 'Anterior', 'Siguiente', 'Ultimo', 'Agrega',
       'Elimina', 'Edita', 'Graba', 'Cancela', 'Refresca');
(*
  Captions : array[TNavigateBtn] of string =
      ('First', 'Prior', 'Next', 'Last', 'Insert',
       'Delete', 'Edit', 'Post', 'Cancel', 'Refresh');

  in Croatia (localized):
  Captions : array[TNavigateBtn] of string =
      ('Prvi', 'Prethodni', 'Slijedeci', 'Zadnji', 'Dodaj',
       'Obrisi', 'Promjeni', 'Spremi', 'Odustani', 'Osvjezi');
*) var   btn : TNavigateBtn; begin   for btn := Low(TNavigateBtn) to High(TNavigateBtn) do   with THackDBNavigator(Navigator).Buttons[btn] do   begin     //from the Captions const array
    Caption := Captions[btn];
    ParentFont := False;
    Font.Name := 'MS Sans Serif';
    Font.Pitch := fpDefault;
    Font.Size := 8;
    Font.Style := [];

{    //the number of images in the Glyph property
    NumGlyphs := 1;
    // Remove the old glyph.
    Glyph := nil;
    // Assign the custom one
    Glyphs.GetBitmap(Integer(btn),Glyph); }     // gylph above text
    Layout := blGlyphTop;

    // explained later
  //  OnMouseUp := HackNavMouseUp;
  end;
end; (*SetupHackedNavigator*)


Esta rutina la llamo desde donde esta el DbNavigator en el "OnCreate" de la
form.

donald shimoda 17-07-2008 01:36:25

Cita:

Empezado por camino (Mensaje 300947)
Código Delphi [-]
procedure SetupHackedNavigator(const Navigator : TDBNavigator);
const   
  Captions : array[TNavigateBtn] of string =
      ('Primero', 'Anterior', 'Siguiente', 'Ultimo', 'Agrega',
       'Elimina', 'Edita', 'Graba', 'Cancela', 'Refresca');
var 
  btn : TNavigateBtn; 
begin   
 for btn := Low(TNavigateBtn) to High(TNavigateBtn) do  
 with THackDBNavigator(Navigator).Buttons[btn] do   
 begin      
    Caption := Captions[btn];
    ParentFont := False;
    Font.Name := 'MS Sans Serif';
    Font.Pitch := fpDefault;
    Font.Size := 8;
    Font.Style := [];
    Layout := blGlyphTop;
  end;
end;


Perdon lo ordene un poco porque no podía leerlo.:o

El código esta correcto. Seguro esta pasando el navigator correcto? No veo donde puede estar el problema. Prueba con este código mas limpio.

Editado: Y muestra la definición de THackDBNavigator.
Saludos.

camino 17-07-2008 14:36:49

Por Fin La Solucion
 
Amigo donald shimoda no se si cometi un error de omision , pero crei (desafortunadamente) que lo que no mencione podria tener la clave del problema,

Pues equivocado.

Para tener una mejor presentacion en mis "Forms" uso los componentes SkinEngine. Ellos me han dado la posibilidad de hacer mas presentables las aplicaciones.

Pues bien experimentando, descubri que el culpable es el objeto de SkinEngine "SkinForm" y los detalles son:

DbNavigator.Caption en negrita con :

SkinForm1.Blending.Enabled := False;

DbNavigator.Caption Normal (como yo quiero) con:

SkinForm1.Blending.Enabled := True;
SkinForm1.Blending.Value := 255;

Lamentablemente no tengo una explicacion de porque sucede esto. Pero es asi.

Gracias.

donald shimoda 17-07-2008 14:55:57

Cita:

Empezado por camino (Mensaje 301022)
Lamentablemente no tengo una explicacion de porque sucede esto. Pero es asi.
Gracias.

Por lo que comentas y sin ver el código del skinengine, esta libreria esta forzando la propiedad a negrita en tu navigator. Ahora, tu no puedes editar el skin para cancelar eso? Si tienes los fuentes de esa librería síguela hasta encontrar donde lo hace y pon alguna variable adicional que te permita evitarlo.

Perdon por la corta ayuda pero sin ver el codigo es todo lo que puedo decirte.:(
Espero te sirva, saludos.

camino 17-07-2008 16:44:30

Gracias por la ayuda
 
Amigo donald shimoda, en honor a la verdad en estos momentos estoy con una gran carga de trabajo, y como ya soluciones el problema creo que voy a dejar la investigacion en los fuentes para mas adelante.

Gracias.

donald shimoda 17-07-2008 16:51:23

Cita:

Empezado por camino (Mensaje 301060)
Amigo donald shimoda, en honor a la verdad en estos momentos estoy con una gran carga de trabajo, y como ya soluciones el problema creo que voy a dejar la investigacion en los fuentes para mas adelante.

Gracias.

Como reza el viejo adagio, si la porquería funciona pa'que tocarla! ;)

Me alegro que lo hayas solucionado.

saludos.

marcoszorrilla 17-07-2008 16:52:57

Me gusta más la sentencia:

"Si funciona no lo arregles".

Porque es menos escatológica.

Un Saludo.

donald shimoda 17-07-2008 16:54:49

Cita:

Empezado por marcoszorrilla (Mensaje 301067)
Me gusta más la sentencia:

"Si funciona no lo arregles".

Porque es menos escatológica.

Un Saludo.

:rolleyes::rolleyes::rolleyes::rolleyes::rolleyes::rolleyes: Y yo que dije?
Estamos totalmente de acuerdo.;)

Saludos.

Philip_ 12-03-2011 16:31:26

hola
 
THackDBNavigator
esto me sale com o no declarado

Casimiro Notevi 12-03-2011 17:16:33

Cita:

Empezado por Philip_ (Mensaje 393343)
THackDBNavigator
esto me sale com o no declarado

Por favor, lee las normas de clubdelphi, gracias por tu colaboración.


La franja horaria es GMT +2. Ahora son las 05:24:06.

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