PRÉ-COMPOSANT D'AFFICHAGE DE TEXTE PROGRESSIF...

Messages postés
4200
Date d'inscription
samedi 16 octobre 2004
Statut
Modérateur
Dernière intervention
2 janvier 2019
- - Dernière réponse : cs_paradise
Messages postés
11
Date d'inscription
mercredi 7 mai 2003
Statut
Membre
Dernière intervention
13 février 2012
- 13 févr. 2012 à 17:06
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/49981-pre-composant-d-affichage-de-texte-progressif

Afficher la suite 
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