promenneur77
Messages postés16Date d'inscriptionlundi 25 août 2003StatutMembreDernière intervention 4 mai 2008
-
4 mai 2008 à 11:24
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 2021
-
4 mai 2008 à 22:05
bonjour,
je voudrait imposé 4 caractere dans un edit, j'ai reussi a bloquer a 4 caractere mais pas reussi a en obliger 4.
deplus je n'arrive pas non plus a impossé que des chiffres.
si moin de 4 caractere dans edit je souhaite que lorsque l'on clic sur le bouton ca ne face rien et que cela me dise ex: pas 4 chifre
promenneur77
Messages postés16Date d'inscriptionlundi 25 août 2003StatutMembreDernière intervention 4 mai 2008 4 mai 2008 à 12:28
je vous remerci mais j'ai reussi
avec :
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
inherited;
if not (Key in ['0'..'9',Chr(VK_DELETE),Chr(VK_BACK)]) then
Key:=#0;
end;
procedure TForm1.Edit1Exit(Sender: TObject);
begin
if Length(Edit1.Text)<Edit1.MaxLength then
begin
ShowMessage('Il faut 4 chiffres');
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 4 mai 2008 à 12:59
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
inherited; // ?????! pas d'inherited dans un gestionnaire d'evenement!
if not (Key in ['0'..'9',Chr(VK_DELETE),Chr(VK_BACK)]) then
Key:=#0;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8]) then
Key:=#0;
end;
procedure TEdit.CreateParams(var Params: TCreateParams);
const
Alignments : array[TAlignment] of Word = (ES_LEFT, ES_RIGHT, ES_CENTER);
begin
inherited CreateParams(Params);
Params.Style := Params.Style or Alignments[TextAlignment];
if fOnlyNumbers then
Params.Style := Params.Style or ES_NUMBER;
end;
procedure TEdit.SetOnlyNumbers(val: boolean);
begin
if fOnlyNumbers <> val then begin
fOnlyNumbers := val;
RecreateWnd;
end;
end;
procedure TEdit.SetTextAlign(val : TAlignment);
begin
if fTextAlign <> val then
begin
fTextAlign := val;
RecreateWnd;
end;
end;
procedure TForm1.EditXOnChange(Sender: TObject);
var L : integer;
const
EdtCol : array[boolean] of tcolor = (clRed, clBlue);
begin
L := Length(EditX.Text); EditX.Font.Color :EdtCol[L 4];
// ou encore :
{
L := IntToStrDef(EditX.Text, 0);
EditX.Font.Color := EdtCol[(L >= 1000) and (L < 10000)];
}
end;
f0xi
Messages postés4205Date d'inscriptionsamedi 16 octobre 2004StatutModérateurDernière intervention12 mars 202237 4 mai 2008 à 19:34
en quoi c'est mieux ?!
pfff ... la question ne se pose même pas.
mais j'explique quand même :
C'est mieux car tout les Edit on deux nouvelles propriétée qui permet d'aligner le texte ou d'accepter uniquement des entiers et ce parfaitement compatible avec le systeme windows.
partager un gestionnaire d'evenement c'est bien, mais a force c'est un peu relou.
sans parler des inconvegniants.
et s'embeter a repeter des dizaines de fois des SetWindowLong ...
overclassing power!
on peu egalement le deplacer dans une unité qu'on mettra aprés StdCtrls dans les uses ...
chpouf.
et puis bon, appeler des fonctions etc, c'est bien, mais c'est quand même mieux d'apprendre et connaitre cette technique d'overclassing on the fly, non ?