Comment deplacer un dessin sur une form et ce, sans clignotement version tlist

Description

Cet exemple montre comment déplacer un dessin tracé par le programme (en opposition à un bmp).

Exemple réalisé par Jean-Yves Quéinec. Remise en version TList par moi même (la premiere version etait limité a 8 zones).

retrouver la liste des exemples sur ce type de programme ici (site : phidels.com ):
http://phidels.com/php/index.php3?page=../commun/voirexemples.inc.php3&ChoixMenu=dessin

url pour telecharger la version originale :

http://phidels.com/php/index.php3?page=../php/pagetelechargementzip.php3&LienTelechargement=../php/zip/deplacedessin.zip&NomExempleTelechargement=deplacedessin.zip&id=46

Source / Exemple :


dans le ZiP

Conclusion :


Ayant renvoyé l exemple a l auteur, il m'a repondu sur les points suivant :

Je vous remercie de votre exemple. Quelques remarques cependant:
- Il vaut mieux en delphi utiliser des "objects" que des "records" pour les insérer dans une liste. C'est meilleurs que d'utiliser des pointeurs sans type p^
- Sur l'organisation générale il faut prévoir au départ une Tscollbox (align client) avec la paintbox dedans cadrée en haut à gauche et avec align none. Prévoir aussi le zoom. Le redimensionnement de la fiche ou le aoom agissent sur la taille de la paintbox et on redessine tout.
- Avec un bitmap de fond il faut penser à optimiser les affichages lors d'une création ou d'un déplacement. La séquence est compliquée à cause de la superposition possible des images : il y a un gros travail sur les rectangles . Calculer le rectangle union des deux rectangles avant déplacement et après déplacement, sauf si ces deux rectangles ne se touchent pas. On décide de donc de faire 1 ou 2 affichages de rectangles. Il faut mémoriser l'ordre des avant plans et arrière plan -> Zorder. je gère celà en utilisant une Tsringlist triée au lieu d'une stinglist. La partie chaine de caractère représente le z order. J'utilise 4 chiffres (inttostr avec ajout de zeros de gauche pour faire 4 caractères). Un menu flottant gère la nise en avant plan et en arrière plan , comme quand on construit une fiche Delphi.
- en fait pour simplifier la gestion des différents types d'objets et aussi pour pouvour facilement sauver sur disque les images vectorielles je n'utilise pas de structure (rectangles) mais dans la stringlist je transforme tout en chaines de caractéres (left, right, top ... . ) Cela permet d'ajouter de nouveaux objets dasn la liste sans avoir à retoucher sa structure et surtout sans impacter ce qui a déja été programmé. On n'a pas besoin de tester le type d'objet pointé par la liste (champ objects) et de surtyper la fonction. Ce n'est pas lent du tout au niveau performances et on évite des tas de problèmes.


Cordialement, Jean-Yves

Codes Sources

A voir également

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.