Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Solo letras y numeros en edit (https://www.clubdelphi.com/foros/showthread.php?t=2037)

oesteve 07-07-2003 10:05:57

Solo letras y numeros en edit
 
Hola amigos, os escribo porque no se como hacer para que dentro de un edit solo pueda poner letras y numeros y en caso de que el caracter introducido no sea ni letra ni numero, sacar un mensaje informativo advirtiendolo.

Gracias.

andres1569 07-07-2003 10:42:34

Hola:

Mírate este hilo, donde se dan diversas opciones para controlar la entrada de caracteres en un TEdit o en un TMaskEdit:

http://www.clubdelphi.com/foros/show...&threadid=1823

Posiblemente la parte que te interese sea la de interceptar el evento OnKeyPress y ahí controlas que los caracteres introducidos sean de tu gusto, si no lo son haces la asignación Key = #0, y anulas la pulsación. Revisa también los caracteres de las teclas Retroceso y Suprimir, que no debes anular normalmente.

migueweb 19-05-2010 18:35:20

Solo números o solo letras
 
Hola amigos, estoy hace unos días tratando de lograr que en un edit, solo se puedan introducir texto o solo números y no lo he logrado, he probado las variantes aquí vistas y no me han funcionado, yo trabajo con delphi 7, necesito su ayuda pues es un proyecto de mi escuela.

fidel 19-05-2010 18:54:28

Si buscas en el foro encontrarás algo como esto

En el evento OnKeyPress del edit pones:

para solo números
Código Delphi [-]
  if ( StrScan('0123456789'+chr(7)+chr(8), Key) = nil ) then  Key := #0;

sustituye 0123456789 por los caracteres que quieras que solo admita

migueweb 19-05-2010 22:56:03

Solo números o solo letras
 
Perfecto, muchas gracias, ya esta haciendo lo que deseaba con el edit para solo admitir numeros, ahora como hago para que solo me admita letras, porque de usar este tendría que utilizar o mejor dicho poner todas las vocales del abecedario tanto las minusculas como las mayusculas y seria muy grande el codigo

fidel 20-05-2010 01:06:34

Tampoco son tantas, alrededor de 50, pero si no hazlo así, con pitido incluido en caso de no pulsar letra.
Código Delphi [-]
if not (key in ['a'..'z','A'..'Z', #7, #8, #13]) then 
begin 
  Key := #0; 
  Beep; 
end;

migueweb 20-05-2010 17:03:41

Solo números o solo letras
 
Gracias ya todo esta resuelto por esa parte ahora explicame algo si yo quiero sacar el promedio de números que se encuentran en tres edit distintos y que me muestre el resultado en un cuarto como seria

fidel 20-05-2010 20:07:06

Deberías saber sacar la media de tres números: se suman los tres y se divide entre 3

Si son números enteros lo que entras en los edits, si no cambia StrToInt por StrToFloat
Código Delphi [-]
ShowMessage( FloatToStr ( StrToInt(Edit1.Text) + StrToInt(Edit2.Text) + StrToInt(Edit3.Text) ) / 3 ) );
Va de memoria y sin comprobar, revisa los paréntesis.

migueweb 20-05-2010 23:08:56

Solo números o solo letras
 
Gracias colega me fue de mucha ayuda, ya resolvi la tarea completa aquí te dejo como resolvi lo del promedio o la forma en que lo hice

Edit10.Text := FloatToStr((StrToFloat(Edit2.text)+StrToFloat(Edit5.text)+StrToFloat(Edit8.text))/3)

Y este es el codigo completo de lo que hice:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, jpeg, Mask, ToolEdit, CurrEdit;

type
TForm1 = class(TForm)
Bevel1: TBevel;
Button1: TButton;
GroupBox1: TGroupBox;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
Label2: TLabel;
Label3: TLabel;
Edit3: TEdit;
GroupBox3: TGroupBox;
Panel3: TPanel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Edit4: TEdit;
Edit6: TEdit;
GroupBox2: TGroupBox;
Panel2: TPanel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Edit7: TEdit;
Edit9: TEdit;
Bevel2: TBevel;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Edit10: TEdit;
Edit11: TEdit;
Edit12: TEdit;
Button2: TButton;
Image1: TImage;
Edit2: TEdit;
Edit5: TEdit;
Edit8: TEdit;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
procedure Edit8KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Edit9KeyPress(Sender: TObject; var Key: Char);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit7KeyPress(Sender: TObject; var Key: Char);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);


private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
close;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
I: Integer;
begin
for i := 0 to ComponentCount -1 do
if Components[i] is TEdit then
TEdit(Components[i]).Text := '';
end;

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
if ( StrScan('0123456789,'+chr(7)+chr(8), Key) = nil ) then Key := #0;
end;

procedure TForm1.Edit8KeyPress(Sender: TObject; var Key: Char);
begin
if ( StrScan('0123456789,'+chr(7)+chr(8), Key) = nil ) then Key := #0;
end;

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
if ( StrScan('0123456789'+chr(7)+chr(8), Key) = nil ) then Key := #0;
end;

procedure TForm1.Edit9KeyPress(Sender: TObject; var Key: Char);
begin
if ( StrScan('0123456789'+chr(7)+chr(8), Key) = nil ) then Key := #0;
end;

procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
if ( StrScan('0123456789'+chr(7)+chr(8), Key) = nil ) then Key := #0;
end;



procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['a'..'z','A'..'Z',' ','á','é','í','ó','ú','ü','Á','É','Í','Ó','Ú','Ü', #7, #8, #13]) then
begin
Key := #0;
Beep;
end;
end;

procedure TForm1.Edit7KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['a'..'z','A'..'Z',' ','á','é','í','ó','ú','ü','Á','É','Í','Ó','Ú','Ü', #7, #8, #13]) then
begin
Key := #0;
Beep;
end;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in ['a'..'z','A'..'Z',' ','á','é','í','ó','ú','ü','Á','É','Í','Ó','Ú','Ü', #7, #8, #13]) then
begin
Key := #0;
Beep;
end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Edit10.Text := FloatToStr((StrToFloat(Edit2.text)+StrToFloat(Edit5.text)+StrToFloat(Edit8.text))/3)
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
Edit11.Text := FloatToStr((StrToFloat(Edit3.text)+StrToFloat(Edit9.text)+StrToFloat(Edit6.text))/3)
end;

procedure TForm1.Button5Click(Sender: TObject);
var
ma:real;
begin
ma:=StrToFloat(Edit2.text);
if ma<StrToFloat(Edit5.Text) then
ma:=StrToFloat(Edit5.Text);
if ma<StrToFloat(Edit8.Text) then
ma:=StrToFloat(Edit8.Text);
Edit12.Text:= FloatToStr(ma);
end;
end.

fidel 20-05-2010 23:35:16

Si pones código delphi metelo entre las etiquetas, tienes aquí donde escribes las consultas un icono de delphi (el penúltimo), click sobre el y te salen dos etiquetas de principio y fin, pegas el código entre ellas, de esa forma se puede ver bien, si no es un lio.

El procedimiento de entrar solo números basta con que lo escribas una sola vez desde un edit, en el resto de los edits que lo utilizan vas a la ventanilla de su OnKeyPress y seleccionas el nombre del evento del primero y ya está.

Lo mismo para el procedimiento de entrar solo letras, con uno basta, el resto se pone el nombre del que ya está hecho.

migueweb 20-05-2010 23:44:15

Solo números o solo letras
 
La primera partec de lo que me dijiste no lo entiendo la segunda si

fidel 21-05-2010 01:56:49

Me refiero a cuando pongas código aquí en este foro, te quedaría así

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  close;
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  I: Integer;
begin
  for i := 0 to ComponentCount -1 do
  if Components[i] is TEdit then
  TEdit(Components[i]).Text := '';
end;

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
  if ( StrScan('0123456789,'+chr(7)+chr(8), Key) = nil ) then Key := #0;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  if not (key in ['a'..'z','A'..'Z',' ','á','é','í','ó','ú','ü','Á','É','Í','Ó','Ú','Ü', #7, #8, #13]) then
  begin
    Key := #0;
    Beep;
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Edit10.Text := FloatToStr((StrToFloat(Edit2.text)+StrToFloat(Edit5.text)+StrToFloat(Edit8.text))/3)
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  Edit11.Text := FloatToStr((StrToFloat(Edit3.text)+StrToFloat(Edit9.text)+StrToFloat(Edit6.text))/3)
end;

procedure TForm1.Button5Click(Sender: TObject);
var
  ma:real;
begin
  ma:=StrToFloat(Edit2.text);
  if mathen
    ma:=StrToFloat(Edit5.Text);
  if mathen
    ma:=StrToFloat(Edit8.Text);
  Edit12.Text:= FloatToStr(ma);
end;

end.

migueweb 21-05-2010 06:29:45

Como puedo quitar lo que esta después de la coma o redondear el número
 
Solo me falta arreglar algo en el programita que hice, necesito saber como yo puedo quitar en el promedio de edad todo lo que hay después de la coma es decir en ocaciones me queda el promedio de edad 35,66667, yo quiero que solo me quede 35 o que me redondee a 36, es esto posible

fidel 21-05-2010 18:19:56

Mira en la ayuda
Fix
Round
FormatFloat

y utiliza la que te interese

ecfisa 21-05-2010 21:58:36

Hola migueweb.

Esta función que utiliza Round,
Código Delphi [-]
function Redondea(Num: Double; NDec:Byte): Double;
begin
  Result:= Round(Num * Exp(ln(10)*NDec)) / Exp(ln(10)*NDec);
end;
te devuelve el número real con la cantidad de cifras decimales que le indiques en el parámetro NDec.

Saludos.

ecfisa 21-05-2010 22:37:55

Hola de nuevo.

Me acordé que si no sos partidario del fundamentalismo, podes usar la función SimpleRoundTo, pero debes incluir la unit Math.

Saludos.

migueweb 24-05-2010 20:16:49

Solo números o solo letras
 
Después de mucho trabajo, pude ver la ayuda de delphi 7 porque tengo Seven instalado y no me abria la ayuda y no logro saber como funciona todo lo que me han dicho que pruebe, ahora les voy a explicar detalladamente que deseo

yo tengo este procedimiento

procedure TForm1.Button4Click(Sender: TObject);
begin
Edit11.Text := FloatToStr((StrToFloat(Edit3.text)+StrToFloat(Edit9.text)+StrToFloat(Edit6.text))/3)
end;

y deseo que el resultado me lo de como un número entero sin decimales, es decir 35, 34, 32 como podría hacerlo.

ecfisa 24-05-2010 23:55:59

Hola de nuevo.

En tu caso, basta con agregar lo que te pongo en negrita:
Código:

  Edit11.Text := FloatToStr(Round((StrToFloat(Edit3.text)+StrToFloat(Edit9.text)+
    StrToFloat(Edit6.text))/3));

Saludos.

migueweb 25-05-2010 19:42:34

Gracias a los que me han ayudado en la realización de este pequeño proyecto que me ayudaron a hacer

Ahora tengo otra pregunta quiero que este procedimiento

procedure TForm1.Button3Click(Sender: TObject);
begin
Edit10.Text := FloatToStr((StrToFloat(Edit6.Text)+StrToFloat(Edit8.Text)+StrToFloat(Edit9.Text))/3)
end;

Me muestre solo 2 lugares después de la coma(,) es decir 456,25

fidel 25-05-2010 20:34:28

Con Round poniendo los decimales que quieres.
Con FormatFloat te formatea también los miles si quieres
FormatFloat('##,####,##0.00', valor);
puedes añadir un literal de lo que es
FormatFloat('##,####,##0.00 metros', valor);


La franja horaria es GMT +2. Ahora son las 01:22:32.

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