Botões se sobrepondo no DBNavigator

Delphi

07/05/2009

Boa tarde turma, tudo bem?
Gostaria de saber se alguém já pegou algum caso de ao trocar a visibilidade dos botões de um DBNavigator sucessivamente acontece de eles parecerem estar se sobrepondo?

Notei que isso acontece somente com o XPManifest e ao trocar de tela e voltar para a que possui o DBNavigator os botões são pintados corretamente.
PS: Já tentei utilizar os comandos Repaint, Update e Invalidate dos componentes.

Segue um exemplo de como simular o que foi mencionado:

Unit1.pas:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, DB, DBClient, ExtCtrls, DBCtrls;

type
  TForm1 = class(TForm)
    DBNavigator1: TDBNavigator;
    DataSource1: TDataSource;
    ClientDataSet1: TClientDataSet;
    DBGrid1: TDBGrid;
    procedure FormCreate(Sender: TObject);
    procedure DataSource1DataChange(Sender: TObject; Field: TField);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField);
begin
  if ((ClientDataSet1.RecNo mod 2) =0) then
    DBNavigator1.VisibleButtons := [nbFirst,nbPrior,nbNext,nbLast,nbInsert,nbDelete,nbEdit,nbPost,nbCancel,nbRefresh]
  else
    DBNavigator1.VisibleButtons := [nbFirst,nbPrior,nbNext,nbLast,nbInsert,nbDelete,nbPost,nbCancel,nbRefresh];
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  I: Integer;

begin
  ClientDataSet1.FieldDefs.Add(´TESTE´, ftString, 4);
  ClientDataSet1.CreateDataSet;
  ClientDataSet1.Open;

  for I := 0 to 10 do
  begin
    ClientDataSet1.Insert;
    ClientDataSet1.FieldByName(´TESTE´).AsString := IntToStr(I);
    ClientDataSet1.Post;
  end; //for
end;

end.


Unit1.dfm:
object Form1: TForm1
  Left = 0
  Top = 0
  Caption = ´Form1´
  ClientHeight = 286
  ClientWidth = 426
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = ´Tahoma´
  Font.Style = []
  OldCreateOrder = False
  OnCreate = FormCreate
  PixelsPerInch = 96
  TextHeight = 13
  object DBNavigator1: TDBNavigator
    Left = 112
    Top = 160
    Width = 240
    Height = 25
    DataSource = DataSource1
    TabOrder = 0
  end
  object DBGrid1: TDBGrid
    Left = 64
    Top = 26
    Width = 320
    Height = 120
    DataSource = DataSource1
    TabOrder = 1
    TitleFont.Charset = DEFAULT_CHARSET
    TitleFont.Color = clWindowText
    TitleFont.Height = -11
    TitleFont.Name = ´Tahoma´
    TitleFont.Style = []
  end
  object DataSource1: TDataSource
    DataSet = ClientDataSet1
    OnDataChange = DataSource1DataChange
    Left = 224
    Top = 208
  end
  object ClientDataSet1: TClientDataSet
    Aggregates = <>
    FieldDefs = <>
    IndexDefs = <>
    Params = <>
    StoreDefs = True
    Left = 184
    Top = 208
  end
end


Alguém já passou por isso? Tem alguma idéia de como solucionar? Alguma dica do que pode ser?

Obrigado.


Woinch

Woinch

Curtidas 0

Respostas

Woinch

Woinch

07/05/2009

Acabo de encontrar uma solução.
Descobri que esse problema estava acontecendo pela propriedade Transparent dos botões utilizados no DBNavigator que estavam marcadas como True. Portanto sobrescrevi o Construtor do DBNavigator para ter acesso a esses botões a alterar a propriedade Transparent dos mesmos para False.

Qualquer dúvida favor entrar em contato.


GOSTEI 0
POSTAR