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 :

Violation d'acces lors d'une destruction d'un composant


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut Violation d'acces lors d'une destruction d'un composant
    Delphi 2005
    Composants : TjvCaptionPanel, TWebbrowser, ScrollBox

    Je créés dynamiquement dans une scrollbox, un jvCaptionPanel qui lui même recoit un WebBrowser.
    Je gère mes actions et le problème survient lors de la destruction des composants.

    EOSError, erreur système. code 5 : Accès refusé

    Voici ma procédure de destruction des composants

    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
     
    procedure DestroyItems(sName : String);
    var
      i,j : integer;
      webCompo,panelCompo : TControl;
    begin
     
     PanelCompo := TJvCaptionPanel(frmMain.ScrollBox1.FindComponent('jvcn' + sName));
     try
       WebCompo := TWebbrowser(PanelCompo.FindComponent('web'+ sName));
       TWebBrowser(webCompo).OnNavigateComplete2 := nil;
       TOleControl(WebCompo).Free;
     finally
       PanelCompo.Free;
     end;
    end;
    J'ai essayé avec TOleControl().free, TControl.Free et WebCompo.Free, j'ai toujours une erreur au moment ou je detruis le jvCaptionPanel.

    Si quelqu'un voit d'où vient le problème ^^

    Tant que j'y suis la procedure de construction

    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
    33
    34
    35
    36
     
    procedure CreateItems(sName : string;lst : TStringList);
    var
      jvcnPanel : TjvCaptionPanel;
      WebB : TWebBrowser;
      Compo : TComponent;
     
      i : integer;
    begin
     
      jvcnPanel := TJvCaptionPanel.Create(frmMain.ScrollBox1);
      With jvcnPanel do
      begin
        Align := alTop;
        Buttons := [capRestore];
        CaptionPosition := dpTop;
        Name := 'jvcn' + sName;
        OutlookLook := true;
        Height := 200;
        Parent := frmMain.ScrollBox1;
        Caption := sName;
        Resizable := False;
        Locked := True;
        Visible := True;
      end;
     
      Compo := TJvCaptionPanel(frmMain.ScrollBox1.findComponent('jvcn' + sName));
     
      WebB := TWebBrowser.Create(Compo);
      WebB.align := alClient;
      WebB.Tag := 1;
      WebB.Visible := True;
      WebB.OnNavigateComplete2 := frmMain.WBNavigateComplete2;
       TControl(WebB).Parent := TWinControl(Compo);
       TControl(WebB).Name := 'web' + sName;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  2. #2
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    je mettrais plutot

    TWebCompo.Free au lieu de TOleControl.Free, mais l'erreur n'est pas là je pense, puisque de toute manière le Free le plus jeune (parents/enfants...) est appelé en principe.

    Peut-ont voir l'allocation, est-ce que le proprietaire et le parent sont bien défini ?
    as-tu vérifié que les FindComponent renvoie un objet, un objet de la bonne classe ?
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  3. #3
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    ah bin entre temps tu as édité ton post
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  4. #4
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Mets Self.Owner pour les 2 composants comme propriétaire plutot... bien que les parent soit le scrollBox et Compo, c'est souvent préférable sauf cas vraiment particulier
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  5. #5
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jvcnPanel := TJvCaptionPanel.Create(Self.Owner); 
     
    WebB := TWebBrowser.Create(Self.Owner);
    Tes composants seront détruits d'office par le gestionnaire, tu n'as pas besoin de les détruire (je crois bien, j'en suis pratiquement sur, à vérifier m'en souviens plus)


    Bin, j'ai révé ou tu as retiré ton dernier post ???
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Problème avec le self ^^ je suis dans une unité et j'ai jamais su laquel il fallait mettre dans les uses
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par TicTacToe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    jvcnPanel := TJvCaptionPanel.Create(Self.Owner); 
     
    WebB := TWebBrowser.Create(Self.Owner);
    Tes composants seront détruits d'office par le gestionnaire, tu n'as pas besoin de les détruire (je crois bien, j'en suis pratiquement sur, à vérifier m'en souviens plus)


    Bin, j'ai révé ou tu as retiré ton dernier post ???
    Oui, oui, j'avais mal lu ^^
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  8. #8
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Les composants sont bien posés dans une form.
    Dans ce cas, il faut transmettre la form en param. et le Owner = Ta forme
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  9. #9
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    ou alors tu peux le récupérer comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmMain.ScrollBox1.AOwner
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Citation Envoyé par TicTacToe
    ou alors tu peux le récupérer comme ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frmMain.ScrollBox1.AOwner
    Ca fonctionne pas, le webbrowser n'est plus créer dans le jvcaptionpanel.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    Si il peux l'être, il faut définir le bon parent

    Le Owner est le conteneur pour la gestion de l'allocation/Dé-allocation
    Le parent est le conteneur visuel

    Essaye

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    jvcnPanel := TJvCaptionPanel.Create(frmMain.ScrollBox1.Owner); 
    TJvCaptionPanel( jvcnPanel ).Parent := frmMain.ScrollBox1
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WebB := TWebBrowser.Create(frmMain.ScrollBox1.Owner); 
    TWebBrowser( WebB ).Parent := Compo;
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  12. #12
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Le composant Webbrowser n'est pas créé dans le jvcaptionpanel
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  13. #13
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    je viens de faire un test.

    J'ai créé le jvcaptionpanel + webbrowser à l'aide d'un bouton. Je ne fais aucune action avec le webbrowser.
    J'ai mis un deuxieme bouton qui permet de détruire l'ensemble.

    Ca fonctionne correctement.

    J'ai l'impression que ca bug car mon webbrowser est connecté à une page HTTPS.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  14. #14
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Bon, j'ai trouvé une solution (pas tres propres) qui fonctionne ...

    En fait le problème survient quand la page HTTPS n'est pas complètement chargée. Donc j'ai rajouté un timer qui supprime les composants 5s après réception de la réponse (ce qui laisse le temps à la page de se charger)

    Si quelqu'un a une meilleure solution je suis preneur
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  15. #15
    Membre éprouvé
    Avatar de TicTacToe
    Inscrit en
    Septembre 2005
    Messages
    1 940
    Détails du profil
    Informations personnelles :
    Âge : 53

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 940
    Par défaut
    tu n'as pas un évènement sur ton composant qui démarre lorsque la page est entièrement chargée ?
    si c'est le cas, tu peux détruire à ce moment, dans le cas ou un indicateur dit qu'il faut détruire (ton bouton...)
    Section Delphi
    La mine d'or: La FAQ, les Sources

    Un développement compliqué paraitra simple pour l'utilisateur, frustrant non ?
    Notre revanche ? l'inverse est aussi vrai ;-)

  16. #16
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    il y a OnDocumentComplete et OnNavigate2Complete

    Mais ils ont tous les deux un problème pour mon système.

    OnDocumentComplete : Pour un document contenant plusieurs cadres, cet événement se produit une fois pour chaque cadre.

    OnNavigate2Complete : L'événement peut se produire avant que le document ne soit entièrement téléchargé

    (phrases tirés de l'aide delphi)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/11/2012, 12h17
  2. Réponses: 5
    Dernier message: 02/01/2009, 10h37
  3. Réponses: 4
    Dernier message: 29/07/2008, 13h52
  4. Violation d'accès lors de la lecture
    Par Fullmetal82 dans le forum C++
    Réponses: 9
    Dernier message: 29/11/2007, 17h13
  5. urgent , violation de partage lors d'une mise à jour d'une DLL.
    Par aboulouafa.said dans le forum VB.NET
    Réponses: 4
    Dernier message: 16/07/2007, 16h05

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