Re: [delphi-br] Bloquear evento AfterScroll
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
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
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
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
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
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
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
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
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
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]