Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-08-2019
Avatar de ethangio
ethangio ethangio is offline
Miembro
 
Registrado: jul 2008
Posts: 63
Poder: 16
ethangio Va por buen camino
Procedimiento externo

Buen día a todos y gracias por la ayuda de antemano.

Tengo un procedimiento llamado "Numero" declarado en mi Form, el cual cuando selecciono el TEdit puedo asignarle éste procedimiento en el evento OnKeyPress.

Código Delphi [-]
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    procedure Numero(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Numero(Sender: TObject; var Key: Char);
begin
  if (pos('.',(Sender as TEdit).Text)=0) then
  begin
    if not CharInSet(Key, ['0'..'9','.',#8]) then key:=#0;
 end
 else
 if not CharInSet(Key, ['0'..'9',#8]) then key:=#0;
end;

end.




Como es un procedimiento que ocuparé en otros Form's, he creado un archivo llamado proc_func.pas y he puesto ahí el procedimiento Numero, en la clausula USES de mi Form puse el archivo proc_func.pas.

La cuestión es que cómo puedo referenciar a ese procedimiento y asignárselo a al evento OnKeyPress del Edit sin tener que poner el código:


Código Delphi [-]
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
   proc_func.Numero(Sender, Key); 
end;

Sino asignárselo de manera directa como en la imagen anterior.


Muchas gracias.

Última edición por ethangio fecha: 15-08-2019 a las 09:02:19.
Responder Con Cita
  #2  
Antiguo 15-08-2019
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Hola, lo que muestras se puede solucionar creando Forms que hereden de otro Form. Pero no se si sea lo correcto del todo. Esas validaciones las puedes hacer usando algún otro componente como el SpinEdit o hasta creando tu propio componente cuya base sea el TEdit (Como en este pequeño ejemplo)

Bueno, de todos modos así puedes hacer lo que quieres:

UFormBase:

Código Delphi [-]
unit UFormBase;

interface

..

type
  TFormBase = class(TForm)
    procedure EsNumero(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormBase: TFormBase;

implementation

{$R *.dfm}

{ TForm2 }

procedure TFormBase.EsNumero(Sender: TObject; var Key: Char);
begin
  if (pos('.',(Sender as TEdit).Text)=0) then
  begin
    if not CharInSet(Key, ['0'..'9','.',#8]) then key:=#0;
  end
  else
   if not CharInSet(Key, ['0'..'9',#8]) then key:=#0;
end;

end.

Unit1:
Código Delphi [-]
unit Unit1;

interface

..

type
  TForm1 = class(TFormBase)
    Edit1: TEdit;
    procedure EsNumero(Sender: TObject; var Key: Char);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//Este procedimiento se puede asociar desde Inspector de Objetos 
procedure TForm1.EsNumero(Sender: TObject; var Key: Char);
begin
  inherited; //Aquí llama el procedimiento TFormBase.EsNumero de UFormBase

  // Comportamiento propio de TForm1
end;

end.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #3  
Antiguo 15-08-2019
Avatar de ethangio
ethangio ethangio is offline
Miembro
 
Registrado: jul 2008
Posts: 63
Poder: 16
ethangio Va por buen camino
Gracias por tu ayuda [movorack]


Probé con el componente SpinEdit pero no me sirve porque lo que necesito capturar en los TEdit son números reales, no solo enteros. A menos que no haya sabido configurarlo adecuadamente.

Probé con el código que me proporcionarte y no me funcionó, revisé varias veces y no me valida solo números en el procedimiento donde coloco inherited .

Lo que pretendo hacer es no generar más código en los Form's.

Última edición por ethangio fecha: 15-08-2019 a las 20:45:43.
Responder Con Cita
  #4  
Antiguo 15-08-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.022
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Propiedad ValueType
Responder Con Cita
  #5  
Antiguo 15-08-2019
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Poder: 20
movorack Va camino a la famamovorack Va camino a la fama
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Propiedad ValueType
Ese es del TJvSpinEdit

__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita
  #6  
Antiguo 16-08-2019
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.022
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por movorack Ver Mensaje
Ese es del TJvSpinEdit

Pues tendrá que usar ese
Responder Con Cita
  #7  
Antiguo 16-08-2019
Avatar de ethangio
ethangio ethangio is offline
Miembro
 
Registrado: jul 2008
Posts: 63
Poder: 16
ethangio Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pues tendrá que usar ese



... Les agradezco de corazón el tiempo que se tomaron para leer este hilo y la ayuda prestada.


Soy de la idea de evitar usar componentes de terceros a menos que sean muy necesarios y en este caso pues creo que no lo es y tendré que hacer en cada Form un evento OnKeyPress para todos los TEdit que requieran la validación :

Código Delphi [-]

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); 
begin

      proc_func.Numero(Sender, Key);
end;


Saludos desde Puebla, México.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
llamar procedimiento dentro de otro procedimiento novato_erick SQL 23 28-10-2012 00:33:02
condicionar un procedimiento dentro de otro procedimiento yossi Varios 7 17-05-2010 11:47:14
Ir a un .exe externo Matrixnb2 Internet 1 16-05-2007 12:20:24
Ayuda, como llamar a un procedimiento desde otro procedimiento? Ariatna Varios 1 01-02-2005 05:05:35
Componente de RX externo yusnerqui Varios 1 19-04-2004 16:16:24


La franja horaria es GMT +2. Ahora son las 14:07:27.


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