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

Delphi Discussion :

Gif figé


Sujet :

Delphi

  1. #1
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut Gif figé
    Bonjour,

    Je développe un logiciel avec Delphi 2006 sous WinXP.

    J'ai mis un TjvGifAnimator de la jvcl. Le problème c'est que lors de long traitements, il se fige.

    Le problème c'est que je ne peux pas utiliser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.ProcessMessages;
    Pour la simple raison, que ce n'est pas une boucle, mais que c'est un composant qui monopolise le logiciel pendant 0,5sec à 1sec : TIdWhoIs.

    J'ai bien essayé de mettre un TIdAntiFreeze, mais ça ne résoud pas le problème ...

    Je ne sais vraiment pas quoi faire pour que le gif continue à bouger pendant que le TIdWhoIs travail ...

  2. #2
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    dans ce cas, mets la procédure bloquante dans un thread séparé
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  3. #3
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Le problème est que cette procédure bloquante fait elle même appel à d'autres procédures sur la fiche.

    Je voulais donc savoir, si l'on peut mettre dans UN thread plusieurs procédure.

    Si non, le meilleur moyen serait il de faire par procédure un thread ? Dans ce cas, on peut appeler un thread dans un autre thread ?

    D'avance merci pour vos réponses

  4. #4
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut appel d'une procédure au sein d'un Thread
    J'ai donc essayé de lancer la boucle dans un Thread et d'y écrire une autre procédure dont j'ai besoin pour cette boucle (Selectionne).

    Mais lorsque je lance la boucle du Thread, il me lance un message d'erreur :

    Project Whois.exe raised exception class EAccessvilolation with message 'Access violation at address 0044C5DF in module 'Whois.exe'. Read of address 00000057'.
    Voici le code du Thread :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    unit UnitThread_Selectionne;
     
    interface
     
    Uses classes, StdCtrls, SysUtils, windows, JvAnimatedImage, JvExControls,
         JvComponent, JvGIFCtrl, JvExExtCtrls, JvImage, JvGIF, JvImageList;
     
    Type
      TThread_Selectionne = class(TThread)
      private
        { Déclaration privées }
      protected
        procedure Execute; override;
        procedure Selectionne(TLD: String);
      public
        constructor Create;
    end;
     
    implementation
     
    Uses Unit1;
     
    constructor TThread_Selectionne.Create;
    begin
      FreeOnTerminate := True;
      inherited Create(False);
    end;
     
    Procedure TThread_Selectionne.Selectionne(TLD: String);
    var
      H: HModule;
      F : Procedure(AString: PChar; ARetVal: PChar; ARetValMax: Integer);
      Nom_Function : String;
     
    begin
      Nom_Function := ('Statut_' + TLD);
     
      //On charge la dll adéquate
      H := LoadLibrary('TLD_Europe.dll');                   //GetModuleHandle(nil);
      if H <> 0 then
      begin
        //On appel la Function adéquate pour obtenir le Statut; pex : Statut_Be
        F := GetProcAddress(H, PChar(Nom_Function));
        if Assigned(F) then
          begin
            //On écrit sur chaque Panel sélectionné le statut du nom de domaine
            (F(PChar(''+Unit1.Form1.Edit_Domaine.Text+''), LResult, SizeOf(LResult)));
     
            //On cache le GifAnimator
            TJvGifAnimator(Unit1.Form1.FindComponent('Unit1.Form1.GifAnimator_' + TLD)).Visible := False;
     
            //On écrit sur chaque Panel sélectionné le nom du domaine recherché
            //avec le TLD correspondant
            TLabel(Unit1.Form1.FindComponent('Unit1.Form1.Label_Domaine_' + TLD)).Caption :=
              LowerCase(Unit1.Form1.Edit_Domaine.Text) + '.' + LowerCase(TLD);
          end;
      end;
    end;
     
    Procedure TThread_Selectionne.Execute;
    begin
      if (Form1.CheckBox_Be.Checked = True) then
        begin
          Selectionne('Be');
        end;
     
      if (Form1.CheckBox_Eu.Checked = True) then
        begin
          Selectionne('Eu');
        end;
    end;
     
    end.
    Voici le code de l'application :

    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
    [...]
     
    implementation
     
    Uses UnitThread_Selectionne;
     
    [...]
     
    procedure TForm1.Button4Click(Sender: TObject);
    var
      Thread_Selectionne : TThread_Selectionne;
     
    begin
      Thread_Selectionne := TThread_Selectionne.Create;
     
    end;
     
    [...]

  5. #5
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 858
    Points : 11 301
    Points
    11 301
    Billets dans le blog
    6
    Par défaut
    dimensionne LResult avant de lancer le thread
    utilise synchronize pour accéder aux compos de la fiche
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  6. #6
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par tourlourou
    dimensionne LResult avant de lancer le thread
    Tu veux que je donne le résultat de LResult avant de lancer le Thread ? Ce n'est pas possible, vu que sa valeur va changer pendant l'exécution du Thread.

    En effet, il n'aura pas la même valeur lorsque le premier et deuxième CheckBox vont être sélectionnés.

    Citation Envoyé par tourlourou
    utilise synchronize pour accéder aux compos de la fiche
    J'ai essayé de m'aider de la FAQ http://delphi.developpez.com/faq/?pa...ythreadserveur et des tutoriaux pour rajouter cette commande Synchronize, mais malheureusement il me donne un message d'erreur lors de la compilation ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thread_Selectionne.Synchronize(UnitThread_selectionne.TThread_Selectionne);
    E2250 There is no overload version of 'Synchronize' that can be called with these arguments

  7. #7
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    Salut,
    il te faut faire comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Synchronize(MonThread,MaProcedure);
    Silk

  8. #8
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par [Silk]
    Salut,
    il te faut faire comme sa :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Synchronize(MonThread,MaProcedure);
    C'est ce que j'avais déjà testé, mais il m'indique un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure TThread_Selectionne.Execute;
    begin
      Synchronize(UnitThread_Selectionne, Selectionne('Be'));
    end;
    E2029 '.' expected but ',' found
    E2250 There is no overload version of 'Synchronize' that can be called with these arguments

  9. #9
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    re,
    c'est normal que ça ne marche pas, il te faut mettre le nom d'une variable de type TThread_Selectionne pas le nom de ton unité.
    Par exemple ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    var   Thread_Selectionne : TThread_Selectionne;
    tu le met dans les variables globales dans l'unité de ton thread et après tu l'utilise en paramètre pour synchronize.
    Silk

  10. #10
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    J'ai rajouté dans l'unité de ma Thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      Thread_Selectionne : TThread_Selectionne;
    Mais lorsque j'écris ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure TThread_Selectionne.Execute;
    begin
      Synchronize(Thread_Selectionne, Selectionne('Be'));
    end;
    ou encore :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Procedure TThread_Selectionne.Execute;
    begin
      Synchronize(TThread_Selectionne,  Selectionne('Be'));
    end;
    Il m'envoie toujours le même message d'erreur lors de la compilation :

    E2250 There is no overload version of 'Synchronize' that can be called with these arguments

  11. #11
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    re,
    je vien de comprendre ton problème :
    Citation Envoyé par Aide Delphi
    Synchronize,méthode (TThread)

    Syntaxe Delphi :
    procedureSynchronize(Method:TThreadMethod);

    -------------------------------------------------
    TThreadMethod,type

    Syntaxe Delphi :
    typeTThreadMethod =procedure of object;

    Description
    TThreadMethod est une méthode de classe sans paramètre ni valeur renvoyée.
    Tu est donc obliger de passer une procedure en paramètre et non une fonction. Il te faut rajouter une variable au lieu de demander un paramètre
    pour obtenir quelquechose dans ce genre :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    Type
      TThread_Selectionne = class(TThread)
      private
       FTLD : String; 
      protected
        procedure Execute; override;
        procedure Selectionne;
      public
        constructor Create;
    
        property TLD : string read FTLD write FTLD;
        //Pour pouvoir acceder à ta variable en dehors de l'unité
    end;
    
    Var  
     Thread_Selectionne : TThread_Selectionne;
    
    implementation
    
    Procedure TThread_Selectionne.Selectionne;
    var
      H: HModule;
      F : Procedure(AString: PChar; ARetVal: PChar; ARetValMax: Integer);
      Nom_Function : String;
    
    begin
      Nom_Function := ('Statut_' + FTLD);
    
      //On charge la dll adéquate
      H := LoadLibrary('TLD_Europe.dll');                   //GetModuleHandle(nil);
      if H <> 0 then
      begin
        //On appel la Function adéquate pour obtenir le Statut; pex : Statut_Be
        F := GetProcAddress(H, PChar(Nom_Function));
        if Assigned(F) then
          begin
            //On écrit sur chaque Panel sélectionné le statut du nom de domaine
            (F(PChar(''+Unit1.Form1.Edit_Domaine.Text+''), LResult, SizeOf(LResult)));
    
            //On cache le GifAnimator
            TJvGifAnimator(Unit1.Form1.FindComponent('Unit1.Form1.GifAnimator_' + FTLD)).Visible := False;
    
            //On écrit sur chaque Panel sélectionné le nom du domaine recherché
            //avec le TLD correspondant
            TLabel(Unit1.Form1.FindComponent('Unit1.Form1.Label_Domaine_' + FTLD)).Caption :=
              LowerCase(Unit1.Form1.Edit_Domaine.Text) + '.' + LowerCase(FTLD);
          end;
      end;
    end;
    Après il te suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Thread_Selectionne.TLD := 'Ce que tu veux';
    Synchronize(Thread_Selectionne,selectionne);
    voilà
    normalemement comme sa c'est OK
    Silk

  12. #12
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    un GRAND merci pour ton aide Silk.

    Il reste malgré tout encore un problème lorsque je lance le Thread dans l'application, il m'envoie un message d'erreur :

    Project Whois.exe raised exception class EAccessViolation with message 'Access violation at address 00404FB4 in module 'Whois.exe'. Write of address 00000040'.
    J'ai essayé de diminuer le code au maximum, mais il reste toujours cette erreur.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    unit UnitThread_Selectionne;
     
    interface
     
    Uses classes, StdCtrls, SysUtils, windows, JvAnimatedImage, JvExControls,
         JvComponent, JvGIFCtrl, JvExExtCtrls, JvImage, JvGIF, JvImageList;
     
    Type
      TThread_Selectionne = class(TThread)
      private
        FTLD : String;
      protected
        procedure Execute; override;
        procedure Selectionne;
      public
        constructor Create;
     
        property TLD : string read FTLD write FTLD;
        //Pour pouvoir acceder à ta variable en dehors de l'unité end;
      end;
     
    Var
     Thread_Selectionne : TThread_Selectionne;
     
    implementation
     
    Uses Unit1;
     
    constructor TThread_Selectionne.Create;
    begin
      FreeOnTerminate := True;
      inherited Create(False);
    end;
     
    Procedure TThread_Selectionne.Selectionne;
    begin
    end;
     
    Procedure TThread_Selectionne.Execute;
    begin
      Thread_Selectionne.TLD := 'Be';
      Synchronize(Thread_Selectionne, Selectionne);
    end;
     
    end.
    Code dans l'unité principale qui appel la Thread :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button4Click(Sender: TObject);
    var
      Thread_Selectionne : TThread_Selectionne;
     
    begin
      Thread_Selectionne := TThread_Selectionne.Create;
     
    end;

  13. #13
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    Il y a un truc à changer (je me suis trompé dans le code que je t'ai donné )

    Il n'y a pas besoin de la variable de type TThread_selectionne, et il faut mettre des self à la place car on ne la créait pas dans le code ce qui amenait à l'access violation

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    unit UnitThread_Selectionne;
    
    interface
    
    Uses classes, StdCtrls, SysUtils, windows, JvAnimatedImage, JvExControls,
         JvComponent, JvGIFCtrl, JvExExtCtrls, JvImage, JvGIF, JvImageList;
    
    Type
      TThread_Selectionne = class(TThread)
      private
        FTLD : String;
      protected
        procedure Execute; override;
        procedure Selectionne;
      public
        constructor Create;
    
        property TLD : string read FTLD write FTLD;
        //si tu n'as pas besoin d'accéder à FTLD depuis l'exterieur de 
        //l'unité alors tu peux supprimer la ligne du dessus
      end;
    
    
    implementation
    
    Uses Unit1;
    
    constructor TThread_Selectionne.Create;
    begin
      FreeOnTerminate := True;
      inherited Create(False);
    end;
    
    Procedure TThread_Selectionne.Selectionne;
    begin
    end;
    
    Procedure TThread_Selectionne.Execute;
    begin
      FTLD := 'Be';
      Synchronize(self, Selectionne);
    end;
    
    end.
    teste avec ça et vois si sa marche...
    Silk

  14. #14
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Malheureusement, ça me donne toujours un message d'erreur lorsque je lance le Thread à partir de la form principale ...

    Project Whois.exe raised exception class EAccessViolation with message 'Access violation at address 0044C62B in module 'Whois.exe'. Write of address 00000057'.

  15. #15
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    Est-ce que tu as bien mis ton unité du thread dans les uses de l'interface et pas de l'implementation ?
    Silk

  16. #16
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Non, mais je viens de le mettre dans les uses de l'interface.

    Et ça donne toujours la même erreur ...

  17. #17
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    je ne vois pas pourquoi sa bug... si tu as fait avec le code que tu as montré tout à l'heure sur le forum normalement il n'y a pas de raison que ça bug
    Surtout qu'il n'y a pas 400 lignes dans ton thread !
    Essaye de mettre des points d'arrêts dans ton thread et dans l'unité de ta form pour essayer de localiser d'où vient exactement l'erreur
    (Quand exactement, la ligne etc)
    Silk

  18. #18
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Après quelques recherches, j'ai réussi à localiser le problème.

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    unit UnitThread_Selectionne;
    
    interface
    
    Uses classes, StdCtrls, SysUtils, windows, JvAnimatedImage, JvExControls,
         JvComponent, JvGIFCtrl, JvExExtCtrls, JvImage, JvGIF, JvImageList;
    
    Type
      TThread_Selectionne = class(TThread)
      private
        FTLD : String;
      protected
        procedure Execute; override;
        procedure Selectionne;
      public
        constructor Create;
    
        property TLD : string read FTLD write FTLD;
        //Pour pouvoir acceder à ta variable en dehors de l'unité end;
      end;
    
    Var
     Thread_Selectionne : TThread_Selectionne;
    
    implementation
    
    Uses Unit1;
    
    constructor TThread_Selectionne.Create;
    begin
      FreeOnTerminate := True;
      inherited Create(False);
    end;
    
    Procedure TThread_Selectionne.Selectionne;
    var
      H: HModule;
      F : Procedure(AString: PChar; ARetVal: PChar; ARetValMax: Integer);
      Nom_Function : String;
    
    begin
      Nom_Function := ('Statut_' + TLD);
    
      //On charge la dll adéquate
      H := LoadLibrary('TLD_Europe.dll');                   //GetModuleHandle(nil);
      if H <> 0 then
      begin
        //On appel la Function adéquate pour obtenir le Statut; pex : Statut_Be
        F := GetProcAddress(H, PChar(Nom_Function));
        if Assigned(F) then
          begin
            //On écrit sur chaque Panel sélectionné le statut du nom de domaine
            (F(PChar(''+Unit1.Form1.Edit_Domaine.Text+''), LResult, SizeOf(LResult)));
         //   Statut_MiseEnPage(TLabel(Unit1.Form1.FindComponent('Unit1.Form1.Label_Statut_' + TLD)), LResult);
    
            //On cache le GifAnimator
            TJvGifAnimator(Unit1.Form1.FindComponent('Unit1.Form1.GifAnimator_' + TLD)).Visible := False;
    
            //On écrit sur chaque Panel sélectionné le nom du domaine recherché
            //avec le TLD correspondant
            TLabel(Unit1.Form1.FindComponent('Unit1.Form1.Label_Domaine_' + TLD)).Caption :=
              LowerCase(Unit1.Form1.Edit_Domaine.Text) + '.' + LowerCase(TLD);
          end;
      end;
    end;
    
    Procedure TThread_Selectionne.Execute;
    begin
      FTLD := 'Be';
      Synchronize(self, Selectionne);
    end;
    
    end.
    Le problème vient de ces deux lignes en rouge. Quand j'en exécute qu'une à la fois, il n'y a pas d'erreur et la Procedure Selectionne n'est effectuée.

    Mais lorsque j'exécute ces deux lignes à la fois, le logiciel plante.

  19. #19
    Membre actif Avatar de [Silk]
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2005
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 198
    Points : 201
    Points
    201
    Par défaut
    ça te fait pareil meme si la procedure Selectionne est vide ?
    tu as essayé de mettre FTLD := 'be'; au debut de la procedure Selectionne ?
    Silk

  20. #20
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par [Silk]
    ça te fait pareil meme si la procedure Selectionne est vide ?
    A partir du moment où l'on ne prendt qu'une des deux lignes, que la procedure Selectionne soit vide ou non, ça ne plante pas ... mais ça ne fait pas ce que je demande dans cette procedure.

    Citation Envoyé par [Silk]
    tu as essayé de mettre FTLD := 'be'; au debut de la procedure Selectionne ?
    Lorsque je met FTLD := 'Be'; au début de la procedure Selectionne, ça me donne le message d'erreur, comme lorsque je met les deux lignes dans la procedure Execute.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Afficher tout type d'image (gif ,png, jpg...)
    Par jfb53 dans le forum C++Builder
    Réponses: 22
    Dernier message: 20/07/2005, 14h52
  2. Conversion automatique de tiffs en jpg/gif
    Par Davenico dans le forum Composants VCL
    Réponses: 2
    Dernier message: 03/07/2003, 15h07
  3. [TP] gif et jpeg
    Par vinyl74 dans le forum Turbo Pascal
    Réponses: 11
    Dernier message: 22/12/2002, 15h02
  4. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09

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