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
31
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
31
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