DBGrid - Pegar texto de uma célula
Olá!
Gostaria de saber como pegar o texto de uma célula qualquer de um DBGrid. Eu sei que clicando com o mouse sobre a célula é fácil, conforme abaixo:
Porém, eu preciso saber como pegar o texto de uma célula, apenas me movimentando pelas células do DBGrid por meio das setas do teclado. Ou seja, como obter o resultado do código acima, sem clicar na célula com o mouse e apenas usando as setas do teclado.
Valeu!
wbb
Gostaria de saber como pegar o texto de uma célula qualquer de um DBGrid. Eu sei que clicando com o mouse sobre a célula é fácil, conforme abaixo:
procedure Tform1.DBGrid1CellClick(Column: TColumn); begin label1.Caption := Column.Field.Value; end;
Porém, eu preciso saber como pegar o texto de uma célula, apenas me movimentando pelas células do DBGrid por meio das setas do teclado. Ou seja, como obter o resultado do código acima, sem clicar na célula com o mouse e apenas usando as setas do teclado.
Valeu!
wbb
Wbb
Curtidas 0
Respostas
G1b4
06/08/2004
Caro wbb,
Ao invés de colocar um TLabel coloque um TDBText ligado ao mesmo TDataSource do TDBGrid....
Espero te-lo ajudado :wink: !!!
Ao invés de colocar um TLabel coloque um TDBText ligado ao mesmo TDataSource do TDBGrid....
Espero te-lo ajudado :wink: !!!
GOSTEI 0
Wbb
06/08/2004
Caro g1b4!
Isto é só um exemplo... Não é a maneira que estou usando realmente.
Isto é só um exemplo... Não é a maneira que estou usando realmente.
GOSTEI 0
G1b4
06/08/2004
Caro wbb,
Foi malz... a pressa não me deixou ver a situação...
Meu exemplo é pra apenas uma coluna...
Faça assim... Utilizando o seu exemplo acima:
Assim você executa o seu OnCellClick navegando sem o mouse....
Espero AGORA te-lo ajudado !!!
Foi malz... a pressa não me deixou ver a situação...
Meu exemplo é pra apenas uma coluna...
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Label1.Caption:=Column.Field.Value;
end;
Faça assim... Utilizando o seu exemplo acima:
procedure TForm1.DBGrid1ColEnter(Sender: TObject); begin DBGrid1.OnCellClick:=DBGrid1.OnCellClick; end;
Assim você executa o seu OnCellClick navegando sem o mouse....
Espero AGORA te-lo ajudado !!!
GOSTEI 0
G1b4
06/08/2004
esquece viajei.... :oops:
GOSTEI 0
G1b4
06/08/2004
Coloque no form keypreview=true. Agora funciona :D ! O último que fiz, postei mas não testei. Fui testar depois. Mas esse eu testei....
:wink:
procedure TForm1.DBGrid1CellClick(Column: TColumn); begin Label1.Caption:=Column.Field.AsString; end; procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var indice :integer; begin if (Sender as TForm).ActiveControl is TDBGrid then if key in [vk_DOWN,vk_Up,vk_LEFT,vk_RIGHT] then begin indice:=DBGrid1.Columns.Grid.SelectedIndex; DBGrid1CellClick(DBGrid1.Columns.Items[indice]); end; end;
:wink:
GOSTEI 0
Wbb
06/08/2004
Legal g1b4! Valeu!
Agora sem querer abusar, estou com um outro problema... Num campo numérico do banco de dados, que é mostrado no DBGrid, eu acessei o TFiled correspondente no Dataset e já coloquei as propriedades DisplayFormat e FormatEdit em [b:17be35310e]#,0.00[/b:17be35310e], além de colocar em True a propriedade Currency do mesmo TField, tudo isso com o objetivo de que o número seja mostrado como valor monetário. Até aí ok! Só que quando vou digitar um número neste campo do DBGrid e tento colocar mais de uma vírgula no número, ele aceita. Aí, ao tentar salvar este número com formato inválido, o Dataset gera um erro. Afinal um número com mais de uma vírgula é inválido.
Tem como impedir que o usuário consiga digitar mais de uma vírgula? Ou então se digitar, tem como reformatar o número antes de ser gerado o erro?
Valeu!
wbb
Agora sem querer abusar, estou com um outro problema... Num campo numérico do banco de dados, que é mostrado no DBGrid, eu acessei o TFiled correspondente no Dataset e já coloquei as propriedades DisplayFormat e FormatEdit em [b:17be35310e]#,0.00[/b:17be35310e], além de colocar em True a propriedade Currency do mesmo TField, tudo isso com o objetivo de que o número seja mostrado como valor monetário. Até aí ok! Só que quando vou digitar um número neste campo do DBGrid e tento colocar mais de uma vírgula no número, ele aceita. Aí, ao tentar salvar este número com formato inválido, o Dataset gera um erro. Afinal um número com mais de uma vírgula é inválido.
Tem como impedir que o usuário consiga digitar mais de uma vírgula? Ou então se digitar, tem como reformatar o número antes de ser gerado o erro?
Valeu!
wbb
GOSTEI 0
G1b4
06/08/2004
Tem como impedir que o usuário consiga digitar mais de uma vírgula? Ou então se digitar, tem como reformatar o número antes de ser gerado o erro?
A primeira pergunta: você pode colocar uma variavel global do tipo inteira na sua Unit e no evento OnKeyPress fazer um contador, depois se o contador for=1, não permitirá mais a virgula.
Segunda Pergunta: Claro que sim, mas como saber onde formato o valor? Não tem como você saber qual é o valor pretendido. Neste caso, acho melhor gerar a mensagem do erro e limpar o campo...
Espero te-lo ajudado :wink: !!!
GOSTEI 0
Wbb
06/08/2004
Quanto à variável global eu já tentei exatamente como você falou, e funciona. Só que tem um problema: Se o campo já estiver preenchido, eu identifico se já tem ou não vírgula ao entrar no campo. Até aí ok. Só que após entrar no campo, eu não tenho como saber o que foi digitado antes que seu conteúdo seja salvo no BD. É aí que o erro ocorre e é pelo mesmo motivo que eu não tenho como gerar uma mensagem ao usuário.
...!?! É complicado...
Obrigado pela atenção mesmo assim. Se descobrir algo e puder me enviar, seria extremamente útil.
Valeu!
wbb
...!?! É complicado...
Obrigado pela atenção mesmo assim. Se descobrir algo e puder me enviar, seria extremamente útil.
Valeu!
wbb
GOSTEI 0
G1b4
06/08/2004
Se o campo já tem valor e for identificado vírgula, você atribui à sua variável global o valor 1. Assim não poderá digitar mais a virgula. Só que tem uma coisa, caso o usuário apague a vírgula o campo não deixará colocar nova virgula. Então, no evento OnKeyPress você terá que sempre fazer a verificação´, se tiver virgula contador = 1 (não permite uso de virgula), caso não contador = 0(permite uso de virgula).
:wink:
:wink:
GOSTEI 0