Botões de navegação

20/12/2005

Desde já agradeço pela ajuda de vocês.

Prezados estou implementando botões de navegação de registros, sendo que minha rotina esta certo + não desabilita o botão no final do registro ou no primeiro registro alguem tem uma rotina mais eficiente vide codigo abaixo:

[b:98f08d26e7]<[/b:98f08d26e7] :

If not(ttbTempSoc.Active)Then
PAbreTabTempSoc(False);
ttbTempSoc.Prior;

If ttbTempSoc.RecNo = 1 Then
tbAnterior.Enabled := False
Else
tbAnterior.Enabled := True;

tbProximo.Enabled := True;
PAtribuiVlrSocios;

[b:98f08d26e7]>[/b:98f08d26e7]:

If not(ttbTempSoc.Active) Then
PAbreTabTempSoc(False);

ttbTempSoc.Next;

If ttbTempSoc.Recno = ttbTempSoc.RecordCount Then
tbProximo.Enabled := False
Else
tbProximo.Enabled := True;

tbAnterior.Enabled := True;
PAtribuiVlrSocios;


Jonasaf

Respostas

21/12/2005

Eixox

[b:007722caa2][i:007722caa2]Não reinvente a roda.[/b:007722caa2][/i:007722caa2]

Se os seus botões de navegação devem ser personalizados, mude o arquivo de recursos que contém a imagem deles.

Se você quer adicionar propriedades, crie um novo componente descendente do DBNavigator é muito mais prático.

O objetivo do Delphi é justamente esse, não crie o que já foi criado - melhore-o.

Abraços[/b]


Responder Citar

21/12/2005

Michael

Concordo com o colega eixox. É mais melhor e mais fácil criar um novo componente derivado de TDBNavigator e adaptá-lo às suas necessidades.

Todavia, vc pode melhorar seu código da seguinte forma:

(...)
tbAnterior.Enabled := not ttbTempSoc.Bof; 
tbProximo.Enabled := not ttbTempSoc.Eof;


[]´s


Responder Citar

21/12/2005

Pain_elemental

com certeza nao seria mais prático criar um componente herdado do TDBNavigator, já que ele está interessado apenas na navegação, e teriam vários overheads inúteis (botoes adicionais, codigo de inicialização para ocultar botões, e várias outras coisas). Se você quer apenas uma parte da funcionalidade suba na hierarquia dos componentes. Se não existir essa parte isolada, então ctrl+c e ctrl+v.

Se você quiser componentizar, você terá que ter uma instância de uma classe herdada do TDataLink para notificar seu componente das alterações, sobreescrevendo o método DataSetChanged para notificar o seu componente que houveram mudanças nos dados.

Se você quiser usar somente em um form, ou em forms herdados desse, você pode colocar no evento AfterScroll do DataSet em questão para verificar se chegou no início ou no final do dataset.

ficaria assim no AfterScroll:

procedure TForm1.ttbTempSocAfterScroll(DataSet: TDataSet);
begin
  tbAnterior.Enabled := not ttbTempSoc.Bof;
  tbProximo.Enabled := not ttbTempSoc.Eof;
end;



Responder Citar

21/12/2005

Michael

Não entendi a resposta do colega. Componentes são feitos para facilitar a vida do programador. Quando um componente tem recursos que não serão utilizados, basta ocultá-los, sejam via código, seja via especificadores de visibilidade. É esta a função de [b:d4c0e212ad]Protected [/b:d4c0e212ad]e das classes [b:d4c0e212ad]TCustomXXX[/b:d4c0e212ad]. O Delphi não compila código sem referência de uso. Portanto, só o que for utilizado irá para dentro do executável, o resto não.

Quanto a usar Ctrl+C e Ctrl+V como alternativa, bom, sem comentários...

Criar um novo componente implmentando TDataLink será muito mais trabalhoso do que derivar um de TDBNavigator e ocultar os botões desejados.

[]´s


Responder Citar

21/12/2005

Pain_elemental

Não entendi a resposta do colega. Componentes são feitos para facilitar a vida do programador. Quando um componente tem recursos que não serão utilizados, basta ocultá-los, sejam via código, seja via especificadores de visibilidade. É esta a função de [b:b27c750182]Protected [/b:b27c750182]e das classes [b:b27c750182]TCustomXXX[/b:b27c750182]. O Delphi não compila código sem referência de uso. Portanto, só o que for utilizado irá para dentro do executável, o resto não. Quanto a usar Ctrl+C e Ctrl+V como alternativa, bom, sem comentários... Criar um novo componente implmentando TDataLink será muito mais trabalhoso do que derivar um de TDBNavigator e ocultar os botões desejados. []´s


Overhead dos objetos gdi do windows, das janelas (entenda window handles, ja q pro windows ateh os check boxes sao janelas) que estarao no loop de mensagens, e uma infinidade de coisas que afetam a performance. Eu não suporto desperdiçar recursos nem deixo os meus programadores fazê-lo, já que são boas práticas de programação e devem prevalecer em todas as situações. Quanto ao código, realmente o otimizador do delphi elimina. Mas nao confie no otimizador, se vc for trabalhar com outra linguagem na qual o otimizador nao seja tao eficiente, você sofrerá para se readaptar, ou terá muita coisa inútil no seu código.

Componentes devem ser usados tendo em vista a reutilização, encapsulamento e polimorfismo, você nao vai criar uma classe para cada tarefa que nao for repetida. Na criacao de um novo componente usando o tdatalink vc vai ter pleno controle sobre o que está acontecendo. e a solução mais prática para o caso dele é usando o AfterScroll.


Responder Citar

21/12/2005

Jonasaf

Agradeço a ajuda de todos... valews.... meus caros...


Responder Citar