Fórum procedimento em dbedit #327923
23/08/2006
0
tenho um programa onde o dbedit está vinculado em um clientdataset com campo do tipo inteiro. Estou usando os recursos do clientdataset (ongettext e onsettext) para manipular os dados. Na verdade estou convertendo esse campo inteiro para horas para visualização. Então o usuario digita horas e o clientdataset grava em inteiros. O problema é que eu preciso que o dbedit tenha uma máscara com os dois pontos da hora (ex: 180:00), mas como na verdade ele é um tipo inteiro ele não aceita nada a não ser numeros. Alguem tem alguma sugestão para que esse dbedit já fique pré-formatado no formato de horas?
Roberto Rossi
Curtir tópico
+ 0
Responder
Posts
23/08/2006
Micheus
mas como na verdade ele é um tipo inteiro ele não aceita nada a não ser numeros
Para setar os caracteres que são aceitos no campo basta no evento OnShow (p.e.) vc definir quais os caracteres válidos para o mesmo. Assim, para um TIntegerField aceitar que vc digite os ´[i:2a2bbc6909]:[/i:2a2bbc6909]´ e não aceite mais os ´[i:2a2bbc6909].[/i:2a2bbc6909]´, ´[i:2a2bbc6909],[/i:2a2bbc6909]´, ´[i:2a2bbc6909]+[/i:2a2bbc6909]´ e ´[i:2a2bbc6909]-[/i:2a2bbc6909]´ coloque assim:Ex. 1) Table1Hora.ValidChars := Table1Hora.ValidChars + [´:´] - [´,´, ´.´, ´-´, ´+´];
Ex. 2) Table1Hora.ValidChars := [´0´..´9´, ´:´];
O problema é que eu preciso que o dbedit tenha uma máscara com os dois pontos da hora (ex: 180:00), ... . Alguem tem alguma sugestão para que esse dbedit já fique pré-formatado no formato de horas?
Se é boa eu não sei, mas pelo que testei deve funcionar. No exemplo, utilizei:- Um MaskEdit, com máscara ´!999:00;1;´ para digitação da hora formatada;
- Um DataSource ligado a tabela que contém o campo, para manipular o MaskEdit como se fosse um DBEdit;
- Os eventos GetText e SetText do campo Hora (TIntegerField);
// sempre que for movida/posicionada uma linha na tabela, // o MaskEdit é atualizado com o valor do campo da linha atual procedure TForm1.DataSource1DataChange(Sender: TObject; Field: Field); begin MaskEdit1.Text := Table1Hora.DisplayText; end; // ao sair do MaskEdit, se a tabela estiver em modo edição/inserção // atualizamos o valor do campo com o conteúdo digitado. // Obs.: se quizer, poderá por a tabela em edição caso não esteja procedure TForm1.MaskEdit2Exit(Sender: TObject); begin if Table1.State in [dsInsert, dsEdit] then Table1HoraSetText(Table1Hora, MaskEdit1.Text); end; // Converte a hora armazenada no inteiro para o formato string // a ser utilizado para mostrar o valor do campo. // Obs.: Aqui eu considerei apenas o valor inteiro como sendo // o valor da hora inteira. Talvez não seja seu caso procedure TForm1.Table1HoraGetText(Sender: TField; var Text: String; DisplayText: Boolean); begin if not Sender.IsNull then Text := Sender.AsString +´:00´ end; // Converte o texto digitado de forma obtermos novamente um // inteiro a ser atribuído ao campo da tabela. // Obs.: para facilitar utilizei a função StrToIntDef. procedure TForm1.Table1HoraSetText(Sender: TField; const Text: String); var PosPonto :integer; begin PosPonto := Pos(´:´, Text); if PosPonto > 0 then Sender.Value := StrToIntDef(Copy(Text, 1, PosPonto-1), 0) else Sender.Value := StrToIntDef(Text, 0); end;
Espero que ajude.
[]s
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)