Mer 25/07/2012 - Actualités

Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Mer 25/07/2012 - Actualités

Message non lu par Xavier »

Multi-sélection


La gestion de sélection multiple dans le calendrier est intéressante même si cela donne un peu l'impression de devoir réinventer la roue. :?

On a maintenant trois variables :
  • Selected_Date qui correspond à la date de la dernière cellule sélectionnée par un clic (avec ou sans Ctrl / Shift).
  • Selected_Dates qui est la liste des dates sélectionnées. C'est en fait une liste de chaines au format YYYYMMDD, ce qui permet d'utiliser les propriétés Sorted := True et Duplicates := dupIgnore de TStringList, et d'éviter ainsi les problèmes de tri et d'unicité. :mrgreen:
  • Active_Date qui est la date sélectionnée active (et dont les évènements seront affichés).
Un clic normal met à jour Selected_Date, Active_Date et réinitialise Selected_Dates.
Les clics avec Ctrl et Shift ajoutent les jours dans Selected_Dates, mettent à jour Selected_Date, mais ignorent Active_Date, ce qui permettra de conserver l'affichage.


Aujourd'hui, il va falloir distinguer à l'affichage les dates sélectionnées. Toujours pour optimiser et éviter un Refresh de toutes les cellules, le système devrait fonctionner en mode unitaire si besoin :
  • Lors des opérations de [dé]sélection : mise à jour des cellules concernées uniquement.
  • Lors d'un scroll, appel de cette mise à jour dans la boucle qui de toutes façons rafraichit toutes les cellules.
Dans le premier cas, le service saura s'il s'agit d'une sélection ou désélection et modifiera le look de la cellule en conséquence. Dans le second, le Refresh vérifiera si la date de la cellule en cours derafraichissement est dans la liste Selected_Dates.

Dans XT3 on avait un surlignage rouge pour la date du jour et un noir pour la date sélectionnée. Le rouge va disparaitre, la date du jour étant déjà en rouge gras. Les cellules sélectionnées (Selected_Dates) seront à priori entourées de gris sombre et la dernière cliquée (Selected_Date) de noir, comme ça on saura exactement où on en est.
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Mer 25/07/2012 - Actualités

Message non lu par Xavier »

TShape


Suite à la discussion sur comment dessiner des icônes simples et la suggestion de DMo d'utiliser des TCanvas, une petite étude de faisabilité avait été faite, et finalement le TShape avait été retenu comme étant un intéressant compromis entre les capacités graphiques du TCanvas et la facilité de manipulation du TPanel.

A la différence du TPanel, le TShape n'a pas de texte ni de bordure 3D (autant de propriétés en moins à intialiser, héhé) et il doit peser bien moins en mémoire car - en Delphi 5 - il a environ la moité des propriétés et évènements d'un TPanel.


Dans XT3, le surlignage de la date sélectionnée est assuré par le positionnement d'un TPanel sous la cellule et à la réduction de taille de cette dernière. Pour XT4, ce sont donc des TShape qui sont dynamiquement créés et positionnés sous les cellules des jours pour marquer les sélections.


Si on considère un TShape comme un TPanel sans texte ni bordure 3D, alors il faudrait en utiliser là où ces deux propriétés ne sont pas utilisées, comme dans tous les cas de Splitter :
TPanel.png
Pour en revenir au calendrier, la liste des dates sélectionnées ne permet pas de désélectionner les cellules correspondantes lors d'un simple clic. Pour le moment il y a une routine qui analyse toutes les cellules, compare sa date avec la liste, et décide de la sélection de la cellule. Boucler sur toutes les cellules pour un simple clic n'est pas satisfaisant, donc on va retenter la liste des cellules, mais cette fois-ci elle ne servira que pour les désélections. Et lors d'un scroll, cette liste sera ré-alimentée par le Refresh qui de toutes façons boucle sur la totalité des cellules. Toute cette zone devient très confuse, il va falloir la finir rapidement. :mrgreen:
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Mer 25/07/2012 - Actualités

Message non lu par Xavier »

Look des cellules


Piti poblème...

En essayent de positionner des TShape de sélection à fond transparents au dessus des TPanel des jours pour n'en garder que la bordure, il s'avère que ce n'est pas possible. (Selon internet, un TShape n'est pas un composant Windowed, il n'a donc pas de Z-Order et il n'est donc pas possible de l'afficher au dessus des composants Windowed.)

C'est ennuyeux puisque les mini-icônes du calendrier devaient être des TShapes affichés au dessus de TPanels.
Donc passage en mode design, et tests de rendu avec les cellules transformées en TShape avec le texte rajouté en TLabel...


L'idée de départ était d'encadrer en gris les cellules sélectionnées, mais cela rendra très mal sur les jours fériés :
Grey.png
On peut donc les passer en noir fin, et garder le noir épais pour la date active :
Black.png
Ou alors les mettre en pointillés, avec date active en fin :
Light.png
Ou date active en épais :
Dual.png
Des avis ? :)
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Mer 25/07/2012 - Actualités

Message non lu par Xavier »

Multi-sélection


La multi-sélection fonctionne, mais pour le moment uniquement en statique (sans scrolling).
MultiSelect.png
Il est finalement possible d'ajouter plusieurs plages de dates non adjacentes, car lors d'un [Shift + Clic], le code ajoute les dates depuis le dernier clic, il n'y a donc pas besoin de faire [Ctrl + Shift + Clic] pour rajouter une période. :)

Demain ce sera le scrolling et ses impacts sur les sélections. :twisted:
Vous n’avez pas les permissions nécessaires pour voir les fichiers joints à ce message.
Denis
Messages : 180
Enregistré le : jeu. 23 juin 2011 09:21

Re: Mer 25/07/2012 - Actualités

Message non lu par Denis »

Je reste convaincu qu'il faut que tu travailles avec un TCanvas légèrement surchargé pour pouvoir modifier sa zone de dessin et donc dessiner dessus ce que tu veux (dont le fond, les "icones" etc...) Au passage, ca pourrait permettre aussi de matérialiser les sélections, en rendant le fond de la cellule un eu plus sombre par exemple, ou alors avec une couleur de fond signifiant la sélection (en cachant alors la couleur de fond d'information).

Sinon, pour les propositions d'affichage des sélections, les deux dernières images ne sont pas visibles.
D'une façon générale, je pense qu'il faut faire un autre couleur de bordure, plus voyante. Genre jaune, ou un truc plus vif... Ou jouer avec la couleur de fond, comme proposé ci-dessus.
Au pire, pour insister sur le highlight, et si tu veux pas toucher à la couleur de fond, tu pourrais mettre une bordure fine colorée et colorer aussi le texte de la cellule de la même façon.

Enfin je propose que le scroll horizontal ne modifie pas la sélection: si je veux sélectionner une semaine de janvier 2012, et une de décembre 201é, mais que je suis pas en écran large de 3000px, il faudra que je scroll, mais je n'ai pas envie de perde ma multi-sélection....
Xavier
Administrateur du site
Messages : 817
Enregistré le : mer. 22 juin 2011 18:25

Re: Mer 25/07/2012 - Actualités

Message non lu par Xavier »

DMo a écrit :Je reste convaincu qu'il faut que tu travailles avec un TCanvas légèrement surchargé pour pouvoir modifier sa zone de dessin et donc dessiner dessus ce que tu veux (dont le fond, les "icones" etc...) Au passage, ca pourrait permettre aussi de matérialiser les sélections, en rendant le fond de la cellule un eu plus sombre par exemple, ou alors avec une couleur de fond signifiant la sélection (en cachant alors la couleur de fond d'information).
Les cellules sont désormais dessinées avec du TShape, qui a les mêmes propriétés graphiques que le TCanvas (Brush, Pen, Shape, etc), mais qui me parait en être une "encapsulation" de plus haut niveau, avec les avantages des composants graphiques, par exemple il a le SetBounds et le Visible. Je préfère effacer une cellule par un TShape.Free que de dessiner du gris par dessus, mais je vais quand même faire un test avec du pur TCanvas car il a une propriété TextOut qui me permettrait de me passer des TLabels additionels qui servent à afficher le jour. :)
DMo a écrit : Sinon, pour les propositions d'affichage des sélections, les deux dernières images ne sont pas visibles.
Oui, ça arrive de temps en temps, ça semble un problème de forum. :(
DMo a écrit : D'une façon générale, je pense qu'il faut faire un autre couleur de bordure, plus voyante. Genre jaune, ou un truc plus vif... Ou jouer avec la couleur de fond, comme proposé ci-dessus.
Au pire, pour insister sur le highlight, et si tu veux pas toucher à la couleur de fond, tu pourrais mettre une bordure fine colorée et colorer aussi le texte de la cellule de la même façon.
Je vais essayer avec des bordures colorées.
DMo a écrit : Enfin je propose que le scroll horizontal ne modifie pas la sélection: si je veux sélectionner une semaine de janvier 2012, et une de décembre 201é, mais que je suis pas en écran large de 3000px, il faudra que je scroll, mais je n'ai pas envie de perde ma multi-sélection....
Yep, le système utilise maintenant une liste de dates, il est possible de garder en sélection des dates qui ne sont plus affichées suite à un scroll.
Répondre