Inspecteur d'objets : atteindre procédures [Résolu]

Signaler
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
-
Bonjour,

J'ai une unité (sans form) (UPrc2008.pas) dans laquelle je stocke tout un tas de procédures et fonctions qui me sont utiles dans plusieurs projets. J'aimerais pouvoir attacher certaines de ces procédures à des contrôles d'une autre unité de mon projet directement par l'inspecteur d'objet.

Par exemple, la procédure suivante me permet de gérer le keypress sur un contrôle censé recevoir un nombre réel :
procedure MyCtrlKeyPress(Sender: TObject; var Key : Char);
begin
     if not (Key in ['0'..'9', #8, ',', '.', #13])
        then Key := #0;
     if (Key = '.')
        or (Key = ',')
        then Key := DecimalSeparator;
end;
Je voudrais poser un edit sur une form d'un projet et, par l'inspecteur d'objets, rattacher directement l'évenement OnKeyPress de cet edit à ma procedure MyCtrlKeyPress...

Avez-vous une petite idée ?
Merci

Simon

3 réponses

Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
13 juin 2020
30
les gestionnaires d'évènements doivent impérativement être disposés dans le control appelant.

fait plutot :

procedure RemapKeyFloat(var Key: char);
begin
  { float string :
     1.5
     1,5
     -1.5
     1.5e-10
     1,5E+10
  }
  if not (Key in ['0'..'9','.',',','e','E','+','-',#13,#8]) then
    key := #0
  else
  if Key in ['.', ','] then
    key := DecimalSeparator;
end;

procedure RemapKeyInt(var Key: char);
begin
  { Int string
    15
    0x0F
    $0F
    -15
  }
  if not (Key in ['0'..'9','a'..'f','A'..'F','-','$','x',#13,#8]) then
    Key := #0;
end;

function ValidEditFloat(Edit: TEdit; var Value: extended): boolean;

const

  Colors : array[boolean] of integer = (clRed, clBlue);

begin

  result := TryStrToFloat(Edit.Text, Value);

  Edit.Font.Color := Colors[result];

end;

function ValidEditInt(Edit: TEdit; var Value: integer): boolean;

const

  Colors : array[boolean] of integer = (clRed, clBlue);

begin

  result := TryStrToInt(Edit.Text, Value);

  Edit.Font.Color := Colors[result];

end;

et ensuite :

procedure TForm1.Edit2KeypPress(sender: TObject; var Key: char);
begin
  RemapKeyFloat(Key);
end;

puis

procedure TForm1.Edit2Change(Sender: TObject);
var V : extended;
begin
  if ValidEditFloat(TEdit(Sender), V) then
    ...
end;

<hr size="2" width="100%" />
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Bonjour fOxi et merci pour ta réponse.

Mais donc a priori, je n'ai pas la possibilité d'atteindre mes procédures et fonctions directement dans l'inspecteur d'objet sur la gestion des événements du contrôle ? (GExpert par exemple arrive bien à "parasiter" Delphi...) Ce qui me ferait quand même gagner un peu de temps...

Simon
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Et au passage (comme j'aime bien comprendre ce que je programme... ),
  { float string :
     1.5
     1,5
     -1.5
     1.5e-10
     1,5E+10
  }
et
  { Int string
    15
    0x0F
    $0F
    -15
  }
ça correspond à quoi ? Juste des commentaires ?

Merci

Simon