Dessiner un rectangle de sélection au dessus d'autres composants

Soyez le premier à donner votre avis sur cette source.

Vue 13 562 fois - Téléchargée 1 051 fois

Description

Dans le forum, Guépard a posé une question (http://www.delphifr.com/forum.v2.aspx?ID=406148) fort intéressante : comment, à l'exécution, sélectionner plusieurs composants en traçant un rectangle au-dessus et non pas en dessous (chose beaucoup plus facile à faire).

Conclusion :


Le code utilise la fonction DrawFocusRect des API par souci de simplification. Le but du demandeur est de dessiner un rectangle de couleur. Il n'y a aucune difficulté à utiliser la méthode Rectangle d'un objet Canvas en remplacement.

Je précise que ce code ne se limite pas à dessiner un rectangle mais qu'il vérifie :
- que le dessin reste dans des limites fixées (voir commentaires sur la méthode MakeRect)
- que le rectangle de sélection, qu'il soit dessiné vers la droite ou la gauche, le haut ou le bas, ajuste les coordonnées pour obtenir un rectangle dont les coordonnées sont toujours définies de la manière suivante : (coin supérieur gauche, coin inférieur droit).

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5 -
Ça manque d' explications !
Y a pas de zip dans la source avec le link que tu me donnes :(

J' ai bien fait [CTRL]+O+O dans un projet et il me montre les options de compilation, exact?
D' ailleurs, pourquoi un programme ne fonctionnerai pas de la même manière sur 2 postes differents, je pige pas même si j' en ai déjà fait l' expérience, surtout sur 2 versions differentes de Windows. Jte jure, là chui perdu!
cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5 -
Haaa, chui super deçut !!!
Non, pas de la source mais par la directive {$Define Debugging}. Je pensais que le code entre {$IfDef Debugging} et {$EndIf} s' executait si on courait le programme depuis Delphi (mode debugging quoi ...) mais non, en cliquant sur l' exe, le code s' execute aussi :(
Bref, quel est l' interêt alors qu' on aurait le même effet en creant une var de type bool comme ceci:
if varBool = true
then begin


end

Qqu' un peut m' eclairer sur les directives de compilation. Y a t' il un tuto la dessus ??? La réponse est oui mais où ?
cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5 -
Dans ce cas, merci pour cette précision.
Je vais pouvoir noter maintenant ! (bem oui, je note pas tout de suite parce qu' on ne peut changer notre note malheureusement) ...
cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Statut
Modérateur
Dernière intervention
9 janvier 2013
24 -
Bonjour Mauricio.
Le code situé juste après {$IfDef Debugging} n'est jamais exécuté puisque la directive de compilation située au début de l'unité est désactivée (un caractère "!" entre l'accolade et la définition de la directive. Je l'ai laissé volontairement pour montrer l'usage des directives de compilation.
Pour ta remarque, je suis tout à fait d'accord. Mais c'était précisément l'effet recherché.
cs_MAURICIO
Messages postés
2233
Date d'inscription
mardi 10 décembre 2002
Statut
Modérateur
Dernière intervention
15 décembre 2014
5 -
Salut à toi DelphiProg! Je connaissais déjà DrawFocusRect( mais pas {$IfDef Debugging} dont je n' ai toujours pas compris comment il fonctionne vu que le code juste après n' est jamais executé?!

Juste une petite remarque:
on ne peut pas commencer à seleccionner si l' on clique sur l' un des panels, dommage. J' ai attribué les events OnMouseDown/OnMouseMove/OnMouseUp aux panels mais faut changer quand même quelques bricoles à cause des coordonnées de la souris qui sont celles du compo Sender...
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.