Re: [delphi-br] Bloquear evento AfterScroll

2007-02-01 Por tôpico Alisson Yahoo
Eu não quero bloquear o mouse. Quero que o dataset não mude de registro ao 
clicar na barra de rolagem. O foco deve ficar no mesmo registro, mas se clicar 
na barra de rolagem serão mostrados os registros mais abaixo ou mais acima no 
grid. 

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Bloquear evento AfterScroll

2007-02-01 Por tôpico Adriano Santos
Talvez vc possa utilizar a classe de bookmarks do Delphi e fazer ele 
[dbGrid] nunca sair do registro atual.

procedure TForm1.
var
  B : TBookMark;
begin
  //guarda o bookmark
  B := DataModule.Query.GetBookmark;

  //Aqui vc faz o que precisa fazer, while, for e etc.

  //Volta para o registro que estava antes
  DataModule.Query.GotoBookmark(B);
  //Libera o bookmark
  DataModule.Query.FreeBookmark(B);
end;

Vc pode fazer um xunxu, como disse nosso colega, pra sempre fazer com 
que o programa se mantenha no registro X em determinados eventos.
Só precisa de criatividade e testes, muitos testes.

Veja se pensa em algo ai pra resolver o problema com esta mini-solução.





*Adriano Santos*


 Mensagem original 
De: Alisson Yahoo [EMAIL PROTECTED]
Para: delphi-br@yahoogrupos.com.br
Assunto: Re:[delphi-br] Bloquear evento AfterScroll
Data: 01-02-2007 14:18

 Eu não quero bloquear o mouse. Quero que o dataset não mude de 
 registro ao clicar na barra de rolagem. O foco deve ficar no mesmo 
 registro, mas se clicar na barra de rolagem serão mostrados os 
 registros mais abaixo ou mais acima no grid.

 [As partes desta mensagem que não continham texto foram removidas]

  



Re: [delphi-br] Bloquear evento AfterScroll

2007-01-31 Por tôpico Leodinei Bielak
Deve ter como você checar se o mouse está em cima de uma célula no
DBgrid ou se está em outro lugar tu bloqueia.

On 1/30/07, Alisson Yahoo [EMAIL PROTECTED] wrote:



 Eu não me expressei bem. Na verdade o que eu quero é que o dataset não mude 
 de registro ao clicar na barra de rolagem, se clicar em uma linha não poderá 
 ser bloqueado a mudança de registro. Se eu colocar o Abort no BeforeScroll 
 vai travar tudo.

  no BeforeScroll, use Abort;


Re: [delphi-br] Bloquear evento AfterScroll

2007-01-31 Por tôpico Adriano Santos - Direção de Arte
O seu usuário faz edição do registro direto no DbGrid?
Se for só o caso de desativar os eventos vc pode dar um Nil nele, mas 
não sei se encaixa com o que precisa.

Desativa
ClientDataSet1.onAferScroll := Nil

Ativa
ClientDataSet1.onAferScroll := ClientDataSet1AferScroll;



*Adriano Santos
*Desenvolvedor Delphi desde 1998. Professor e programador PHP.
Bacharel em Comunicação Social pela Universidade Cruzeiro do Sul, SP.

Colunista e Comissão Editorial da revista ClubeDelphi.*
*


Leodinei Bielak respondeu:

 Deve ter como você checar se o mouse está em cima de uma célula no
 DBgrid ou se está em outro lugar tu bloqueia.

 On 1/30/07, Alisson Yahoo [EMAIL PROTECTED] 
 mailto:alssnco%40yahoo.com.br wrote:
 

 
  Eu não me expressei bem. Na verdade o que eu quero é que o dataset 
 não mude de registro ao clicar na barra de rolagem, se clicar em uma 
 linha não poderá ser bloqueado a mudança de registro. Se eu colocar o 
 Abort no BeforeScroll vai travar tudo.
 
  no BeforeScroll, use Abort;

 
 

 No virus found in this incoming message.
 Checked by AVG Free Edition.
 Version: 7.5.432 / Virus Database: 268.17.17/661 - Release Date: 30/1/2007 
 23:30
   


Re: [delphi-br] Bloquear evento AfterScroll

2007-01-31 Por tôpico Henrique Netzka \(Vetor Sistemas\)
Ah... então, xunxo pra resolver isso é o que não falta! Você pode desenhar um 
retângulo cinza (da cor do fundo) em cima do Scroll, ele não vai aparecer :)

Mas se você quer fazer um treco xique, copie e cole o fonte do componente 
TDBGrid e remova o Scroll dele :D

Ou faz o que nosso amigo falou, no BeforeScroll checa se o mouse está dentro do 
grid! rs

  - Original Message - 
  From: Alisson Yahoo 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Tuesday, January 30, 2007 5:36 PM
  Subject: Re: [delphi-br] Bloquear evento AfterScroll


  Eu não me expressei bem. Na verdade o que eu quero é que o dataset não mude 
de registro ao clicar na barra de rolagem, se clicar em uma linha não poderá 
ser bloqueado a mudança de registro. Se eu colocar o Abort no BeforeScroll vai 
travar tudo.

  no BeforeScroll, use Abort;

  [As partes desta mensagem que não continham texto foram removidas]



   

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Bloquear evento AfterScroll

2007-01-31 Por tôpico Adriano Santos (Yahoo)
xunxo? Primeira vez que vejo esta expressão.

Bem, eu particularmente sou contra edição diretamente da grade. Se for 
este o caso eu prefiro criar uma telinha msm que simples. É muito ruim 
controlar os eventos do DbGrid.


*Adriano Santos*
Desenvolvedor Delphi desde 1998. Professor e programador PHP.
Bacharel em Comunicação Social pela Universidade Cruzeiro do Sul, SP.

Colunista e Comissão Editorial da revista ClubeDelphi.

Henrique Netzka (Vetor Sistemas) respondeu:

 Ah... então, xunxo pra resolver isso é o que não falta! Você pode 
 desenhar um retângulo cinza (da cor do fundo) em cima do Scroll, ele 
 não vai aparecer :)

 Mas se você quer fazer um treco xique, copie e cole o fonte do 
 componente TDBGrid e remova o Scroll dele :D

 Ou faz o que nosso amigo falou, no BeforeScroll checa se o mouse está 
 dentro do grid! rs

 - Original Message -
 From: Alisson Yahoo
 To: delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
 Sent: Tuesday, January 30, 2007 5:36 PM
 Subject: Re: [delphi-br] Bloquear evento AfterScroll

 Eu não me expressei bem. Na verdade o que eu quero é que o dataset não 
 mude de registro ao clicar na barra de rolagem, se clicar em uma linha 
 não poderá ser bloqueado a mudança de registro. Se eu colocar o Abort 
 no BeforeScroll vai travar tudo.

 no BeforeScroll, use Abort;

 [As partes desta mensagem que não continham texto foram removidas]

 [As partes desta mensagem que não continham texto foram removidas]

 
 

 No virus found in this incoming message.
 Checked by AVG Free Edition.
 Version: 7.5.432 / Virus Database: 268.17.17/661 - Release Date: 30/1/2007 
 23:30
   

-- 


Re: [delphi-br] Bloquear evento AfterScroll

2007-01-31 Por tôpico Adriano Santos - Direção de Arte
Imagina Henrique não interpretei como crítica não, pode ficar tranquilo. 
Só achei engraçada a expressão porque nunca tinha escutado. ;)

Como eu disse: prefiro criar uma telinha simples onde vc clicando duas 
vezes no registro do grid o mesmo se abre nesta telinha ai fica mais 
fácil de controlar as ações do usuário. Porém não sei ao certo se é isso 
que o colega Alisson precisa. Pensei em criar um xunxo (adorei esta, 
rsrs) da seguinte maneira:

Coloca um TPanel em cima do DbGrid e deixa ele invisível. Toda vez que o 
usuário tentar editar algo na linha o TPanel aparece com os campos do 
dbgrid e então desativa todos os componentes em tela que pode dar algum 
problema, deixando talvez só o botão Gravar e Cancelar. Pra não mover o 
DbGrid é possível desativar os controles: 
DataModule.Query.DisabledControls; e no Gravar ativa de novo: 
DataModule.Query.EnabledControls;

Mas isso já estou viajando pq não sei é é isso que o Allisson precisa 
como eu disse a cima.
Uma solução ainda mais radical é criar um novo componente DBGrid sem 
barra de rolagem vertical, olha:

*449 - Removendo a barra de rolagem vertical do DBGrid (dica tirada do 
arquivo DTDelphi8.chm)*
Para remover a barra de rolagem vertical de componente TDBGrid, você 
precisa apenas criar um novo componente herdado da classe TDBGrid e 
reescrever o método paint.

No método Paint você usará a API do Windows SetScrollRange definindo o 
tamanho máximo e mínimo do scroll para zero (isto desabilitará a 
exibição da barra de scroll).

E então acione o inherited paint para que o objeto novo possa ser 
desenhado.

O código abaixo mostra uma Unit criada de uma instância do componente 
TDBGrid e que não possui a barra de rolagem vertical.

unit Newgrid;
interface
uses
  WinTypes, WinProcs, Classes, DBGrids;
 
type
  TNoVertScrollDBGrid = class(TDBGrid)
 
protected
procedure Paint; override;
end;
 
procedure Register;
 
implementation
 
procedure TNoVertScrollDBGrid.Paint;
begin
  SetScrollRange(Self.Handle, SB_VERT, 0, 0, False);
  inherited Paint;
end;
 
procedure Register;
begin
  RegisterComponents('Data Controls', [TNoVertScrollDBGrid]);
end;
end.


*Adriano Santos*


Henrique Netzka (Vetor Sistemas) respondeu:

 *Adriano Santos*, nada contra sua solução! Ainda mais com um cirruclum 
 desses, UAU, quem sou eu para criticá-lo

 Comunque, não chamei sua solução de xunxo... Chamei as minhas, nem me 
 toquei de estar criticando a sua Fato é que toda ferramenta tem 
 uma limitação, e eventualmente batemos nesta limitação e precisamos 
 arrumar saídas. Eventualmente, estas saídas são xunxos - mesmo que 
 não queiramos chamá-la assim... Pra mim, jeitinho, artifício 
 técnico, saída alternativa, isso tudo é xunxo! Três ifs aninhados é 
 xunxo, na maioria das vezes! Você impedir que o usuário clique no 
 scrollbar, mas não impedir que ele navegue no dataset, desculpe, mas 
 só dá pra resolver no xunxo! Talvez não exista uma forma nativa de 
 resolver isso, e nem uma forma bonita. Sabe porquê?! Tá bom, você 
 checa o mouse; mas e se o cara quiser apertar as setas pra se mover? 
 Ele não pode então? Ou talvez ele poderá, depende do mouse estar ou 
 não sob o grid; daí você bloqueia também as teclas (já tem 2 bloqueios 
 em lugares diferentes); mas talvez o bloqueio das teclas não seja 
 desejado! Então você libera - e você terá que ter um flag dentro do 
 seu form dizendo se ele moveu o mouse ou pressionou uma tecla pela 
 última vez, pois isso será decisivo na sua decisão de deixá-lo mover 
 ou não o registro... Ou seja: mouse seta flag, teclado seta flag, 
 teste em cima do flag E do mouse, se for o caso, pra saber se deixa 
 mover o registro. Pra mim, isso tudo soa como xunxo! Não que não seja 
 uma boa saída - e de fato, se eu estivesse apressado, seria a 
 minha -, mas é xunxo! Mas cada um tem sua interpretação, afinal...

 Abraços

 - Original Message -
 From: Adriano Santos (Yahoo)
 To: delphi-br@yahoogrupos.com.br mailto:delphi-br%40yahoogrupos.com.br
 Sent: Wednesday, January 31, 2007 10:26 AM
 Subject: Re: [delphi-br] Bloquear evento AfterScroll

 xunxo? Primeira vez que vejo esta expressão.

 Bem, eu particularmente sou contra edição diretamente da grade. Se for
 este o caso eu prefiro criar uma telinha msm que simples. É muito ruim
 controlar os eventos do DbGrid.

 *Adriano Santos*
 Desenvolvedor Delphi desde 1998. Professor e programador PHP.
 Bacharel em Comunicação Social pela Universidade Cruzeiro do Sul, SP.

 Colunista e Comissão Editorial da revista ClubeDelphi.

 Henrique Netzka (Vetor Sistemas) respondeu:
 
  Ah... então, xunxo pra resolver isso é o que não falta! Você pode
  desenhar um retângulo cinza (da cor do fundo) em cima do Scroll, ele
  não vai aparecer :)
 
  Mas se você quer fazer um treco xique, copie e cole o fonte do
  componente TDBGrid e remova o Scroll dele :D
 
  Ou faz o que nosso amigo falou, no BeforeScroll checa se o mouse está

[delphi-br] Bloquear evento AfterScroll

2007-01-30 Por tôpico Alisson Yahoo
Pessoal,

Eu gostaria de deixar não mudar o foco quando se clica na barra de rolagem do 
DbGrid, mas é chamado o evento AfterScroll do ClientDataset, e assim o foco 
muda para o registro atual. Tem como bloquear isso?

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Bloquear evento AfterScroll

2007-01-30 Por tôpico Henrique Netzka \(Vetor Sistemas\)
no BeforeScroll, use Abort;

:)

  - Original Message - 
  From: Alisson Yahoo 
  To: delphi-br@yahoogrupos.com.br 
  Sent: Tuesday, January 30, 2007 9:16 AM
  Subject: [delphi-br] Bloquear evento AfterScroll


  Pessoal,

  Eu gostaria de deixar não mudar o foco quando se clica na barra de rolagem do 
DbGrid, mas é chamado o evento AfterScroll do ClientDataset, e assim o foco 
muda para o registro atual. Tem como bloquear isso?

  [As partes desta mensagem que não continham texto foram removidas]



   

[As partes desta mensagem que não continham texto foram removidas]



Re: [delphi-br] Bloquear evento AfterScroll

2007-01-30 Por tôpico Alisson Yahoo
Eu não me expressei bem. Na verdade o que eu quero é que o dataset não mude de 
registro ao clicar na barra de rolagem, se clicar em uma linha não poderá ser 
bloqueado a mudança de registro. Se eu colocar o Abort no BeforeScroll vai 
travar tudo.


no BeforeScroll, use Abort;


[As partes desta mensagem que não continham texto foram removidas]