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 :

Ouvrir une fiche dynamiquement


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut Ouvrir une fiche dynamiquement
    Bonjour,

    J'essaye d'ouvrir une fiche delphi en repérant sa classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try
        ClassName:= Query.FieldByName('Class').AsString;
        Class2 := TFormClass(FindClass(ClassName));
          with Class2.create(self) do
          showModal;
      except
    raise;
    end;
    Le compilateur affiche le message d'erreur suivant au niveau de la ligne rouge:
    "Valeur de propriété incorrecte"

  2. #2
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Bonjour

    Essaie ce code, il fonctionne chez moi !
    Tu dois enregistrer les classes que tu utilises sinon tu auras une erreur lors de l'exécution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    procedure TFormApp.Button1Click(Sender: TObject);
    Var
     Class2 : TForm;
     fc : tformclass;
    begin
     try
       registerClass(TAboutForm);
       fc := Tformclass(FindClass('TAboutform'));
       Class2 := fc.Create(Self);
       Class2.showModal;
     except
       raise; 
      end;
    end;

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    except raise est un code totalement inutile !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    procedure TFormApp.Button1Click(Sender: TObject);
    Var
      lFormClassName: String; // ClassName étant une propriété de Self, c'est maladroit comme nom de variable locale !
      lFormClass: TFormClass;
    begin
      lFormClassName := Query.FieldByName('Class').AsString;
      lFormClass := GetClass(lFormClassName); // renvoie nil au lieu d'un EClassNotFound !
      if Assigned(lFormClass) then
      begin
        with lFormClass.Create(nil) do
        try
          ShowModal();
        finally
          Free(); 
        end;
      end;
    end;
    Pour le RegisterClass, je suppose qu'il a déjà été fait sinon tu aurais évoqué une EClassNotFound et non EReadError\SInvalidPropertyValue "Valeur de propriété incorrecte"

    Donc cela semble être une erreur de DFM qui contient une valeur que ne gère pas l'un des composants contenus dans le TForm !

    Si tu n'a pas de DFM, utilise CreateNew comme constructeur

  4. #4
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Oui bien sur, j'ai repris son code sans voir ce "pléonasme'"

  5. #5
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    Citation Envoyé par franckcl Voir le message
    Oui bien sur, j'ai repris son code sans voir ce "pléonasme'"
    T'inquiète pas, ma remarque était adressé à sniperpro, j'avais bien noté que l'élément important de ta réponse était RegisterClass !

    De toute façon, c'est un problème de DFM incompatible, pas évident à trouver !
    Faudrait faire à la main un CreateNew + TResourceStream.ReadComponent, il est peut-être plus précis

  6. #6
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 134
    Points : 42
    Points
    42
    Par défaut
    Vous avez raison ça marche avec des nouvelles fiches, mais pas avec les fiches existantes. Pouvez-vous m'expliquer d'avantage ce que je pourrais faire

  7. #7
    Membre averti Avatar de franckcl
    Homme Profil pro
    Developpeur Delphi
    Inscrit en
    Septembre 2004
    Messages
    516
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Developpeur Delphi
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Septembre 2004
    Messages : 516
    Points : 443
    Points
    443
    Par défaut
    Il faudrait que tu t'expliques un peu plus sur ce que tu veux faire exactement.

    Quand tu dis "fiche existante", oui bien sur il faut que la fiche existe.
    D'ailleurs dans l'exemple que je t'ai donné avec TAboutform, pour que ça fonctionne, il faut créer d'abord une fiche du type TAboutForm que tu peux ensuite supprimer ou non de le liste des fiches qui sont créées automatiquement (Menu projet/options/fiches ou alors dans le source du projet).

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 612
    Points : 25 303
    Points
    25 303
    Par défaut
    Citation Envoyé par sniperpro Voir le message
    Vous avez raison ça marche avec des nouvelles fiches, mais pas avec les fiches existantes. Pouvez-vous m'expliquer d'avantage ce que je pourrais faire
    Tes DFM ont changés par rapport à tes objets, peut-être une version de package différent ...

    Vérifie si l'IDE charge correctement tes fenêtres (ouvre-les TOUTES) puis reconstruit ton projet

    Il faut savoir que Delphi ne vérifie pas à la compilation la cohérence des DFM mais seulement à l'ouverture !
    Ainsi si l'on change des objets, je pense à Indy 9 vers Indy 10, les propriétés changent de valeur possible d'où cette erreur

Discussions similaires

  1. Comment ouvrir une fiche dans un conteneur ?
    Par Sub0 dans le forum Codes sources à télécharger
    Réponses: 1
    Dernier message: 01/02/2013, 10h10
  2. [WD15] Ouvrir une fiche liée
    Par f.combes dans le forum WinDev
    Réponses: 8
    Dernier message: 09/11/2011, 16h44
  3. impossible d'ouvrir une fiche par utilisateur
    Par delfinition dans le forum Bases de données
    Réponses: 10
    Dernier message: 21/03/2010, 08h05
  4. Ouvrir une fiche au lieu d'une autre
    Par AmisNoob dans le forum Débuter
    Réponses: 2
    Dernier message: 22/10/2009, 21h58
  5. [AC-2002] Ouvrir une fiche a partir d'un formulaire mode feuille
    Par Alinou64 dans le forum VBA Access
    Réponses: 2
    Dernier message: 10/09/2009, 11h38

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