MaskEdit: como saber se está em branco?

18/02/2006

preciso fazer uma verificação se o campo não está preenchido. o problema é que quando o campo tem uma máscara ele nunca diz que está em branco.
ex: quando faço assim if MaskEdit1.Text = ´´ then

senpre retorna que não está em branco caso tenha alguma máscara.


Raserafim

Respostas

19/02/2006

Edilcimar

vc tem que percorrer o maskedit para ver se tem algum caracter além da mascara, se for data, basta tentar transformar de string para data


Responder Citar

19/02/2006

Marco Salles

preciso fazer uma verificação se o campo não está preenchido. o problema é que quando o campo tem uma máscara ele nunca diz que está em branco.


Diz sim , amigo .. Voce e que tem que interpretar esta informação

se a mascara do seu maskedit por exemplo for : [b:c49cfd6be6]´ / / ´ [/b:c49cfd6be6]salvando caracteres[b:c49cfd6be6](final1)[/b:c49cfd6be6] , para saber se esta em branco voce deve testar assim

if maskedit1.text = ´  /  /    ´ then :arrow:  mascara com final 1
esta em branco


se a mascara do seu maskedit por exemplo for : ´ / / ´ não salvando caracteres([b:c49cfd6be6]final Zero[/b:c49cfd6be6]) , para saber se esta em branco voce deve testar assim

if maskedit1.text = ´ ´ then   :arrow: mascara com final zero
esta em branco



Responder Citar

21/02/2006

Raserafim

o problema é que não tenho como fazer a comparação em tempo de projeto pois a máscara é definida pela usuário, através de um cadastro que é atribuido ao campo no momento em que o form é aberto.


Responder Citar

21/02/2006

Marco Salles

o problema é que não tenho como fazer a comparação em tempo de projeto pois a máscara é definida pela usuário, através de um cadastro que é atribuido ao campo no momento em que o form é aberto.

O que voce tem que fazer e não deixar que a mascara salve os literais
para isso voce tem que definir o final da mascara

Logo voce sempre vai poder testar If MaskEdit1.tex = ´´ é vazio

com certeza

o usuário pode ate escolher o formato da mascara, mas o final é voce que tem que definir.. Para o usário pouco importa


Responder Citar

27/02/2006

Raserafim

mas tb tenho que definir para salvar os caracteres literais, pois o usuário pode configurar a máscara, mas os dados que ele colocou com aquela máscara tem que ser salva da forma como o usuário definiu. ou seja, a forma como o usuário digitou os dados tem que ser preservada para exibições.


Responder Citar

27/02/2006

Marco Salles

ou seja, a forma como o usuário digitou os dados tem que ser preservada para exibições.


o final da mascara não tem nada a ver com a exibição.. Mas para interpretar o resultado faz uma diferença inorme

Exemplo :
!99/99/9999;1;_
!99/99/9999;0;_
todas as duas tem o formato

MaskEdit1.text:=´ / / ´

porem o Final 1 Salva os literais que nesse caso e a ´\´ barra e ja a mascar com o final Zero não Salva

Na hora de gravar o formato da mascara coloque o final zero no tipo de mascara que o usuario intoriduziu

Por exemplo , coloque na propreidade EditMask Do MasjEdit uma mascara vazia e rode o exemplo abaixo

procedure TForm1.Button1Click(Sender: TObject);
var
FormatoQueOUsuarioEscolheu:String;
begin
FormatoQueOUsuarioEscolheu:=´99/99/0000´;
Maskedit1.EditMask:=FormatoQueOUsuarioEscolheu;
showmessage(Maskedit1.EditMask);
Maskedit1.EditMask:=Maskedit1.EditMask+´;0;_´;
showmessage(Maskedit1.EditMask);
if MaskEdit1.Text = ´´ Then
  showmessage(´esta vazia´)
else
  Showmessage(´Não esta vazia´);
FormatoQueOUsuarioEscolheu:=´99/99/0000´;
Maskedit1.EditMask:=FormatoQueOUsuarioEscolheu;
showmessage(Maskedit1.EditMask);
Maskedit1.EditMask:=Maskedit1.EditMask+´;1;_´;
if MaskEdit1.Text = ´´ Then
  showmessage(´esta vazia´)
else
  Showmessage(´Não esta vazia´)
end;


[b:a8d530994f]percebe a diferença[/b:a8d530994f]


Responder Citar

27/02/2006

Raserafim

eu sei o q significa o 0 e o que significa o 1, o que são caracteres literais.... etc.
o que eu estou dizendo é que eu tenho que gravar os caracteres literais pois a máscara pode mudar mas os dados que já foram gravados tem que estar no mesmo formato que foi gravado, mesmo que a máscara não seja mais a mesma.


Responder Citar

27/02/2006

Marco Salles

então o seu problema ja esta resolvido

use uma variavel para guardar oo formato da mascara , que o usuario escolheu e quando lhe for conveniente compare o conteudo da variavel com o valor do maskedit.text , se for diferente e sinal que tem algo escrito no maskedit se for igua e sunal que o maskedit esta vazio.. Este método independe do formato da mascara e independe do final

tipo isso

var
stringDeFormatacao:String;


No exato momento que o usuario escolher uma mascara , em algum evento , no seu formario, isto é com voce Faça isto:

stringDeFormatacao:=MasKedit1.Text;


E finalmente faça o teste quandolhe for conveniente , por exemplo na hora de salvar

if maskedit1.Text = stringDeFormatacao then
  showmessage(´esta vazia´)
else
  showmessage(´não esta vazia´)



Responder Citar

27/02/2006

Aroldo Zanela

Colega,

Não sei se entendi corretamente sua necessidade.

Criei uma função para verificar se numa entrada de dados, contém dados válidos. Neste contexto, apenas números:

function ItContainsData(Const Text: string): Boolean;
var LineData: String;
ValidChars: set of Char;
    I, N: SmallInt;
begin
  ValidChars:= [´0´,´1´,´2´,´3´,´4´,´5´,´6´,´7´,´8´,´9´&93;;
  LineData:= ´´;
N := Length(Text);
  for I := 1 to N do
  begin
    if Text&91;I&93; in ValidChars then
    begin
      LineData := LineData + Text&91;I&93;;
    end;
  end;
  Result := Length(LineData)>0;
end;


Para testar, adicionei um TBitBtn e um TMaskEdit com a máscara =
´!99/99/00;1;_´ e no manipulador do evento OnClick, coloquei o seguinte código:

if not ItContainsData(medt1.Text) then
  begin
  MessageBox(0, ´Informe a data desejada.´, ´Error´, MB_ICONSTOP or MB_OK);
  end;



Responder Citar

03/03/2006

Raserafim

valeu Aroldo, mas acabei ficando com a dica de Marco Salles


Responder Citar