Pré-composant d'affichage de texte progressif...

Soyez le premier à donner votre avis sur cette source.

Vue 4 318 fois - Téléchargée 659 fois

Description

J'avais besoin d'affiher des informations textuelles à l'écran, avec des temps de raffraichissement potables.

Alors je me suis lancé dans les "Threads"...

Et voilà le résultat !

Conclusion :


Le source est commenté, mais pour comprendre, il faut vouloir comprendre...

Débutants s'abstenir !

Les commentaires....seront les bienvenus !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_paradise
Messages postés
11
Date d'inscription
mercredi 7 mai 2003
Statut
Membre
Dernière intervention
13 février 2012
-
+1 foxi

Code intéressant mais :
- petit souci de mise en forme du code (chacun sa sauce après tout)
- tous les "self." sont inutiles
- plus gênant les dossiers "prédéfinis" dans les options du projet, à virer avant de poster
blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
-
>>Surcharge du thread :
obligée, Execute est abstract !

>>on copie ces variables depuis le composant
normalement, à la création du thread, il devrait y avoir une redirection des variables cruciales du composant vers le thread, c'est à dire que les *getters* et les *setters* devrait être :

function MyComponent.Getxxxx:TMyType;

begin
if System.Assigned(self.TheThread)
then Result := self.TheThread.xxxxx
else Result := self._xxxxx;
end;

En fait, seules les variables susceptibles d'être modifiées par le thread doivent être recopiées...

De plus, la gestion des TCanvas n'est possible qu'avec le méchanisme du Lock/Unlock, ce qui oblige Windows et les autres threads à ne pas modifier leurs adresses mémoires pendant que tu dessines dessus...
Bacterius
Messages postés
3869
Date d'inscription
samedi 22 décembre 2007
Statut
Membre
Dernière intervention
3 juin 2016
5 -
"un thread ne peut être correct si il modifie une variable d'un composant..."

C'est pourquoi l'on procède dans l'autre sens : on surcharge une version du TThread avec des variables dont on aura besoin, puis on copie ces variables depuis le composant.
C'est ça non ?

Cordialement, Bacterius !
nethacker
Messages postés
293
Date d'inscription
mardi 2 mai 2006
Statut
Membre
Dernière intervention
12 octobre 2011
-
Merci beaucoup !
blueperfect
Messages postés
237
Date d'inscription
mardi 13 novembre 2007
Statut
Membre
Dernière intervention
21 novembre 2013
-
les composants sont accessibles via TForm.Components, sous la forme d'un TComponent...

Tu peux utiliser :

* self.Components[_each].InheritsFrom(TEdit)
* self.Components[_each] as TEdit

pour tester la classe du composant (ici TEdit), et pour ensuite le "typer"...

Dans ton exemple, mieux que *Sleep*, tu devrais te tourner vers le TTimer et son OnTimer (suffisant dans la plupart des cas) !

Mon exemple d'utiilisation avec les threads n'est pas pour simuler 100 TEdit qui font varier leurs contenus, mais plutôt pour manipuler un TBitmap, et son affichage depuis un Thread !

Plus tard, les même threads me seront utiles pour re-travailler des TBitmaps...

C'est délicat, en ce sens, que les threads ne paratgent pas le même espace mémoire que les composants de la VCL, et ne peuvent donc pas partager (ou seulement en lecture) leurs variables : un thread ne peut être correct si il modifie une variable d'un composant...

Pourtant, il faut pouvoir visuellemnt faire varier ses paramètres, comme le délai de rotation des lettres...

Dans le Execute du thread (PleaseDo dans mon exemple), je ne fais qu'un simple appel à Windows (via Invalidate), pour raffraîchir la TPaintBox qui lui est associée...

D'ailleurs, la version Codes-Sources de mon programme bogue si on utilise plusieurs PaintBox. Ceci est résolu en utilisant Canvas.Lock/Canvas.Unlock de la PaintBox, dans le PleaseDo...assurant ainsi le thread de ne pas "tomber" pendant un raffraichissement écran par Windows !

Je vais bientôt mettre les sources à jour... je suis en train de "disséquer" les lasses utilisées, pour en faire des génériques, voire des composants...

DH

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.