Gestion tshapes dynamiques

Soyez le premier à donner votre avis sur cette source.

Vue 2 822 fois - Téléchargée 725 fois

Description

Simple exemple d'utilisation des TShapes créés dynamiquement sur un canvas
quelconque permettant:

1. Identification du Shape cliqué ou survollé(gestion d'évènement souris)
2. Lecture des informations liées à chaque cellule représentée par un Shape
3. Modification immédiate de la grille et des formes de ses cellules
4. Gestion élémentaire des modifications des paramètres de configuration
et des updates d'affichage :
- par la technique des hint
- par identification du nom du composant
- par gestion des dimensions de la fenêtre et des scrollbars

Source / Exemple :


Le source est commenté en détail

Quelques originalités:

1. Astuce pour maintenir le dessin des infos toujours visible malgré les
    scrollbars qui ne tiennent pas compte du dessin sur le canvas, mais
    uniquement de la présence de contrôle
    => Les Statistiques sont alors déssinées sur un paintBox
2. Utilisation de Format pour séparer les milliers dans les entiers
3. Pas une originalité mais utilisation de Tri à Bulles pour Tab à 2 
   Dimensions

Conclusion :


Code écrit en D7 perso... pour se remémorer certaines bases tout en offrant une facilité d'utilisation...
Très utile par exemple pour des plateaux de jeu ou des représentations en couleurs de données dans une représentation spatiale en plusieurs dimensions.

Une amélioration serait intéressante à faire mais je n'ai pas trouvé la solution: La zone d'édition des stats est protégée que si je l'habrite dans un contrôle à cause des scrollBars (mémoire écran)... Il serait plus logique que ce ne soit pas le cas, bien que ça ne soit pas un problème en soi! Pour le fun...

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_cantador
Messages postés
4716
Date d'inscription
dimanche 26 février 2006
Statut
Modérateur
Dernière intervention
27 mars 2018
9 -
dis-donc Jean_Jean,
ton histoire de tribu aléatoire..
heu, déconne pas avec ça.
dès fois que le montant de ma pension de retraite serait elle aussi
calculée de manière aléatoire..
korgis
Messages postés
420
Date d'inscription
samedi 17 mai 2003
Statut
Membre
Dernière intervention
6 mai 2019
15 -
Ouais, on con-tribue, on con-tribue, et puis après, hein ?
Sinon, pas le temps de détailler le code, j'ai juste relevé 2 choses (tout à fait mineures).
1) La fonction d'affichage avec séparateur des milliers (ligne 157) :
tant qu'à utiliser 'Format', plutôt que d'écrire :
result := inttostr(n div 1000) + ' ' + format('%.3d',[n mod 1000]);
pourquoi ne pas faire :
Result := Format('%d %.3d', [n div 1000, n mod 1000]);
2) Ligne 291, tu annonces 'With ListTribues[nC] do', tu ouvres avec 'begin' et tu refermes avec 'end'.
Mais tu n'en profite pas, puisque tu répètes systématiquement 'ListTribues[nC]' entre 'begin' et 'end'.
Voilà, c'est tout pour l'instant, c'était juste pour chipoter.
Mais vous m'avez foutu de mauvais poil aussi, avec vos histoires de "tributs"... ^^
cs_Jean_Jean
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2 -
Bah, si vous êtes fonctionnaires, vous êtes encore à l'abri pour quelques années...
Moi j'ai essayé de me mettre au vert il y a quelques années avec une autonomie énergétique pour faire des économies! J'aurai de quoi écrire des livres entiers sur les monopoles en France. Et les mairies y contribuent largement...
Bon j'arrête, sinon, si je suis en colère, je vous balance une horde de borgs sur la toile!

Ok Korgis, noté!
Je prévois une correction bientôt...
A noter que pour l'instant IntSepToStr n'est valable que pour les valeurs inférieures à 1 000 000. Je pense qu'il serait intéressant de développer cette fonction de manière plus performante... Avis aux amateurs...
Ce code me donne une idée de Jeu... Mais bon faut que je revienne vers mon projet de composant. j'ai deux tutoriaux en cours...
Cirec
Messages postés
3809
Date d'inscription
vendredi 23 juillet 2004
Statut
Modérateur
Dernière intervention
1 septembre 2019
32 -
Salut,

idem pour moi,
j'ai également survolé le code et moi ce qui me choque c'est l'appel
au Destructeur directement ...
ListTribues[nC].Sh.Destroy;

On ne fait jamais, jamais appel au destructeur directement
il faut appeler la méthode Free qui elle appellera Destroy en interne et de
manière sécurisée.

et je doute que cette surcharge soit utile:
procedure TForm1.WMHScroll(var Msg : TMessage);
begin
inherited;
end;

@++
cs_Jean_Jean
Messages postés
637
Date d'inscription
dimanche 13 août 2006
Statut
Membre
Dernière intervention
13 décembre 2018
2 -
Exact Cirec,

La Surchage en questionn n'est plus nécessaire, elle l'était lorsque je dessinai directement sur le canvas les stats.

Me disait aussi pour destroy! C'est le premier qui m'est apparu dans la liste...

C'est noté!

Merci... pour vos rematques! Je corrige de suite.

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.