Pb avec FindComponent

Résolu
sterne29 Messages postés 6 Date d'inscription mardi 31 janvier 2006 Statut Membre Dernière intervention 6 février 2006 - 31 janv. 2006 à 16:14
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 3 févr. 2006 à 19:47
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

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
31 janv. 2006 à 23:58
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.
3
sterne29 Messages postés 6 Date d'inscription mardi 31 janvier 2006 Statut Membre Dernière intervention 6 février 2006
2 févr. 2006 à 11:08
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);
0
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
3 févr. 2006 à 19:47
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.
0
Rejoignez-nous