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

Composants VCL Delphi Discussion :

Modifier une unité TFrame avec une unité TForm


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Par défaut Modifier une unité TFrame avec une unité TForm
    Bonjour,

    Je développe sous delphi 2005. Je veux faire communiquer deux unités de mon projet une unité une unité de class (TFrame) et une autre classe de class (TForm) contenant une classe TThread

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    unit FrameExUnit;
     
    TFrameExUnit = class(TFrame)
    public
      procedure changeFrame;
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    unit FormExUnit;
     
    TFormExUnit = class(TForm)
     
     
    implementation
     
    uses
       FrameExUnit;
     
    type
      TExThread = class(TThread)
     
    private
      fframe : TFrameExUnit;
      procedure update;
      procedure Execute;
    var
       ExThread : TExThread;
     
    procedure TExThread.Update;
    begin
      fframe.changeFrame;
    end;
     
     
    procedure TExThread.Execute;
    begin
      { --------- }
     
      synchronize(update);
    end;
    Le code du thread s’exécute normalement jusqu'à la ligne synchronize(Update) où j'ai une violation d’accès. Plus exactement la violation est provoqué à la ligne fframe.changeFrame;. Pourtant je définis bien fframe comme Type TFrameExUnit. mais l’exécution de la méthode me retourne cette violation d'accès.

    Je voudrais savoir si vous aviez une solution à ce problème où une autre méthode me permettant d'appeler des procédures TFrame à partir de TForm

    Merci

  2. #2
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    A quel moment est créé fframe?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 157
    Par défaut
    ffram est de Type TExFrameUnit qui est une frame créée au démarrage de l'application. L'appel au thread et donc à la procédure Update où est appelé fframe est exucté durant l'application suite à un événement (click button)

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 934
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 934
    Par défaut
    fframe est une variable du thread. Donc à quel moment est-elle initialisée ?

    ExThread une variable globale ? surprenant (ou alors il faut un Event de démarrage) !
    Execute qui n'est pas override ? Ça ne peut pas marcher !

    J'ai un gros doute sur le fonctionnement.

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 089
    Par défaut
    Il y a une confusion l'instance pointée par fframe et l'instance créée par CreateForm dans le DPR

    fframe est à nil d'où la violation d'accès !


    Je te déconseille vivement de lier le TThread et la TFrame !
    Il serait bien plus élégant que le TThread expose des Evenements (même un simple TNotifyEvent)
    C'est le "propriétaire" du thread qui fourni les gestionnaires d'Evenements !
    Voici un sujet qui illustre cela : Problème de synchronisation entre Thread et VCL


    Cela permet d'avoir un code avec un couplage faible et éviter des dépendances circulaires
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

Discussions similaires

  1. [AJAX] Modifier les header (PHP) avec une requête XMLHttpRequest?
    Par Prosis dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 09/09/2008, 00h34
  2. [AJAX] Modifier deux balises <div> avec une fonction innerhtml
    Par johnson95 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/08/2008, 18h55
  3. Modifier deux balises div avec une fonction innerhtml
    Par johnson95 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 12/08/2008, 17h03
  4. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 00h55
  5. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24

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