Horloge à affichage digital avec utilisation d'images bmp

Soyez le premier à donner votre avis sur cette source.

Vue 23 404 fois - Téléchargée 1 770 fois

Description

Le Form reste visible pendant le déplacement. Un array of TPicture sert à stocker les images représentant les chiffres de l'heure à afficher.

Le concept est de récupérer l'heure système au moyen d'un Timer et de l'afficher non pas avec une police de caractères plus ou moins réaliste, mais avec des chiffres au graphisme personnalisé.
Les 10 images représentent les chiffres de 0 à 9. Elles sont stockées au démarrage dans un tableau de TPictures. Elles seront attribuées à l'image correspondant au chiffre à afficher en fonction de leur indice dans ce tableau.
J'avais utilisé au départ une TImageList, mais le résultat ne m'a pas plu.
Je suis plutôt satisfait de l'effet, qui est celui que je voulais obtenir.
J'ai d'ailleurs déjà adapté la technique à mon "Player de zique" perso pour afficher le "elapsed time".
Et avant que ça ne devienne une usine à gaz (je vais y rajouter la gestion avec suivi d'alarmes, etc, etc...), il était temps de poster ce code qui me semble, malgré sa simplicité, présenter quelques aspects utiles ou didactiques :

- utilisation d'un fichier de type ini,
- déplacement d'un form sans la barre de titre,
- affichage du form pendant le déplacement (il reste visible),
- retour au paramétrage initial dès le bouton de la souris relâché.

J'ai préféré placer les bmp dans un répertoire plutôt que dans un fichier de ressources. L'utilisateur peut ainsi, s'il y voit un intérêt, personnaliser l'affichage. Il suffira de respecter les dimensions de l'image d'origine, ou au moins les proportions.

Source / Exemple :


code commenté dans le zip

Conclusion :


J'ai hésité entre deux réalisations. Bon, 13 Ko une fois zippé... Allez hop, j'envoie les deux !
Le code est identique, seul l'aspect change, et bien sûr les bmp sont différents.
Garanti compilable depuis D4, antérieur faut voir.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
374
Date d'inscription
vendredi 20 octobre 2000
Statut
Modérateur
Dernière intervention
15 janvier 2021

Jappe, je sais c'est le bleme que-ce que ca bouffe en ressources OnIdle ;o))

Trops dur de gerer tt ca..., c encore pire que les threads, puis le multithread ca plante, pis arf c trops dur la prog delphi, puis y à jamais d'astuces ;o))

puis delphi il est gourmand en ram, puis delphi il est po performant, puis delphi il fais des gos exe, puis delphi c'est pas pro, na ! ;o))

allez, Bon Coding a tous ..

ManChesTer.
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Salut, Caribensila !

Merci pour ton appréciation... :-)

Comme quoi y'a quand même moyen d'y glaner un ou deux trucs intéressants, dans ce code, quoi... ;-)

J'ai moi même appris pas mal en le faisant, et les commentaires concernant la consommation en ressources m'ont grandement sensibilisé au problème.

Avant de coller un Timer n'importe-où pour une raison futile, j'y réfléchirai à deux fois !

Cette fois, j'y vais... (me coucher, pour ceux qui me liraient demain matin)
Messages postés
1725
Date d'inscription
vendredi 27 décembre 2002
Statut
Modérateur
Dernière intervention
11 avril 2021
8
Salut à tous !

Il est un peu tard pour faire une réponse à chacun.
Je vais donc céder à la procrastination, comme on dit chez Ernest Antoine (enfin, j'imagine...). Bref, je remets à plus tard, comme on dit chez moi.

En gros, je suis quasiment d'accord avec vos commentaires.

Le reproche principal que l'on peut faire à ma pendule, c'est de consommer trop de ressources processeur. Surtout pour un petit bout de machin pas bien gros, et qui ne fait en définitive qu'afficher l'heure, lol !

J'ai optimisé un maximum mon code (je posterai le plus tôt possible), sans trahir le concept de départ, qui était :

- afficher l'heure en me servant d'images, afin d'imiter au plus près l'affichage "digital" de nos chers réveille-matin,
- écouler mon stock de bmp faits sous P.t.Shop et dont je ne savais que faire. Faire un peu de ménage, quoi...

Je sais que le prix à payer est lourd pour nos pauvres CPU, mais n'est ce pas l'occasion d'en changer, tiens, justement ?

Sérieusement, il n'y a pas 36 manières d'économiser les ressources, à moins de :

- régler Timer.Interval autour de 1000, un poil en dessous c'est mieux (OK avec toi grandvizir), mais l'affichage des secondes n'est plus régulier, et ça ne me plait pas;
- supprimer l'affichage des secondes... :( ça me fait de la peine, mais c'est forcément la solution la plus efficace, vu que le Timer, dans ces conditions, on va pas le surmener.

Sinon, en mettant les bmp dans une TListImage, j'ai vu qu'on économisait un peu là aussi.

En définitive, dans la dernière évolution, j'ai opté pour la TListImage.

J'ai également optimisé l'affichage : les images ne sont réaffichées que quand c'est nécessaire, et non plus systématiquement à chaque changement des secondes. J'ai laissé l'intervalle du Timer à 10, mais on peut aller jusqu'à 99 sans trop nuire au rythme.

Je n'irai pas plus loin dans les concessions, car j'agis là essentiellement par commisération pour vos pauvres petits CPU asthmatiques, et n'ayant par ailleurs aucune action chez Intel ou AMD...

> Mon bon Kenavo, je n'avais pourtant pas l'intention d'être désagréable avec toi, mais vois-tu, dans certaines circonstances (tu n'aimes pas, hein, tu sens que ça va pas te plaire...) dans certaines circonstances disais-je, vois-tu... heu comment l'exprimer... je me permets de ne pas partager complètement ton point de vue. Excuse-moi pour la brutalité de mon propos, mais bon... une police de caractère, je trouve que ça le fait pas.
Et puis c'est pourtant vrai que dans mes moments de doute existentiel, j'ai plus confiance dans le hardware que dans mes softs. Dans ces moments là, je me raccroche à l'affichage de mon réveille-matin qui ne m'a jamais trahi (la réciproque ne s'applique pas forcément). A bon entendeur... ;-)

> Mauricio, puisque tu es d'accord avec Kenavo, et bien même réponse. Une font, vectorielle ou pas, c'est moins joli que ce qu'on peut obtenir avec une image. Et puis qu'est-ce que j'en fais de mes bmp, alors ? Même en solde, qui en voudrait...

> grandvizir, faudrait te moderniser, et passer à Delphi 4 et Windows millenium. J'ai entendu dire qu'ils allaient bientôt sortir D5 et Win 2000. Je te taquine ;o) ...Je fonctionne toujours sous 98, et j'aime pas XP >:(

> ManChesTer, merci pour ton exemple d'utilisation de OnIdle. Mais qu'est ce que ça bouffe comme ressource CPU quand c'est à false, lol !

Bon, et bien finalement, je crois que j'ai répondu à tout le monde. On bavarde, on voit plus le temps passer...

A plus pour la mise à jour du code, bonne prog' :p

japee
Messages postés
2527
Date d'inscription
jeudi 15 janvier 2004
Statut
Membre
Dernière intervention
16 octobre 2019
18
Juste pour dire que je mets un 10/10 pour ce source et ses commentaires de pros qui m'apprennent bcp. Le 6/10 actuel me semble trop injuste. C'est la 1ère fois que je note, mais c'est de bon coeur. Bravo et merci à tous!
Messages postés
2106
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5
Malheureusement chui d' accord avec Kenavo.
Surtout que les fonts sont en vecteur, donc on ne perd pas en bo T quel que soit la taille !
Mais pour ta défense, on dira qu' on a pas besoin d' installer de fonte dans le système ... houai, ça le fait pas : (
Afficher les 21 commentaires

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.