Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-03-2013
bigguntm bigguntm is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 16
Poder: 0
bigguntm Va por buen camino
Ayuda a crear edit con sus propias politicas

Hola a toda la comunidad, voy a tomar el ejemplo ya puesto, si deseo introducir la Cédula: V-12.837.967, yo quisiera que al colocar 'V' se marque automaticamente '-' luego coloco '12' y automaticamente '.', asi sucesivamente, en mi caso seria MEP-04598-005. Al colocar 'MEP' se marque '-' y que no se pueda volver a colocar una letra, osea que el Maximo de las letras sea tres. y luego que la letra sea introducida, se pueda comenzar a introducir los numeros. ejemplo, coloco '04598' y se marca automaticamene '-' para colocar los ultimos 3 numeros, esto fue lo que se me ocurrio, pero no funciona correctamente,

Código Delphi [-]
 procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
 begin if StrLen( PChar(Edit2.Text) ) < 3 then
  if not( key in [#8,'m','e','p','-']) then    
begin
    MessageBeep(MB_ICONERROR);
    key := #0;  
if StrLen( PChar(Edit2.Text) ) > 3 then
  if not( key in [#8,'0'..'9','-']) then
begin   
MessageBeep(MB_ICONERROR);
key := #0;
  end;
 end; 
end;


Saludos
Responder Con Cita
  #2  
Antiguo 09-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola bigguntm.

Creo que una alternativa mas simple le daría solución a tu problema, usar un TMaskEdit.

Por ejemplo:
Código Delphi [-]
procedure TForm.FormCreate(Sender: TObject);
begin
  with MaskEdit1 do
  begin
    Text     := '';
    EditMask := 'LLL-00000-000; ; ';
    CharCase := ecUpperCase;
  end;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 09-03-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
bigguntm,

Cita:
Empezado por bigguntm
Ayuda a crear edit con sus propias politicas...en mi caso seria MEP-04598-005...
Revisa este código:
Código Delphi [-]
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask;

type
  TForm1 = class(TForm)
    MaskEdit1: TMaskEdit;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
   MaskEdit1.EditMask := 'MEP-00000-000;1;_';
end;

end.
El código anterior permite ingresar solo números en un control TMaskEdit con un formato de mascara predefinido en la propiedad EditMask configurada según tu requerimiento. Como se comento en el Msg #2 esta solución es más fácil de implementar.

Revisa estos links:

Espero sea útil

Nelson.
Responder Con Cita
  #4  
Antiguo 09-03-2013
bigguntm bigguntm is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 16
Poder: 0
bigguntm Va por buen camino
Son unos duros en la programacion, cualquiera de los dos funciona correctamente, pero tengo un detallito, el MaskEdit deberia de habilitar el btnCalculate cuando llene todo los caracteres,
Código Delphi [-]

if StrLen( PChar(Edit2.Text) ) > 12 then //al Maskedit le puse como name Edit2.Text
btnCalculate.Enabled := true;

if StrLen( PChar(Edit2.Text) ) < 13 then
btnCalculate.Enabled := false;
end;

ese code me funciona fino en un Edit, pero el problema de el MaskEdit esq siempre esta lleno.. un ejemplo de eso, MEP-_____-___ o MEP- - , yo borro, y lo que hace es retroceder. Y si lo pongo

Código Delphi [-]
if not StrLen( PChar(Edit2.Text) ) = 13 then 
btnCalculate.Enabled := false;

entonces siempre estaria habilitado ya que cuenta los '_' , ' ', '.' ... Saludos
Responder Con Cita
  #5  
Antiguo 10-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola bigguntm.

Proba de este modo:
Código Delphi [-]
...
procedure TForm1.FormCreate(Sender: TObject);
begin
  with MaskEdit1 do
  begin
    EditMask  := 'LLL-00000-000;0; ';
    CharCase  := ecUpperCase;
    Text      := '';
    MaxLength := 12;
  end;
end;

procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  with MaskEdit1 do 
    btnCalculate.Enabled:= SelStart = 12;
end;
...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 10-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo.

Me quedó rondando en la cabeza y si... El código anterior, provoca un efecto no deseado cuando se presiona Backspace u otra tecla más allá del caracter 12.

Mejor es:
Código Delphi [-]
procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
  with Sender as TMaskEdit do
    if SelStart < 13 then
      btnCalculate.Enabled:= (SelStart = 12) and (key <> #8);
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 10-03-2013 a las 00:48:38.
Responder Con Cita
  #7  
Antiguo 10-03-2013
Avatar de nlsgarcia
[nlsgarcia] nlsgarcia is offline
Miembro Premium
 
Registrado: feb 2007
Ubicación: Caracas, Venezuela
Posts: 2.206
Poder: 21
nlsgarcia Tiene un aura espectacularnlsgarcia Tiene un aura espectacular
bigguntm,

Cita:
Empezado por bigguntm
...el MaskEdit deberia de habilitar el btnCalculate cuando llene todo los caracteres...
Revisa este código:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
   MaskEdit1.EditMask := 'MEP-00000-000;0;_';
end;

procedure TForm1.MaskEdit1Change(Sender: TObject);
begin
   if Length(MaskEdit1.Text) = 8 then
      Button1.Enabled := True;
end;
Este código establece a True la propiedad enabled de un control TButton al ingresar todos los caracteres numéricos en el control TMaskEdit.

Nota: La longitud del control TMaskEdit es 8 dado que esta basada en la longitud de los caracteres de entrada. Si posteriormente requieres el valor entrado con su Mascara de Edición puedes aplicar el siguiente código:
Código Delphi [-]
...
var
   s : String;
begin
   s := Format('MEP-%s-%s',[Copy(MaskEdit1.Text,1,5),Copy(MaskEdit1.Text,1,3)])
end;
Espero sea útil

Nelson.

Última edición por nlsgarcia fecha: 10-03-2013 a las 01:21:33.
Responder Con Cita
  #8  
Antiguo 10-03-2013
alsn alsn is offline
Miembro
NULL
 
Registrado: abr 2012
Posts: 20
Poder: 0
alsn Va por buen camino
Otra posibilidad:

Código Delphi [-]
procedure TForm1.MaskEdit1KeyUp(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  btnCalculate.Enabled := Pos(' ',TMaskEdit(Sender).Text) = 0;
end;

Saludos
Responder Con Cita
  #9  
Antiguo 10-03-2013
ricardopl65 ricardopl65 is offline
Miembro
 
Registrado: nov 2008
Posts: 25
Poder: 0
ricardopl65 Va por buen camino
prueba esto

para que funcione el segundo campo de la propiedad EditMask debe ser 0
EditMask := 'LLL-00000-000;0; ';

Código Delphi [-]
if trim(maskEdit1.EditText)<>'' then 
button1.enabled:=true else
button1.enabled:=false;
Responder Con Cita
  #10  
Antiguo 11-03-2013
bigguntm bigguntm is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 16
Poder: 0
bigguntm Va por buen camino
Hola a todos, gracias a todos por responder, el codigo quedo asi..

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
      with Edit2 do
  begin
    Text     := '';
    EditMask := 'MEP-00000-000;0; ';
    CharCase := ecUpperCase;

Código Delphi [-]
procedure TForm1.Edit2Change(Sender: TObject);
begin
   if Length(Edit2.Text) = 8 then
      btnCalculate.Enabled := True else
      btnCalculate.Enabled := false;

Código Delphi [-]
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
  with Sender as TMaskEdit do
    if SelStart < 13 then
      btnCalculate.Enabled:= (SelStart = 12) and (key <> #8);

Todo anda perfecto, si MaskEdit no tiene los 8 numeros ingresados el btnCalculate esta en false, y si ingresamos los 8 digitos se habilita, esto lo hace Edit2Change, entonces si MEP-56456-456, y borramos el (5), MEP-56456-4_6, el btnCalculate queda habilitado, por eso se usa el Edit2KeyPress, quien hace vulnerable ese efecto, hasta ahi todo funciona correctamente, pero coloco MEP-56456-456, el btn queda habilitado, presiono el btnCalculate, luego le borro el ultimo numero MEP-56456-45_, y cierro el form en btnExit(KillTask), me da una funcion no deseada(error)! lo solucione con

Código Delphi [-]
procedure TForm1.btnExitMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
Edit2.Text     := ' ';
end;

Gracias y Saludos
Responder Con Cita
  #11  
Antiguo 14-03-2013
bigguntm bigguntm is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 16
Poder: 0
bigguntm Va por buen camino
hola a todos de nuevo, el problema que creí haber solucionado, con..
Código Delphi [-]
procedure TForm1.btnExitMouseMove(Sender: TObject; Shift: TShiftState; X,   Y: Integer); begin Edit2.Text     := ' '; end;
se convirtió en un problemon.. ejejejeje

Ahora me da error por casi todo, cuando quedaban con los numeros incompletos, lo logre solucionar con otros maskedit que me enviara la informacion cuando estos queden incompletos, pero necesito que solo se pueda escribir desde el comienzo del edit, cuando haga click y marqe un numero se ingrese al primer campo,
Código Delphi [-]
length(edit1.text) = 0
ya que si se escribe desde cualquier length ejemplo.. MEP-_____-__5 me habilita el btnCalculate,, ='S Disculpen la molestia, saludos
Responder Con Cita
  #12  
Antiguo 14-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola bigguntm.
Cita:
Empezado por bigguntm Ver Mensaje
,.. y cierro el form en btnExit(KillTask), me da una funcion no deseada(error)! ...
Realmente no logro entender claramente la situación, he probado el código:
Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with MaskEdit1 do
  begin
    EditMask  := 'LLL-00000-000;0; ';
    CharCase  := ecUpperCase;
    Text      := '';
    MaxLength := 12;
  end;
  btnCalculate.Enabled:= False;
end;

procedure TForm1.MaskEdit1KeyPress(Sender: TObject; var Key: Char);
begin
   with Sender as TMaskEdit do
    if SelStart < 13 then
      btnCalculate.Enabled:= (SelStart = 12) and (key <> #8);
end;
Parece funcionar correctamente y no recibo ningún mensaje de error al cerrar el form, ¿ A que componente corresponde el evento que mencionas y cuál es el código existente en btnExit ?

Cita:
Empezado por bigguntm Ver Mensaje
...
pero necesito que solo se pueda escribir desde el comienzo del edit, cuando haga click
...
Para ese punto podes hacer:
Código Delphi [-]
procedure TForm1.MaskEdit1Click(Sender: TObject);
begin
  (Sender as TMaskEdit).SelStart:= 0
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #13  
Antiguo 14-03-2013
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Hola,

Creo que la comprobación para habilitar/inhabilitar el botón puede hacerse únicamente usando el evento OnChange del MaskEdit:

Código Delphi [-]
procedure TForm1.MaskEdit1Change(Sender: TObject);
var
  IsValid: Boolean;

begin
  IsValid := true;

  try
    MaskEdit1.ValidateEdit;
  except
    on EDBEditError do
      IsValid := false;
  end;

  btnCalculate.Enabled := IsValid and (Length(MaskEdit1.Text) = 8);
end;

Cuando se llena el MaskEdit, y luego se le borran caracteres, MaskEdit.Text está "lleno" pero es inválido.

Por otra parte, también puede optarse por usar dos controles TEdit para capturar cada una de las partes.

// Saludos
Responder Con Cita
  #14  
Antiguo 15-03-2013
bigguntm bigguntm is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 16
Poder: 0
bigguntm Va por buen camino
Cita:
Parece funcionar correctamente y no recibo ningún mensaje de error al cerrar el form, ¿ A que componente corresponde el evento que mencionas y cuál es el código existente en btnExit ?
lo que pasa es que yo tambien le agregue al Onchange del Edit
Código Delphi [-]
if Length(Edit1.Text) = 8 then
btnCalculate.Enabled = true else
btnCalculate.Enabled = false:

el btnExit contine
Código Delphi [-]
KillTask(miProject):

pero no solo cuando presiono btnExit me da el error, tambien cuando presiono los listbox, otros edits, y memos de mi project, el error sale cuando no termino de escribir en el Maskedit , ejemplo MEP-6____-___.. y hago click en otro lado..

no se si eso tenga que ver, pero con el codigo de escribir, siempre desde el comienzo del edit, pudiera estar listo, manana cuando este en mi pc pruebo el code.. y el de roman, Saludos
Responder Con Cita
  #15  
Antiguo 15-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por roman Ver Mensaje
Creo que la comprobación para habilitar/inhabilitar el botón puede hacerse únicamente usando el evento OnChange del MaskEdit
Es muy probable que estés acertado, al menos veo que resulta mucho más simple desde allí. Por otro lado tengo que destacar que me resultó muy novedoso el código con que encaraste la comprobación .

Otra opción que se me ocurre, esta vez usando el evento OnChange, es:
Código Delphi [-]
procedure TForm1.MaskEdit1Change(Sender: TObject);
begin
  btnCalculate.Enabled:= Length(StringReplace(MaskEdit1.Text, ' ', '', [rfReplaceAll])) = 11;
end;

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #16  
Antiguo 15-03-2013
bigguntm bigguntm is offline
Miembro
NULL
 
Registrado: nov 2012
Posts: 16
Poder: 0
bigguntm Va por buen camino
listo solucione con el escribir desde el principio, les dejo una copia del proyecto para que vean,

http://www.4shared.com/rar/LJuAP5kN/Cal.html

Saludos.

Última edición por ecfisa fecha: 15-03-2013 a las 17:40:35. Razón: Componer enlace a fuentes
Responder Con Cita
  #17  
Antiguo 15-03-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola bigguntm.

Me tomé el atrevimiento de componer el enlace, que por el número de tus mensajes no te está permitido, para que de este modo sea más sencillo acceder a él.

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #18  
Antiguo 15-03-2013
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que sería adecuado que pusieras aquí la solucuión final, ya que se desarrolló aquí. Por otra parte, ese servicio de descargas me pide un número de celular lo cual no me parece correcto.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Excepciones propias andresenlared JAVA 5 07-03-2012 20:33:08
Politicas Erroneas Pascalizado Debates 2 14-07-2007 04:18:56
Crear Clases propias o Usar Existentes jorllazo Debates 19 27-04-2007 03:07:39
no reconoce uses propias Xana Varios 1 13-03-2007 18:17:55
Crear librerias propias en delphi Jan_polero OOP 5 15-05-2004 13:29:04


La franja horaria es GMT +2. Ahora son las 01:08:47.


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
Copyright 1996-2007 Club Delphi