Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   TMaskedit, con posibles excepciones en el formato (https://www.clubdelphi.com/foros/showthread.php?t=52464)

grotero76 22-01-2008 10:08:57

TMaskedit, con posibles excepciones en el formato
 
Buenas,

estoy utilizando un maskedit para almacenar un telefono. El mismo se almacenará siguiendo el siguiente formato:
+34 98.587.21.25
El problema es que ahora me han pedido que sea posible indicar más de un número de teléfono, en la forma:
+34 98.587.21.25/58
es decir, únicamente cambian las ultimas cifras del número.

¿Es posible crear una excepción en el formato de manera que si se quiere introducir más de un teléfono se pueda escribir el "/58" al final del número?.
He buscado en los foros y no he encontrado nada parecido, no sé si se podrá hacer.

Espero haberme explicado.

Un saludo y muchas gracias.

elcolo83 22-01-2008 12:47:22

Lo que podrias hacer es modificar la mascara, por ejemplo asi: (agrega esto en el evento OnKeyPress del TEditMask)

Advertencia: la mascara que estoy usando es '!\+99 00.000.00.00;1;_' supongo que debes tener algo asi en la mascara.


Código Delphi [-]
procedure TForm1.EditMask1KeyPress(Sender: TObject; var Key: Char);
var s, t: String;
begin
if key='/' then
  with TMaskEdit(Sender) do
    begin
      t:= Text;
      s:= EditMask;
      Delete(S, Length(s)-3, 4);
      EditMask:= S+'\/00;1;_';
      Text:= t;
      SelStart:= Length(Text)-2;
    end;
end;

eso si, si el usuario precionara '/' antes de completar el resto de los campos obligatorios lanzara el error de que faltan completar campos como ya sabemos.

grotero76 23-01-2008 10:39:16

Es una solución que me puede servir....

Muchas gracias.

grotero76 31-01-2008 10:17:26

Hola a todos,

finalmente he dejado la máscara de la siguiente forma:

!+34 99.999.99.99ccc;1;_

De esta manera con las 'c' en la máscara consigo tener 3 caracteres opcionales al final del teléfono.
Mi problema ahora es que al obtener el dato de base de datos y visualizarlo en la máscara se visualiza bien, pero no me deja editar esos 3 caracteres opcionales. Lo que hago es lo siguiente:

MaskEdit1.EditText:=Telefono

siendo Telefono una variable que contiene por ejemplo: '+34 98.511.47.58'

El texto lo captura bien, pero no me deja editar más allá del 58, es decir, es como si los 3 caracteres opcionales no existieran.....

¿Estoy haciendo algo mal?...

Un saludo y gracias.

jachguate 31-01-2008 10:48:32

Probá con esto:

Código Delphi [-]
if length(Telefono) = length('+34 99.999.99.99') then
  MaskEdit1.EditText := Telefono + '   '
else
  MaskEdit1.EditText := Telefono;

Hasta luego.

;)

grotero76 31-01-2008 12:11:18

Gracias por tu respuesta tan rápida,

me pasa una cosa muy extraña, al obtener el valor de base de datos con

Código:

MaskEdit1.EditText:=Telefono
es como si perdiese la máscara, es decir, se comporta como un Edit normal, no sigue el patrón que yo le digo en la máscara, puedo borrar caracteres e insertarlos como yo quiera, sin seguir la máscara indicada en el control. Sin embargo si no inicializo el maskedit a ningún valor sí que muestra bien la máscara y la sigue perfectamente....

No sé si me he explicado bien. ¿Existe alguna propiedad en el MaskEdit que se me escape?, ¿al hacer el EditText es posible que pierda la máscara?....

Muchas gracias de nuevo.

grotero76 31-01-2008 13:49:23

Ya encontré el problema,

efectivamente al obtener el texto de la base de datos hay que completar dicho texto con espacios en blanco hasta completar el número de caracteres totales de la máscara haciendo algo parecido a:

Código:

MaskEdit1.Text := TextodeBD + Blancos
siendo "Blancos" un texto que contiene tantos espacios en blanco como caracteres le faltan al texto de la base de datos hasta completar el número de caracteres totales de la máscara.

Gracias a todos por vuestra colaboración.

Un saludo.


La franja horaria es GMT +2. Ahora son las 11:28:40.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi