Array
(
)

MaskEdit: como saber se está em branco?

Raserafim
   - 18 fev 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.


Edilcimar
   - 19 fev 2006

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


Marco Salles
   - 19 fev 2006


Citação:
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 : ´ / / ´ salvando caracteres(final1) , para saber se esta em branco voce deve testar assim

#Código

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(final Zero) , para saber se esta em branco voce deve testar assim

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



Raserafim
   - 21 fev 2006

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.


Marco Salles
   - 21 fev 2006

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


Raserafim
   - 27 fev 2006

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.


Marco Salles
   - 27 fev 2006


Citação:
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

#Código

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;


percebe a diferença


Raserafim
   - 27 fev 2006

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.


Marco Salles
   - 27 fev 2006

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

#Código

var
stringDeFormatacao:String;


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

#Código
stringDeFormatacao:=MasKedit1.Text;


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

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



Aroldo Zanela
   - 27 fev 2006

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:

#Código


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´];
LineData:= ´´;
N := Length(Text);
for I := 1 to N do
begin
if Text[I] in ValidChars then
begin
LineData := LineData + Text[I];
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:

#Código

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



Raserafim
   - 03 mar 2006

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