Bonjour à tous,
Je voudrais savoir comment empêcher un contrôle de dessiner son arrière plan. Ainsi il affichera ce qu'il y a "derrière lui" ?
Je pense qu'il faut surcharger Paint() mais que faire dedans ?
Merci d'avance.
Seb
Bonjour à tous,
Je voudrais savoir comment empêcher un contrôle de dessiner son arrière plan. Ainsi il affichera ce qu'il y a "derrière lui" ?
Je pense qu'il faut surcharger Paint() mais que faire dedans ?
Merci d'avance.
Seb
Salut!
Si ton composant ne possède pas de propriété "transparent", il faudra dessiner toi-même l'arrière plan. C'est assez délicat dans la mesure où tu devras d'abord afficher l'arrière-plan à l'écran pour pouvoir le capturer pour ensuite afficher ton composant et redessiner l'arrière plan...
J'espère avoir répondu à ta question cette fois-ci!
à+
De retour parmis vous après 10 ans!!
Salut,
Je pense qu'en surchargeant la procedure CreateParams de ton composant, le problème sera résolu :
a+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 procedure TMonCompo.CreateParams(var Params: TCreateParams); begin with Params do ExStyle := ExStyle and not WS_EX_TRANSPARENT; end;
Je vais tester tout ça !
Mais par exemple, Tpanel n'a pas de propriété Transparent, et la jvcl en a rajouté une, et ça marche bien, et eux ne redesinne pas l'arrière plan à chaque, j'ai pas bien compris comment ils faisaient !
Si c'est le même genre de "transparent" que pour une form, c'est facile, le control n'existe plus!!
Regarde ce topic, peut-être qu'il t'aidera :
http://www.developpez.net/forums/viewtopic.php?t=110715
à+
De retour parmis vous après 10 ans!!
salut
pourqoi pas utiliser tout simplement la propriété visible du contole a cacher
PAS DE DESTIN, C'EST CE QUE NOUS FAISONS
Bon, alors, en surchargeant CreateParams, ça ne change rien.
Et en mettant visible à false, le controle ne recoit plus les evènements OnClick, etc... et les controles enfants sont invisible aussi, alors qu'il sont sensé être vu...
Essaye en interceptant le message WM_ERASEBKGND, un exemple avec un TScrollBox, tous les controles à l'intérieur sont visibles mais pas le scrollBox
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 Type TConteneur = class(TScrollBox) private { Déclarations privées } public { Déclarations publiques } constructor Create(AOwner: TComponent);override; procedure CreateParams(var Params: TCreateParams);override; procedure WMEraseBkgnd(var Msg: TWMEraseBkgnd); message WM_ERASEBKGND; end; procedure TConteneur.CreateParams(var Params: TCreateParams); begin inherited CreateParams(Params); Params.ExStyle := params.ExStyle or WS_EX_TRANSPARENT; end; procedure TConteneur.WMEraseBkgnd(var Msg: TWMEraseBkgnd); begin SetBkMode( msg.DC, TRANSPARENT ); msg.result := 1; end;
Envoyé par lil_jam63
Le problème, c'est que cela ne rend pas le contrôle transparent mais efface la zone qu'il occupe y compris les contrôles positionnés en dessous.
J'ai bien essayé de comprendre comment fonctionnait la propriété Transparent de certains composants de la VCL, mais....
Qq a une solution ?
Salut, en fait j'ai essayé ce procédé, car j'ai un problème similaire.
En mode édition sous Delphi, ça efface effectivement toutes les images en dessous.
Par contre une fois compilé, sur mon programme cela fonctionne correctement.
(mon CustomControl est un cercle du coup, il était dans un carré et je ne voulais pas voir les coins)
j'ai des labels (indépendants) qui ce baladent dans ces "coins" (hors du cercle mais dans le carré contenant le cercle) et on les vois très bien après compilation.
Sais pas si j'ai été clair avec mes histoires de carré et coin mais en gros, ça fonctionne ici (Delphi 6)
Évidement je répond tardivement (extrêmement) pour les éventuels lecteurs.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager