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

Contribuez Delphi Discussion :

Function Text Animation


Sujet :

Contribuez Delphi

  1. #1
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Mars 2008
    Messages
    45
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Par d�faut Function Text Animation
    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 anim(str : string ; memo1: TMemo);
    var
    i:Integer;
    x:String;
    begin
      For i:= 1 to length(str) do
        begin
        Form1.Memo1.Text := (Form1.Memo1.Text +str [i]+'_');
        x := Form1.Memo1.Text;
        Application.ProcessMessages;
        Sleep(100);
        Form1.Memo1.Text:=copy(Form1.Memo1.Text,1,length(Form1.Memo1.Text)-1);
        end;
    Form1.Memo1.Text:=  Form1.Memo1.Text + #13#10;
    end;

  2. #2
    Membre Expert
    Avatar de Dr.Who
    Inscrit en
    Septembre 2009
    Messages
    980
    D�tails du profil
    Informations personnelles :
    �ge : 46

    Informations forums :
    Inscription : Septembre 2009
    Messages : 980
    Par d�faut
    vin'diousss!


    bon alors, heu ... comment dire ... quel grand moment de solitude...

    que dire ... c'est ... bien ... c'est tr�s bien ...

    c'est exactement le code, qui montre et d�montre tout ce qu'il ne faut pas faire.


    bon ... il fonctionne, �a ok ... mais niveau code ... houlalala.

    d�j�, tu passe un argument ... qui n'est pas nom� correctement (memo1), et qui n'est jamais utilis� dans la methode.
    On evitera, pour ce genre de methode d'utiliser un type qui cr�era une d�pendance notable.
    Ici, on devrait pouvoir utiliser n'importe quel objet comportant un TStrings, c'est donc ce type que l'on utilisera.


    ensuite, tu appel Form1 ... ce qui est tr�s peux recommend� dans ce cas.
    ta methode devient totalement d�pendante de cette variable globale.
    C'est l'une des erreur les plus courrante dans le developpement en Delphi, souvent on vois la variable FormN utilis�e dans la classe TFormN.
    Ce n'est pas bon, on utilisera Self � l'int�rieur de la classe TFormN et on passera un parametre de type TForm pour une methode externe.


    ensuite, la variable X, mal nomm�e �galement, on pr�f�ra toujours un identifiant qui rappel la finalit� ou le type d'une variable.
    ici, tout d�veloppeurs pensera X = coordonn�e quelconque axe X.
    une variable de type string s'appelera naturellement S ou par exemple OutStr, InStr, TmpStr ... S, St, Str, Sr, Sn.
    Le S est aux chaines ce que P est aux pointeurs.
    le C est aux caract�res ce que T est aux types.
    d'ailleur, parlons de la pr�sence de "X" dans la fonction, X n'est jamais utilis�.
    assign� oui, utilis�e non. donc elle ne sert � rien.

    sinon, dans l'ensemble, la methode appliqu�e est bonne.
    juste des erreur d'ecriture, des d�pendances superflues et un manque total de souplesse et de r�utilisabilit�.


    pour finir, quand tu pr�sente une fonction, accompagne la d'explication, de commentaires et d'un exemple.
    les gens accorderons toujours plus de cr�dit � du code d�taill�, bien pr�sent�, largement comment� et comportant une d�monstration.
    tu ne gagnera rien a poster un code trop vite et bacl�.


    voici une correction :

    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
     
    { AnimatedWrite
     
      Ecrit un texte dans un TStrings avec une animation de type
      machine à écrire.
     
      Paramètres :
        aStr     [i] string, texte à écrire dans l'objet textuel.
        aStrings [i] TStrings, destination (Memo.Lines, ListBox.Items etc).
        aIndex   [i] LongInt, index de la ligne ou commencer à ecrire
                     le texte, si -1 on ajoute une ligne a la fin (add) et
                     on ecrit à partir de cette dernière.
        aSpeed   [i] LongWord, vitesse d'écriture du texte, en millisecondes
                     (80 par défaut).
        aStopPtr [i] PBoolean, pointeur sur un booléen qui permet d'arrêter
                     l'animation (true), peut être nil (pas de control
                     d'arrêt), false par défaut.
                     Si aStopPtr est définit et qu'elle mets fin à
                     l'animation, aStr sera assigné completement à la chaine
                     de destination.
     
      Utilisation :
        AnimatedWrite('Hello world !', Memo1.Lines);
        AnimatedWrite('Hello world !', Memo1.Lines, 3, 160);
        AnimatedWrite('Hello world !', Memo1.Lines, -1, 80, @StopAnim);
     
    }
    procedure AnimatedWrite(aStr: string; aStrings: TStrings; const aIndex: LongInt=-1; const aSpeed: LongWord=80; aStopPtr: PBoolean=nil);
    var
      N, IDX : LongInt;
      S : String;
    begin
      if aIndex = -1 then
        // si aIndex est égal à -1 on ajoute une ligne et
        // on la choisi comme ligne ou il faut écrire
        Idx := aStrings.Add('')
      else
        // sinon, on se référe à l'index passé en paramètre
        Idx := aIndex;
     
      for N := 1 to length(aStr) do
      begin
        // copie d'une partie de la chaine
        S := Copy(aStr, 1, N);
     
        // on assigne la chaine coupée avec un curseur _ ou | par exemple
        aStrings[idx] := S + '_';
     
        // on evite les freeze du au sleep ... ^_^
        // ça empeche les surprises avec le mister freeze dans le sleep ... hahaha
        Application.ProcessMessages;
        // hum hum ... on attend un peu ...
        Sleep(aSpeed);
     
        // on assigne la chaine coupée sans le curseur ... houuu!
        aStrings[idx] := S;
     
        // on gère la sortie si necessaire
        if aStopPtr <> nil then
          if aStopPtr^ then
          begin
            // quand on stop, on affiche la chaine complète
            aStrings[idx] := aStr;
            // et on sort
            exit;
          end;
      end;
    end;
    voila et bon code.
    [ Sources et programmes de Dr.Who | FAQ Delphi | FAQ Pascal | R�glement | Contactez l'�quipe ]
    Ma messagerie n'est pas la succursale du forum... merci!

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par d�faut
    Une autre variante en utilisant les fonctions de s�lection pour �viter ces copies de cha�ne.

    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
    procedure anim(const aStr :string; const aMemo: TMemo);
    var
      i :Integer;
     
    begin
      with aMemo do
      begin
        //Ajoute "_" en fin de mémo
        SelStart := MaxInt;
        SelText  := '_';
     
        //Positionne le curseur avant "_"
        SelStart := SelStart -1;
     
        //Ajoute les caractères
        For i:= 1 to length(aStr) do
        begin
          SelText := aStr[i];
          Sleep(100);
        end;
     
        //Sélectionne "_" et le remplace par #13#10
        SelLength := 1;
        SelText   := #13#10;
      end;
    end;

  4. #4
    Membre �m�rite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Ao�t 2006
    Messages
    992
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 992
    Par d�faut
    J'ai une question, je ne sais pas si c'est bien l'endroit, mais threader cette fonction ne serait-il pas mieux a cause du sleep?
    Moi je thread d�s qu'il y a sleep alors j'en profite pour demander au pro leur avis

  5. #5
    Membre �m�rite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par d�faut
    Citation Envoy� par ouiouioui Voir le message
    J'ai une question, je ne sais pas si c'est bien l'endroit, mais threader cette fonction ne serait-il pas mieux a cause du sleep?
    Moi je thread d�s qu'il y a sleep alors j'en profite pour demander au pro leur avis
    j'ai cru squatter contribuer ... nous les d�butants tant pis pour les pro

  6. #6
    Membre �m�rite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par d�faut
    voici une nouvelle version Andnotor am�lior�e...
    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
    procedure anim(const aStr :string; const aMemo: TMemo);
    var
      i :Integer;
    begin
      with aMemo do
      begin
        //Ajoute "_" en fin de mémo
        SelStart := MaxInt;
        SelText  := '|';
     
        //Positionne le curseur avant "_"
        SelStart := SelStart -1;
     
        //Ajoute les caractères
        For i:= 1 to length(aStr) do
        begin
          SelText := aStr[i];
          if ((i mod (Random(8)+3) ) = 0 ) or not (aStr[i] in['A'..'Z','a'..'z']) then
            Sleep(300)
          else
            Sleep(70);
        end;
     
        //Sélectionne "_" et le remplace par #13#10
        SelLength := 1;
        SelText   := #13#10;
      end;
    end;
    ex:"taper avec deux doigts"
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      anim('Un bon programmeur ce lui qui programme bien !.', memo1)
    end;

  7. #7
    Membre �m�rite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Ao�t 2006
    Messages
    992
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 992
    Par d�faut
    et dans un 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
    74
    75
    76
    77
    78
    79
    80
    Unit Anim;
     
    Interface
     
    Uses
      Classes, StdCtrls, SysUtils;
     
    Type
      ThreadAnim = Class(TThread)
      Private
        Txt, TxtToWite: String;
        pMemo:          ^TMemo;
        Procedure SynchroTxt;
        Procedure SynchroFinnish;
        Procedure SynchroPrepare;
      Protected
        Procedure Execute; Override;
      Public
        Constructor Create(aTxt: String; apMemo: pointer);
      End;
     
    Implementation
     
    Constructor ThreadAnim.Create(aTxt: String; apMemo: pointer);
    Begin
      Inherited Create(False);
      FreeOnTerminate := True;
      Txt             := aTxt;
      pMemo           := apMemo;
    End;
     
    Procedure ThreadAnim.Execute;
    Var
      I: Integer;
    Begin
      Synchronize(SynchroPrepare);
      //Ajoute les caractères
      For I := 1 To Length(Txt) Do
      Begin
        If Terminated Then
          Exit;
        TxtToWite := Txt[I];
        Synchronize(SynchroTxt);
        If ((I Mod (Random(8) + 3)) = 0) Or Not (Txt[I] In ['A'..'Z', 'a'..'z']) Then
          Sleep(200)
        Else
          Sleep(50);
      End;
      Synchronize(SynchroFinnish);
    End;
     
    Procedure ThreadAnim.SynchroPrepare;
    Begin
      With pMemo^ Do
      Begin
        //Ajoute "_" en fin de mémo
        SelStart := MaxInt;
        SelText  := '_';
     
        //Positionne le curseur avant "_"
        SelStart := SelStart - 1;
      End;
    End;
     
    Procedure ThreadAnim.SynchroTxt;
    Begin
      pMemo^.SelText := TxtToWite;
    End;
     
    Procedure ThreadAnim.SynchroFinnish;
    Begin
      With pMemo^ Do
      Begin
        //Sélectionne "_" et le remplace par #13#10
        SelLength := 1;
        SelText   := #13#10;
      End;
    End;
     
    End.
    appel:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    Procedure TForm1.Button1Click(Sender: TObject);
    Begin
      ThreadAnim.Create('Code de Andnotor modifié par Montor dans un Thread!', @Memo1);
    End;

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par d�faut
    Tu n'as pas besoin de d�finir un pointer pour le memo, tu peux directement d�finir ta variable en TMemo.
    SynchroPrepare pourrait �tre directement appel� depuis Create et SynchroFinnish depuis Destroy .

    Quant � Synchronize(SynchroTxt), remplace le par:

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    PostMessage(pMemo.Handle, EM_REPLACESEL, 0, Longint(Txt[i]));
    Ainsi tu tireras vraiment parti du thread.

    ps: Je passerais aussi le m�mo en ReadOnly dans le Create pour �viter que l'utilisateur d�place le curseur pendant l'�criture .

  9. #9
    Membre �m�rite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Ao�t 2006
    Messages
    992
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 992
    Par d�faut
    effectivement c'est pas optimis�, le coup du
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
        PostMessage(Memo.Handle, EM_REPLACESEL, 0, Longint(Txt[I]));
    j'y avais pens� sans trouv�, d'ailleurs chez moi sa ne fonctionne pas sur mon D2007

    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
    74
    75
    76
    77
    78
    79
    Unit Anim;
     
    Interface
     
    Uses
      Windows, Messages, Classes, StdCtrls, SysUtils;
     
    Type
      ThreadAnim = Class(TThread)
      Private
        Txt, TxtToWite:  String;
        Memo: TMemo;
        Procedure SynchroTxt;
      Protected
        Procedure Execute; Override;
      Public
        Constructor Create(aTxt: String; aMemo: TMemo);
        Destructor Destroy; Override;
      End;
     
    Implementation
     
    Constructor ThreadAnim.Create(aTxt: String; aMemo: TMemo);
    Begin
      Inherited Create(False);
      FreeOnTerminate := True;
      Txt             := aTxt;
      Memo            := aMemo;
      With Memo Do
      Begin
        //un thread ecrit déjà
        If ReadOnly Then
          Exit;
        ReadOnly := True;
        //Ajoute "_" en fin de mémo
        SelStart := MaxInt;
        SelText  := '_';
     
        //Positionne le curseur avant "_"
        SelStart := SelStart - 1;
      End;
    End;
     
    Procedure ThreadAnim.Execute;
    Var
      I: Integer;
    Begin
      //Ajoute les caractères
      For I := 1 To Length(Txt) Do
      Begin
        If Terminated Then
          Exit;
        TxtToWite := Txt[I];
        Synchronize(SynchroTxt);
        If ((I Mod (Random(8) + 3)) = 0) Or Not (Txt[I] In ['A'..'Z', 'a'..'z']) Then
          Sleep(200)
        Else
          Sleep(50);
      End;
    End;
     
    Destructor ThreadAnim.Destroy;
    Begin
      With Memo Do
      Begin
        //Sélectionne "_" et le remplace par #13#10
        SelLength := 1;
        SelText   := #13#10;
        ReadOnly  := False;
      End;
      Inherited;
    End;
     
    Procedure ThreadAnim.SynchroTxt;
    Begin
      Memo.SelText := TxtToWite;
    End;
     
    End.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par d�faut
    En effet, d�sol�

    PostMessage ne peux pas avoir de pointer en param�tre !

  11. #11
    Membre �m�rite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par d�faut
    Tu peux me dire pourquoi tu as r�introduit Destrory ?
    ce n'est pas bon du tout on doit appeler le destructeur manuellement du coup cette utilisation et interdite
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
     ThreadAnim.Create('Code de Andnotor modifié par Montor dans un Thread!', memo1);
    ce que explique pourqui est ececut� une seul fois sur le meme control

    voici ce que j'ai pu ajout� si vrai que utilisation de enbled et beaucuop mieux que ReadOnly mais elle change asspec visuel du control
    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
      ThreadAnim = Class(TThread)
      Private
        Txt      :String;
        FControl :TCustomEdit;
        H        :integer;
      Protected
        Procedure Execute; Override;
      Public
        Constructor Create(const aTxt: String; ACustomEdit: TCustomEdit);
        Destructor Destroy; override;
      End;
    Implementation
     
    Constructor ThreadAnim.Create(const aTxt: String; ACustomEdit: TCustomEdit);
    var
     int:integer;
     S:string;
    Begin
      Inherited Create(True);
      FreeOnTerminate := True;
      if not Assigned(ACustomEdit) then Exit;
      FControl := ACustomEdit;
      Txt      := aTxt;
      With TEdit(FControl) Do
      Begin
        If ReadOnly Then
          Exit;
        ReadOnly := True;
        SelStart := maxint;
        SelText  := '_';
        SelStart := SelStart - 1;
        H        := Handle;
      End;
      Resume;
    End;
     
    Procedure ThreadAnim.Execute;
    Var
      I,intStart: Integer;
    Begin
      //Ajoute les caractères
      SendMessage(H, EM_GETSEL, Longint(@intStart), 0);
      dec(intStart);
      For I := 1 To Length(Txt) Do
      Begin
        If Terminated Then
         Exit;
        intStart:= intStart+1;
        SendMessage(H, EM_SETSEL,intStart,intStart);
        SendMessage(H, EM_REPLACESEL, 0, Longint(string(Txt[I])));
        If ((I Mod (Random(8) + 3)) = 0) Or Not (Txt[I] In ['A'..'Z', 'a'..'z']) Then
          Sleep(200)
        Else
          Sleep(50);
      End;
    End;
     
    Destructor ThreadAnim.Destroy;
    Begin
      With TEdit(FControl) Do
      Begin
        SelLength := 1;
        SelText   := #13#10;
        ReadOnly  := False;
      End;
        inherited;
    End;
    Ex:
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ThreadAnim.Create('La petite fille qui s''adonnait a la natation en 1200'
                        +' est une nageuse moyenne moyenâgeuse !.', memo1);
    end;

  12. #12
    Membre averti
    Profil pro
    �tudiant
    Inscrit en
    Mars 2008
    Messages
    45
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Alg�rie

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Mars 2008
    Messages : 45
    Par d�faut
    Je vous remercie pour vos corrections m�me si mes �rreurs �taient catastrophique

  13. #13
    Membre �m�rite
    Avatar de ouiouioui
    Homme Profil pro
    Administrateur syst�mes et r�seaux
    Inscrit en
    Ao�t 2006
    Messages
    992
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 44
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : Administrateur syst�mes et r�seaux
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Ao�t 2006
    Messages : 992
    Par d�faut
    @ Montor j'ai corrig� l'erreur pour destroy

    ton code est astucieux, pourquoi tu cr�e le thread en pause et le resume ?

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par d�faut
    Il le cr�e en pause parce que si aCustomEdit n'est pas assign�, tous se plante .
    Mais c'est pas bon, parce que dans ce cas, le thread n'est jamais d�truit

    ps: Les transtypages sont aussi inutiles !

  15. #15
    Membre �m�rite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par d�faut
    Il le cr�e en pause parce que si aCustomEdit n'est pas assign�, tous se plante .
    Mais c'est pas bon, parce que dans ce cas, le thread n'est jamais d�truit
    je ne pense pas que ceci est vrai

    ps: Les transtypages sont aussi inutiles !
    CustomEdit
    pour �tre compatible avec TEdit TMemo TRichedit ...
    par contre les properties sur CustomEdit sont prot�g�es c est pourquoi le transtypage

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par d�faut
    Citation Envoy� par Montor Voir le message
    je ne pense pas que ceci est vrai
    Il te suffit de mettre un point d'arr�t dans ton destructeur pour constater que tu n'y passes pas .
    La t�che n'est pas d�marr�e, ThreadProc n'est jamais appel� et par cons�quent le TThread n'est jamais d�truit.

    Si tu rempla�ais Exit par Raise, la cr�ation serait abort�e.

    Citation Envoy� par Montor Voir le message
    CustomEdit
    pour �tre compatible avec TEdit TMemo TRichedit ...
    par contre les properties sur CustomEdit sont prot�g�es c est pourquoi le transtypage
    Elles sont public sous D2007...

  17. #17
    Membre �m�rite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par d�faut
    Il te suffit de mettre un point d'arr�t dans ton destructeur pour constater que tu n'y passes pas .
    La t�che n'est pas d�marr�e, ThreadProc n'est jamais appel� et par cons�quent le TThread n'est jamais d�truit.
    il y a la fonction Enthread

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 938
    Par d�faut
    ... appel� depuis ThreadProc qui n'est pas ex�cut�e .

  19. #19
    Membre �m�rite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par d�faut
    en r�alit� je utilise Endthread avec beginthead ... mais si il arrive une exception dans le constructeur le destructeur est appel� automatiquement

  20. #20
    Membre �m�rite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activit� : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par d�faut
    Tu as bien raison j'ai chang� le constructeur par un procedure de classe
    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
    class procedure ThreadAnim.Animate(const aTxt: string;ACustomEdit: TCustomEdit);
    var
     int:integer;
     S:string;
    begin
        if Assigned(ACustomEdit) and  not TEdit(ACustomEdit).ReadOnly then
        begin
          with Inherited Create(true)do
          begin
              FreeOnTerminate := True;
              FControl := ACustomEdit;
              Txt      := aTxt;
              Application.ProcessMessages;
              With TEdit(FControl) Do
              Begin
                    ReadOnly := True;
                    SelStart := maxint;
                    SelText  := '_';
                    SelStart := SelStart - 1;
                    H        := Handle;
              End;
              Resume;
          end;
        end
        else
          raise Exception.Create('Aie aie aie');
    end;

Discussions similaires

  1. texte anim� avec java
    Par edson15 dans le forum AWT/Swing
    R�ponses: 1
    Dernier message: 06/06/2007, 22h40
  2. [image]zone de texte anim�e (ou autre)
    Par jadey dans le forum Word
    R�ponses: 5
    Dernier message: 24/04/2007, 11h23
  3. SWT texte anim�
    Par sroux dans le forum SWT/JFace
    R�ponses: 4
    Dernier message: 04/01/2007, 13h50
  4. R�ponses: 1
    Dernier message: 21/11/2006, 21h56
  5. [VB6]texte anim�
    Par alex_95 dans le forum VB 6 et ant�rieur
    R�ponses: 11
    Dernier message: 08/03/2006, 10h59

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