Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Problemas con Dbnavigator (https://www.clubdelphi.com/foros/showthread.php?t=96232)

Badillo 16-05-2023 18:55:50

Problemas con Dbnavigator
 
1 Archivos Adjunto(s)
Saludos, Necsito ayuda con el componente dbnavigator.

Heredé del componente y le cargué nuevas imágenes desde un fichero de recursos, pero cuando le paso el ratón por encima a cualquier botón habilitado me le deja una sombra semitransparente azul claro y no me lo repinta nuevamente.

Asi es como cargo las imágenes por si puede servir de ayuda

Código Delphi [-]
procedure TTestDBNavigator.InitButtons;
var
  I: TNavigateBtn;
  Resname: array [0 .. 40] of char;
begin
  if (ParentCtl3d) then
    for I := Low(Buttons) to High(Buttons) do
    begin
      Buttons[i].Glyph := nil;
      Buttons[i].Flat := True;
      Buttons[i].NumGlyphs := 2;
      Buttons[i].Glyph.Handle := LoadBitMap(Hinstance,
        StrFmt(Resname, '%s', [BtnTypeName[i]]));
      Buttons[i].AlignWithMargins := True;
      Buttons[i].Flat := True;
      Buttons[i].Transparent := True;
      Buttons[i].Height := FButtonHeight;
      Buttons[i].Width := FButtonWidth;
    end;
end;

Neftali [Germán.Estévez] 17-05-2023 09:01:07

No se si el IniButtons es el lugar correcto para cargar las imágenes.
Revisando el componentes TDBNavigator, vero que las imágenes se cargan desde recursos con el procedimiento.

Código Delphi [-]
procedure TDBNavigator.SetButtonGlyph(Index: TNavigateBtn);

Y el índice admite los valores de os distintos botones:
Código Delphi [-]
  TNavigateBtn = (nbFirst, nbPrior, nbNext, nbLast,
                  nbInsert, nbDelete, nbEdit, nbPost, nbCancel, nbRefresh, nbApplyUpdates,
                  nbCancelUpdates);

Además este procedimiento está definido como virtual, por lo tanto puedes redefirnirlo (con override), por lo que me parece el correcto para hacerlo.

Si en tu componente defines un cóidigo de este estilo:

Código Delphi [-]
procedure TTestDBNavigator.SetButtonGlyph(Index: TNavigateBtn);
begin
  inherited;
  case Index of
    nbFirst: Buttons[Index].Glyph.LoadFromFile('c:\ProyectosDelphi\Custom DBNavigator\First.bmp');
    nbPrior: Buttons[Index].Glyph.LoadFromFile('c:\ProyectosDelphi\Custom DBNavigator\Prior.bmp');
    nbNext:  Buttons[Index].Glyph.LoadFromFile('c:\ProyectosDelphi\Custom DBNavigator\Next.bmp');

    //...
  end;
end;

Funciona sin problemas y el comportamiento es el esperado. En este caso sólo está la carga de los tres primeros botones para el ejemplo.
Así es como se ven. Los botones son "feos",pero el tema de las sombras funciona ok.



Badillo 17-05-2023 15:09:58

Muchas gracias por las aclaraciones
 
Muchas gracias por las aclaraciones, voy a probar ahora y le comento, una vez más muchas gracias Neftali.

Badillo 17-05-2023 19:18:50

Gracias, Neftali funcionó bien
 
Muchas gracias por su ayuda.^\||/


La franja horaria es GMT +2. Ahora son las 22:07:35.

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