begin process at 2012 02 05 01:49:08
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Composants

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

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


 Information sur la source

Note :
Aucune note
Catégorie :Composants Classé sous :HARMONY, THREAD, TEXTE, BITMAP Niveau :Initié Date de création :06/05/2009 Date de mise à jour :07/05/2009 22:26:39 Vu / téléchargé :2 715 / 396

Auteur : blueperfect

Ecrire un message privé
Commentaire sur cette source (15)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
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 !

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

07 mai 2009 22:26:40 :
* Correction pour Bactérius : dans le OnPaint de la PaintBox, il faut modifier self.Canvas.Draw en self.PaintBox1.Canvas.Draw... * Passage de la constrution du Bitmap dans le thread (gestion du Canvas.Lock)

 Sources du même auteur

Source avec Zip Source avec une capture LES VALUE'S FADERS
Source avec Zip Source avec une capture PACKAGE (TEST)
Source avec Zip Source avec une capture PACKAGE HARMONY
Source avec Zip Source avec une capture PACKAGE BORLAND
Source avec Zip Source avec une capture PACKAGE MICROSOFT

 Sources de la même categorie

Source avec Zip MOVCONTROL par abmed1963
Source avec Zip Source avec une capture PACKAGE DE COMPOSANTS CINDY V4.41 par MAURICIO
Source avec Zip Source avec une capture DBNAVIGATORPLUS par pascal1541
Source avec Zip Source avec une capture EVALUATION D' EXPRESSIONS MATHÉMATIQUE (MÉTHODE RPN) par MAURICIO
Source avec Zip Source avec une capture COMPOSANT TQPROGRESSBAR UNE BARRE DE PROGRESSION... par yanb

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture TEXTE SUR COURBE DE BEZIER par pseudo3
Source avec Zip Source avec une capture YEUXROUGES par pseudo3
Source avec Zip Source avec une capture THREAD ET BITMAP (DESSIN AU CRAYON) par barbichette
Source avec Zip Source avec une capture JOYEUX NOUVEL AN À TOUS ! par Bacterius
Source avec Zip Source avec une capture STEGANO - CACHER DU TEXTE DANS UNE IMAGE (TUTO) par pablor44

Commentaires et avis

Commentaire de f0xi le 06/05/2009 20:52:10 administrateur CS

j'aime toujours bien tes codes, très obscure au premier abord, mais facilement compréhensible. ton originalité est rafraichissante.

ton seul defaut : tu ne respecte pas encore tout a fait les convention d'ecriture du code :

les variable private/protected sont a nommées "f" et non "_" nous ne faisons pas du C/C++!

un petit espace aprés les ":" entre l'identifiant et le type

les published avant les public override
les public avant les public override
les override aprés les nouvelles methodes etc

voila un exemple de ce que ça donne :

type
  TThreadOfTextFader = class(TThread)
  private
    fActuals   : TStringList;
    fLastDo    : TDateTime;
    fTextFader : TTextFader;
    function GetActuals: TStringList;
    function GetLastDo: TDateTime;
    function GetTextFader: TTextFader;

  protected
    procedure Execute; override;

  protected
    function GetDelay: Cardinal; virtual;
    procedure PleaseDo; virtual;
    property Actuals: TStringList read GetActuals;

  published
    property LastDo   : TDateTime  read GetLastDo;
    property TextFader: TTextFader read GetTextFader;

  public
    constructor Create(AObject: TTextFader); { reintroduce; }
    destructor Destroy; override;

  end;


si tu te resoud a faire ça, ce sera encore mieux!

tu peux faire un tours ici : http://www.delphifr.com/tutoriaux/CONVENTIONS-ECRITURE-IDENTIFIANTS-VARIABLES-METHODES-DELPHI_413.aspx

sinon, le reste est trés bien, un peu trop aéré mais ça reste parfaitement lisible.
l'Ascii art est toujours sympa, je regarderais plus en details demain.

Commentaire de Bacterius le 06/05/2009 21:35:34

Moi ça rame un peu chez moi ... mais c'est très intéressant !
Je vais m'y plonger dès que possible ...

Cordialement, Bacterius !

Commentaire de blueperfect le 06/05/2009 23:49:03

Ce n'est qu'un avant goût...  

On peut en faire en HUD pour gameplay rapidement...

>>Bacterius
ça rame ?
T'as quelle config ?

Commentaire de Bacterius le 07/05/2009 16:57:36

Windows XP SP 3 avec disque dur intégré de 34 Go partitionné en lecteurs C et D, un lecteur CD/DVD en E:\, un disque dur externe 250 Go en F:\, 512 Mb RAM, connexion internet, opéra, un ventilateur probablement pété et un CPU 1.70 GHz.
Quand je dis je rame, c'est-à-dire que par exemple lors de l'animation (telle qu'elle est paramétrée au lancement du programme), quand je veux changer la trackbar, son mouvement est "hachuré", saccadé, un peu comme si tu faisais un sleep(50) en boucle sans ProcessMessages ... je sais pas comment dire ...

Cordialement, Bacterius !

Commentaire de blueperfect le 07/05/2009 20:03:56

>>Bactérius :
C pas normal....

Si tu rajoutes dans le FormCreate un doublebuffered = true ?

Commentaire de blueperfect le 07/05/2009 22:29:12

>> Bactérius :

J'ai fait la correction pour ton vieux PC :

OnPaint se réfèrait au Canvas de la Form, et maintenant de la PaintBox... ainsi, il n'y a plus de saccadé !

Commentaire de Bacterius le 08/05/2009 10:06:55

Oui c'est bon mon VIEUX PC (n'est pas un vieux PC, il a juste un ventilateur en moins, donc je dois baisser la vitesse du CPU à "basse" ou "moyenne" pour éviter qu'il s'éteigne, mais je vais le réparer dans le courant de la semaine prochaine) fonctionne maintenant :D plus de saccadé.

Cordialement, Bacterius !

PS : vire les fichiers inutiles, en particulier les fichier .dsk, .dof, .cfg. Ils enregistrent les options de Delphi (position de la fenêtre, répertoire de travail), et c'est avec cette gourde que je connais ton nom de famille ^^

Commentaire de blueperfect le 08/05/2009 15:02:20

grrrrrrrrrrrrrrr...Mais pas mon mot de passe !

Commentaire de nethacker le 09/05/2009 22:37:36

J'arrive pas à compiler moi,j'ai Delphi 6, et il n'arrive pas à créer le dcu, si tu peux l'uploader sur ton serveur si t'en as ou quelque part ailleurs ça serait bien sympa.

Commentaire de nethacker le 09/05/2009 22:49:02

Ah non c'est bon, apparemment c'est les fichiers de configuration, il voulait à tout prix créer le dcu dans ton bureau /David H.../

Commentaire de nethacker le 09/05/2009 22:56:27

Je m'excuse pour avoir écrit trop de commentaires à la suite, mais comme je ne peux éditer ...
C'est vraiment bizarre parceque, je voulais faire exactement la même chose ce matin, à la manière d'un noob plusieurs Tedit et un autre pour entrer une chaîne et non un fichier comme votre source, ne connaissant pas les threads je procède lettre par lettre comme votre "write", finalement je me bloque là :

var
alphabet : string;
length,i,j : integer;
begin
i := 1;
j := 1;
alphabet := 'abcdefghijklmnopqrstuvwxyzZBCDEFGHIJKLMNOPQRSTUVWXYZ';
length := edit22.GetTextLen;
while ( i <= length) do begin
if copy(edit22.Text,i,1) <> copy(alphabet,j,1)
then begin inc(j); edit1.Text := copy(alphabet,j,1); edit1.Refresh; sleep(120);   end
else begin inc(i); end;
end;

Je n'arrivais pas à passer au deuxième edit, impossible de faire un edit"i", pourtant c'est ce que je voulais faire, vous avez une idée ? du code on runtime ?

Commentaire de blueperfect le 09/05/2009 23:17:29

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

Commentaire de nethacker le 09/05/2009 23:45:05

Merci beaucoup !

Commentaire de Bacterius le 10/05/2009 11:16:47

"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 !

Commentaire de blueperfect le 10/05/2009 16:51:25

>>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...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Inverser du texte dans un bitmap [ par apophys ] Bonjour,J'ai un texte dans une image ecris a l'aide de canvas.TexTOut , je souhaire lorsque que l'on pas la souris de faire comme un rectangle de sele inverse video [ par freakstreet ] J'essaie de dessiner un barGraph avec &#224; l'int&#233;rieur un texte &#233;crit. Je trace mon bord et ma barre de progression dans un canvas, j'&# soulignemet de texte sur une bitmap [ par ahmed12 ] Je voudrais savoir comment je peux dessiner une ligne qui fait souligner et suit la lecture de texte contenant dans une image bitmap dans une appli thread.sleep(5000) en delphi? [ par seni ] BonjourJ'ai cree un Thread qui doit realiser une fonction 5 sec apres qu'il soit lance. Si je mets un sleep de la maniere suivante:procedure TPrintThr Bouton dont le texte a une fonction de 'progessbar' [ par Rycku ] Bonjour,Apres d'infructueuse recherche je m'adresse à vous.Je voudrais faire un bouton dont le texte change de couleur en fonction de l'avancement du surligner du texte dans l'edit1 [ par cricri_b34 ] comment je peut faire pour créer un bouton qui surligne le texte dans l'Edit1 ?? Afficher du texte à l'écran en surimpression [ par krypto2000 ] Hello,Est-ce que quelqu'un pourrait m'indiquer comment faire pour afficher du texte en surimpression à l'écran.Je m'explique : J'ai fais un programme Pépin avec un stop et un thread... [ par manu00 ] Hello les pros :-)J'ai un soucis que je n'arrive pas a resoudre...Dans un thread, j'ai ceci...procedure Mythread.Execute;var i:integer;begin repeatbe apprendre les threads [ par MoveX ] j ai cherche plusieurs sources, mais chaque source traite les thread d une facon differente... jaimerais avoir un exemple de thread simple pour pouvoi Manipulation d'un fichier texte [ par koaiz ] Hug Tribue des Programmeur PalJ'utilise un fichier texte pour mon application comme log file mais j'ai un probleme car lors de la fermeture de l'appli


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,154 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales