Cellules
Les marqueurs en pseudo-reliefs ont pu être dessinés sur le Canvas de composants TPaintBox, choisis car ils semblaient plus simples à manipuler que les TImages.
Ils sont en fait très particuliers, puisque le code qui dessine doit être écrit dans leur évènement OnPaint, celui-ci étant déclenché par Windows dès que le composant est affiché. (Ils ne sont pas persistants...) Exécuter tout le code à chaque fois que la page du Calendrier est affiché n'était pas acceptable, donc ils ont été remplacés par des TImage.
Ceux-ci ayant des méthodes Show, Hide et un évènement OnClick, les cellules des jours sont désormais composées d'un TImage unique au lieu des ensembles TLabel + TShapes multiples !
C'est laid mais ce sont de vrais images, et cette implémentation partielle a permis de valider le resize de la fenêtre.
Il reste à peaufiner la police, son alignement, la couleur et revoir la gestion des sélections avant de pouvoir brancher le dessin des périodes, mais tout cela a déjà été testé avec succès dans le prototype d'hier soir.
Sam 09/02/2013 - Actualités
-
- Administrateur du site
- Messages : 817
- Enregistré le : mer. 22 juin 2011 18:25
Sam 09/02/2013 - Actualités
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
-
- Administrateur du site
- Messages : 817
- Enregistré le : mer. 22 juin 2011 18:25
Sam 09/02/2013 - Actualités
Nouvelles cellules
Les nouvelles cellules basées sur des images sont opérationnelles.
Le dessin des marqueurs des périodes étant désormais faisable grâce à ces images, retour sur la gestion des périodes elles-mêmes...
De nouveaux raccourcis-claviers ont été ajoutés au navigateur du Calendrier :
Les nouvelles cellules basées sur des images sont opérationnelles.
Le dessin des marqueurs des périodes étant désormais faisable grâce à ces images, retour sur la gestion des périodes elles-mêmes...
De nouveaux raccourcis-claviers ont été ajoutés au navigateur du Calendrier :
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
-
- Messages : 180
- Enregistré le : jeu. 23 juin 2011 09:21
Re: Sam 09/02/2013 - Actualités
Pas mal les raccourcis
Concernant le OnPaint, tous les widgets ont un OnPaint (généralement sur un super classe, en privé) et sont redessinés entièrement à chaque fois. La seule question est donc de savoir si tu veux utiliser ton code pour le faire comme tu veux, ou un widget delphi pour le faire comme delphi et windows (ensembles) veulent le faire...
Concernant le OnPaint, tous les widgets ont un OnPaint (généralement sur un super classe, en privé) et sont redessinés entièrement à chaque fois. La seule question est donc de savoir si tu veux utiliser ton code pour le faire comme tu veux, ou un widget delphi pour le faire comme delphi et windows (ensembles) veulent le faire...
-
- Administrateur du site
- Messages : 817
- Enregistré le : mer. 22 juin 2011 18:25
Re: Sam 09/02/2013 - Actualités
Le problème avec ce TPaintBox et que le seul moyen d'y afficher quelque chose était de le coder dans son OnPaint. Dessiner dans son Canvas par du code normal ne fonctionne pas.DMo a écrit :Pas mal les raccourcis
Concernant le OnPaint, tous les widgets ont un OnPaint (généralement sur un super classe, en privé) et sont redessinés entièrement à chaque fois. La seule question est donc de savoir si tu veux utiliser ton code pour le faire comme tu veux, ou un widget delphi pour le faire comme delphi et windows (ensembles) veulent le faire...
Donc à chaque affichage, la totalité du code est exécutée. Pour le moment il n'y a pas grand chose, juste la gestion de la date courante et les sélections, mais plus tard il y aura tous les marqueurs, et du code qui analysera les données pour en extraire les périodes etc... Une fenêtre d'un autre programme se superposant devant le Calendrier déclencherait donc la réévaluation de tout ce code.
Avec un TImage, c'est comme n'importe quel composant, je le construit dans mon code, Windows se souvient de son look, et le réapplique quand il le faut, mais à partir de l'image déjà créée. En fait je me demande à quoi peuvent servir ces TPaintBox.
En recherchant dans les messages de l'été dernier, tu m'avais déjà conseillé de bosser directement via le Canvas des composants. J'avais préféré utilisé des TShape car manipuler les Brush et Pen des Canvas me paraissait archaïque, mais c'est clair que c'est puissant...
Code : Tout sélectionner
// Couleur du fond
Day_Cell.Canvas.Brush.Color := Day_Color;
// Couleur de la bordure selon la sélection
if Day_Selected
then Day_Cell.Canvas.Pen.Color := clBlack
else Day_Cell.Canvas.Pen.Color := Day_Color;
// Coloriage du fond
Day_Cell.Canvas.Rectangle(0, 0, 36, 16);
// Style du texte selon l'activation
Day_Cell.Canvas.Font := Self.Font;
if Day_Date = LV_ActiveDate
then Day_Cell.Canvas.Font.Style := [fsBold]
else Day_Cell.Canvas.Font.Style := [];
// Couleur du texte selon la date
if Day_Date = Trunc(Date)
then Day_Cell.Canvas.Font.Color := clMaroon
else Day_Cell.Canvas.Font.Color := clBlack;
// Affichage du texte
DecodeDate(Day_Date, Year, Month, Day);
SetTextAlign(Day_Cell.Canvas.Handle, TA_CENTER);
Day_Cell.Canvas.TextOut(18, 1, IntToStr(Day));