IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Creation de variable a la volée ...


Sujet :

Langage Delphi

  1. #1
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut Creation de variable a la volée ...
    Bonjour.

    Dans mon programme je voudrait pouvoir definir une variable de type diferent en fonction d'un test ...

    ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if True then
    begin
       MyVar : TLabel;
       MyVar := TLabel.Create(Self);
    end
    else
    begin
       MyVar : TEdit;
       MyVar := TEdit.Create(Self);
    end;
    Est-ce possible ou pas ?

  2. #2
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut
    Si tes deux classes héritent du même ancêtre, oui. C'est facile.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    MyVar: TAncetre;
    if True 
    then MyVar := TClass1.create
    else MyVar := TClass2.Create;
    Dans ton cas, ils sont tous enfant de TControl. Mais tu devras vérifier le type réel avant d'utiliser les méthodes et propriétés des classes au-dessus de TControl.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 111
    Points : 119
    Points
    119
    Par défaut
    Est ce qu'il n'y a pas un type Variant qui permet de ne pas declarer le type des le debut?

  4. #4
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Genial ! Merci !

    Les deux heritent donc de TOleControl.
    Mon souci maintenant est que TOleControl ne contient pas la fonction "LoadFile" qui elle est presente dans TPdf et TAcroPdf..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       if (GetAcrobatReaderVersion = 7) then
          ViewerPDF := TAcroPdf.Create(self)
       else
          ViewerPDF := TPDF.Create(self);
     
       ViewerPDF.LaodFile('C:\temp.pdf');
    Comment faire ?

  5. #5
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut
    Comme la variable semble être un objet, elle doit juste être déclaré comme l'ancêtre.

    Mais si c'est plutôt du Integer et String, alors, le Variant est une option (mais perso, j'aime pas trop le variant. Faut peut-être essayer avec une classe qui gère cela...)

  6. #6
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Gné ??

  7. #7
    Membre régulier
    Profil pro
    Ingenieur developpement
    Inscrit en
    Septembre 2002
    Messages
    175
    Détails du profil
    Informations personnelles :
    Âge : 55
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingenieur developpement

    Informations forums :
    Inscription : Septembre 2002
    Messages : 175
    Points : 106
    Points
    106
    Par défaut
    Tu dois utiliser le LoadFile de ta classe descendente car elle n'existe pas en virtuel dans le TOleControl
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (GetAcrobatReaderVersion = 7) then 
          ViewerPDF := TAcroPdf.Create(self) 
       else 
          ViewerPDF := TPDF.Create(self); 
    if ViewerPDF is TAcroPdf then
       TAcroPdf(ViewerPDF).LoadFile('C:\temp.pdf')
    else if ViewerPDF is TPDF then
       TPDF(ViewerPDF).LoadFile('C:\temp.pdf');

  8. #8
    Membre confirmé
    Avatar de Manopower
    Inscrit en
    Décembre 2003
    Messages
    516
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 516
    Points : 453
    Points
    453
    Par défaut
    Citation Envoyé par SubZero2
    Genial ! Merci !

    Les deux heritent donc de TOleControl.
    Mon souci maintenant est que TOleControl ne contient pas la fonction "LoadFile" qui elle est presente dans TPdf et TAcroPdf..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       if (GetAcrobatReaderVersion = 7) then
          ViewerPDF := TAcroPdf.Create(self)
       else
          ViewerPDF := TPDF.Create(self);
     
       ViewerPDF.LaodFile('C:\temp.pdf');
    Comment faire ?
    Il faut faire comme ça je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var
      ViewerPdf : TOleControl;
    begin
    if (GetAcrobatReaderVersion = 7) then
    begin
      ViewerPDF := TAcroPdf.Create(self)
      (ViewerPDF as TAcroPdf).LoadFile('C:\temp.pdf');
    end
    else
    begin
      ViewerPDF := TPDF.Create(self);
      (ViewerPDF as TPdf).LoadFile('C:\temp.pdf');
    end;
    Que les puristes me reprennent si je me trompe, mais je crois bien que c'est le principe du Polymorphisme.

    Bon courage !

  9. #9
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    Okayyyy !!!

    Fallait le dire !

    Merci beaucoup pour vos reponse !

  10. #10
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    258
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 258
    Points : 156
    Points
    156
    Par défaut
    En gros, que dois-tu faire? Créer à la volée un TEdit ou un TLabel, ou alors est-ce une variable String ou Integer.

    Parce que en Delphi, TEdit et TLabel ont un ancêtre commun qui est TControl. Donc tu peux déclarer ta variable comme du type TControl puis lors du create, donner le type que tu veux (TLabel ou TEdit).

    Mais attention, comme la variable est de type Tcontrol, tu dois faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if MyVar is TEdit then (Myvar as Tedit).Clear;
    Parce que la methode Clear n'appartient pas à TControl.

    Est-ce plus clair?

    [Edit] Désolé, j'ai raté l'épisode sur le PDF car j'étais en train de répondre à ta question plus haut...[/Edit]

  11. #11
    Débutant

    Inscrit en
    Décembre 2003
    Messages
    166
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 166
    Points : 120
    Points
    120
    Par défaut
    pas de probleme eponette !

    En effet, je me bat avec Acrobat et ses ActiveX / Dll.
    En gros, pour situer le probleme :
    Jusqu'a la version 6 d'acrobat, l'activeX fourni est pdf.ocx et maintenant a partir de la 7 "l'activeX" est : AcroPdf.dll
    Trop malin chez Adobe,

    Donc, bah j'importe les 2 libraries et je creer ce qu'il faut en fonction de ce qu'il y a d'installé sur le poste client

    encore !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. lire les variables locales à la volée
    Par fedia76 dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 03/09/2007, 09h16
  2. pb creation de variable
    Par captainamerica75 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/04/2007, 09h14
  3. Creation de variables a partir de variables
    Par Quatsch dans le forum C
    Réponses: 9
    Dernier message: 27/05/2006, 14h35
  4. [langage] Création de variable d'environnements
    Par Smaugg dans le forum Langage
    Réponses: 20
    Dernier message: 26/04/2004, 09h32
  5. [VB6] creation de variable de type string dynamiquement
    Par da40 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 12/06/2003, 16h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo