Calendrier entièrement en gdi+

Soyez le premier à donner votre avis sur cette source.

Vue 9 016 fois - Téléchargée 819 fois

Description

Voici un petit controle pour palier aux exemples assez insolites que l'on peut trouver sur ce site. Alors, pour éviter d'avoir d'un coté la manière de tracer un trait, de l'autre une forme, tout est réuni ici.

Voici la liste des choses qui sont abordées :

- Dessin en GDI+
- Création d'un control utilisateur de de propriétés
- Utilisation du Double Buffer pour dessiner (cela évite de voir les dessins clignoter)
- Démonstration d'effets en tous genres
- Transitions en Fondu
- Fondu de Texte
- Fondu de couleurs
- Tracé de formes en GDI+
- Tracé de texte en GDI+
- Utilisation des API pour gérer la taille du texte en pixels
- Utilisation des Rectangles
- Gestion des coordonnées relatives pour gérer dynamiquement la position de la
souris lorsqu'elle passe sur un texte

Donc, pour résumer : Ce controle est un controle qui permet d'afficher un Calendrier en GDI. Ce controle s'appuis sur une classe, alors il vous suffit de copier le code du control vers un formulaire, vous pourrez créer ce calendrier mais version "économiseur d'écran". Je le mets entre parenthèses car le GDI+ et le Double Buffer qui redessine en permanence afin de rendre les animations fluides prend des ressources en CPU. Donc, à moins de le programmer en OpenGL ou DirectX, le GDI+ prend beaucoup de ressource (je préfère prévenir pour éviter les remarques ladessus), mais, OpenGL ou DirectX, ce n'était pas l'objet de cette source.

Vous voulez un exemple d'application connue qui est programmée entièrement en GDI+ ? C'est pas compliqué, prennez Safari 3 pour Windows. Le programme bug, l'interface parfois est à moitié en XP/Mac, donc, le GDI+ n'est pas très adapté pour les grosses surfaces. Cependant, pour un petit controle, un bouton, ou ce genre de chose, c'est possible. Pour les grosses animations, préférez WPF.

Comment faire pour lancer ce projet ? Ouvrez le (J'ai utilisé Visual Studio 2005), puis GENEREZ LA SOLUTION AVANT DE COMMENCER A AFFICHER UN FORMULAIRE pour ne pas obtenir l'erreur indiquant que le fichier du controle n'est pas présent (inutile de laisser le répertoire bin pour poster sur le site).

Pour ce qui est des commentaires sur le code, je n'ai pas tout commenté, car le principe de "Boucle de de dessin est toujours le même". En GDI, on programme une boucle (ici en fonction grâce au Timer qui Invalide la zone à chaque milliseconde), ou bien apr une boucle loop par exemple. Vous crééz des variables qui indiquent ce qu'il faut tracer. Ici, j'ai créé un Select Case afin d'afficher la page qu'il convient. Chaque page est dessinée dans une fonction, qui à pour arguments un objet graphique, puis on appelle cette fonction dans l'évènement OnPaint qui à pour PaintEventArg e. Donc, on récupère a fonction dans l'évènement e du OnPaint et le Timer invalide MyBase pour effacer et OnPaint redessine la zone. On applique le double buffer en 2 lignes de code au début du projet et le tour est joué.

PS: La source d'inspiration pour ce controle était le calendrié présent en Widget dans Windows Vista.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
45
Date d'inscription
samedi 16 janvier 2010
Statut
Membre
Dernière intervention
22 janvier 2010

Le code est vraiment pas bon! J'appuie.
Messages postés
234
Date d'inscription
jeudi 18 janvier 2007
Statut
Membre
Dernière intervention
3 novembre 2011
1
Même si le rendu au final est pas trop mal, le code source est absolument abominable. C'est carrément dommage étant donné qu'il semble avoir beaucoup de travail là dessous. Voici les principales choses que tu devrais savoir :

-Une "Function" est sensée retourner une valeur, elle n'est pas à utiliser comme simple routine.

-Les "Property" sont les propriétés d'un objet, hors tu les utilises comme des méthodes. Le get ne retourne jamais rien et tu mets le même code dans le get et set ...

-Utilises des AND à la place d'imbriquer des IF les uns dans les autres.

-Utilises des tableaux de variables.

-Creuse-toi l'esprit, ton code source fait 1137 lignes et je peux te dire avec certitude que codé correctement il en ferait à peine 200.

-Et énormément d'autres choses.

En bref, je respecte beaucoup le travail que tu as du faire, mais il faut que tu suives un tutoriel d'urgence car visiblement tu ne connais pas de beaucoup de choses au VB.NET.

Simon.

PS : Voici un bon tutoriel que je pourrais te conseiller ;) :
http://plasserre.developpez.com/vsommair.htm
Messages postés
840
Date d'inscription
mercredi 22 octobre 2003
Statut
Membre
Dernière intervention
7 janvier 2009
9
Salut,
Rien de réjouissant, au contraire: je trouve ta source intéressante, mais elle est vraiment très mal codé.

"Ce calendrier à été développé pour être étudié par les membres de la communauté VbFrance"
Moi je ne conseil à personne d'étudier cette source, elle est bien trop complexe et non performante.

"Toute utilisation même à des fins non commerciales dans un programme autre que celui-ci est interdite sans mon accord écrit."
Ouais si tu veux...

"Dessin en GDI+"
Oui et alors, quel autre choix a-tu pour dessiner qqch sur une Windows Forms? Toutes les windows forms sont dessiné en GDI, du plus simple label à la ListView, tout est en GDI dans Windows. Et dire "j'ai fais une application qui utilise GDI+", parce qu'on fait un Graphics.DrawString, ben bon... En plus, GDI+ fait plutôt références aux API, alors pourquoi ne parles-tu pas des API utilisé pour créer une fenêtre, utiliser un Timer, détecter le clique de la souris, etc?

"Vous voulez un exemple d'application connue qui est programmée entièrement en GDI+ ? C'est pas compliqué, prennez Safari 3 pour Windows. Le programme bug, l'interface parfois est à moitié en XP/Mac, donc, le GDI+ n'est pas très adapté pour les grosses surfaces"
Ainsi que Word, Excel, Internet Explorer, l'explorateur Windows, le bureau, le menu démarrer, Firefox, Live Messenger, Visual Studio, Avast, Media Player (a part l'image vidéo), eMule, Paint.NET... j'arrète là, c'est juste pour redire que TOUTES les Windows Forms utilisent GDI pour s'afficher à l'écran. Donc que GDI = Lent et bugué, laisse moi rire... (il est vrai que c'est lent pour faire de grosse application graphique (Jeux, vidéo

"Utilisation du Double Buffer pour dessiner"
Oui, DoubleBuffer = True et c'est près. Ou alors suffit d'utiliser une PictureBox, ou le DB est activé par défaut.

"Je le mets entre parenthèses car le GDI+ et le Double Buffer qui redessine en permanence afin de rendre les animations fluides prend des ressources en CPU. Donc, à moins de le programmer en OpenGL ou DirectX, le GDI+ prend beaucoup de ressource"
Parlons-en... Le fait d'afficher un label sur une form te prend 100% de CPU toi? Ben non, et pourtant ton code utilise 100% de CPU pour afficher 3 ligne de texte (statique). C'est justement en DirectX ou OpenGL, dans les jeux, qu'on créé une boucle comme tu l'as fais, mais pas pour afficher un texte en GDI.

"car le principe de "Boucle de de dessin est toujours le même". En GDI, on programme une boucle (ici en fonction grâce au Timer qui Invalide la zone à chaque milliseconde), ou bien apr une boucle loop par exemple"
Tout faux...

"On applique le double buffer en 2 lignes de code au début du projet et le tour est joué."
En 1 ligne avec la fonction de DoubleBuffer intégré dans les contrôles Windows (Me.DoubleBuffer = True). Mais il aurait été possible d'utiliser un BufferedGraphics pour éviter de tout redessiner à chaque rafraichissement.
Parlons de la longueur du code. Près de 1000 lignes de code pour afficher un peu de texte sur un controle, ça fait beaucoup, vraiment beaucoup... Je suis sur que je fais la même chose en 10 fois moins de code...


Bon j'arrète... (je pourrais encore faire des pages de commentaires en citant ton code)
BadoqueAlex, je te félicite pour l'effort et surtout d'avoir posté ta source sur le site, mais je pense que tu as encore beaucoup à apprendre avant de créer du code d'exemple destiné à "être étudié par les membres de la communauté VbFrance"
A l'occase, si je suis motivé, je ferai un contrôle semblable histoire que tu puisse l'étudier ;)

Dsl d'avoir été si négatif,
A+

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.