Pb avec FindComponent [Résolu]

Signaler
Messages postés
6
Date d'inscription
mardi 31 janvier 2006
Statut
Membre
Dernière intervention
6 février 2006
-
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
-
Bonjour,
Débutant (en Delphi 3)
j'ai un message d'erreur lors de l'excecution du code ci-dessous.
Const
TabloLigne1: array[1..3] of String = ('Edit_L1_C1_G1_01','Edit_L1_C2_G1_02','Edit_L1_C3_G1_03');
TabloLigne2: array[1..3] of String = ('Edit_L2_C1_G1_10','Edit_L2_C2_G1_11','Edit_L2_C3_G1_12');


procedure TForm1.TestClick(Sender: TObject);
Var Tablo:Tcomponent;essai:String[2]
begin
if essai='Mu' then Tablo:=TabloLigne1 else Tablo:=TabloLigne2;


if Tedit(FindComponent(Tablo[2])).text[1] = '1' then ... end;
end;

Je pense que Tablo ne doit pas etre de type Tcomponent mais je ne trouve pas la solution. J'ai aussi essayé avec String. Le programme s'execute correctement si je ne n'utilise pas la variable Tablo et que je remplace par cette ligne :
if Tedit(FindComponent(TabloLigne1[2])).text[1] = '1' then ... end;

3 réponses

Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Tu commets quelques erreurs qui peuvent avoir pour effet immédiat de provoquer une magnifique AV.
Voir commentaires avec le code revu :

type
//Déclaration d'un type tableau de 3 chaines
  TTablo =   array [1..3] ofstring;

const
  TabloLigne1: TTablo  = ('Edit_L1_C1_G1_01', 'Edit_L1_C2_G1_02',
    'Edit_L1_C3_G1_03');
  TabloLigne2: TTablo =  ('Edit_L2_C1_G1_10', 'Edit_L2_C2_G1_11',
    'Edit_L2_C3_G1_12');

 procedure  TForm1.TestClick(Sender: TObject);
var
  Tablo: TTablo;
  essai: string[2];
  AComp: TComponent;
begin
{ta variable essai est vide à ce niveau !!
  Donc Tablo est toujours à TabloLigne2}
if essai  = 'Mu'then
    Tablo :=  TabloLigne1
  else
    Tablo := TabloLigne2;

  //Recherche d'un composant existant
  AComp := FindComponent(Tablo[2]);
  //S'il existe et que c'est bien un TEdit...
 if  Assigned(AComp) and (AComp is TEdit) then
begin
//là seulement tu peux transtyper AComp
if Tedit(AComp).Text[1]  = '1'then
//...
end;
end;


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
Messages postés
6
Date d'inscription
mardi 31 janvier 2006
Statut
Membre
Dernière intervention
6 février 2006

Merci, j'ai bien avancé dans mon programme grace à tes conseils. Je me retrouve maintenant bloqué à cause de Types incompatibles : TTablo et String.


je dois, à partir d'une chaine et d'un nombre avoir, TabloLigne1, Tabloligne2, ...


Exemple :


Tablo:='TabloLigne'+IntToStr(i);
Messages postés
4297
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
31
Avec la fonction FindComponent il est possible de retrouver un composant.
Hélas, il n'existe aucune fonction pour retrouve une variable. De toutes façons, ça n'aurait pas vraiment de sens dans le cas d'un langage compilé.
Tu peux toujours régler le problème de la façon suivante :
if 'TabloLigne'+IntToStr(i) = 'TabloLigne1' then
Tablo := Tablo1
else
Tablo := Tablo2;


<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.