Inspecteur d'objets : atteindre procédures

Résolu
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 19 août 2008 à 16:44
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 - 21 août 2008 à 18:55
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

f0xi Messages postés 4205 Date d'inscription samedi 16 octobre 2004 Statut Modérateur Dernière intervention 12 mars 2022 35
21 août 2008 à 16:41
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%" />
3
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
21 août 2008 à 18:52
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
0
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
21 août 2008 à 18:55
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
0
Rejoignez-nous