TPANEL TRANSPARENT, MULTIFORME, ETC

cs_lucien Messages postés 82 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 juin 2007 - 2 mars 2007 à 09:32
Philips10 Messages postés 2 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 30 octobre 2010 - 30 oct. 2010 à 15:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/41690-tpanel-transparent-multiforme-etc

Philips10 Messages postés 2 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 30 octobre 2010
30 oct. 2010 à 15:07
Hi

I would like to use your truely fantastic GMPanel.

I need to draw an arrrow on it and of cource, this arrow has to be seen.
I came up with this. With GMPanel1.Update or GMPanel1.RePaint or GMPanel1.invalidate
the arrow is not show.

How to...?

Thanks

-----------------

procedure TForm1.BitBtn1Click(Sender: TObject);
var x,y,c: byte;
const startx = 5;
starty = 3;
begin
x := 0;
for c := 15 downto 9 do begin
Image1.Canvas.MoveTo(startx + x, starty + x);
Image1.Canvas.LineTo(startx + c, starty + x);
inc(x);
end;

x := 0;
for c := 15 downto 9 do begin
GMPanel1.Picture.Picture.Canvas.MoveTo(startx + x, starty + x);
GMPanel1.Picture.Picture.Canvas.LineTo(startx + c, starty + x);
inc(x);
end;

GMPanel1.Invalidate;
end;
Philips10 Messages postés 2 Date d'inscription mardi 7 janvier 2003 Statut Membre Dernière intervention 30 octobre 2010
19 juil. 2007 à 10:30
Comment j'obtiens une régénération, après téléchargement ou mise d'une image dans l'image au fond du TGMPanel GMPanel1.repaint ne fonctionnera pas J'ai un TPanel. Sur ceci j'ai mis un TImage en outre un TGMPanel que j'ai mis dessus le TPanel

bsSkinPanel1.PaintTo(image_work.Canvas, 0, 0) ;
GMPanel_Work.RePaint ;

En outre : Je ne peux pas changer le transparent.percentage au temps d'exécution.

Pouvez-vous m'aider ?
cs_Korda Messages postés 23 Date d'inscription mardi 25 mai 2004 Statut Membre Dernière intervention 9 avril 2016
22 juin 2007 à 13:07
hourah c'est ce que je cherche depuis longtemp Merci+++++
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
2 juin 2007 à 14:45
florenth,

est ce que tu pourrais me donner ta version corrigée, si c'est possible, de ce script car si cela résout le problème, cela m'aiderai beaucoup .
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
22 mai 2007 à 15:55
ok florenth je prends note et je teste des que j'ai le temps !! malgré que je sois encore débutant, lol !

En passant, est ce que vous pouvez me rapeller la méthode pour ajouter le GMPanel.pas en nouveau composant delphi sous forme d'onglet car j'avais réussi à trouver par hasard et depuis j'ai formater mon pc et je ne retrouve plus comment j'ai fait pour le rajouter en tant que nouveau composant delphi !!
Oui en fait j'avais déjà constaté le problème mais je me souviens plus comment je l'avais résolu (en plus, il me semblait avoir posté un commentaire mais j'ai du cliquer sur la croixs rouge sans valider ...)

En fait, il faut envoyer un message CMNEEDBACK au composant qui va appeler GetBackground.
D'ailleurs, une des fuites de mémoires provient de cette méthode: il y a un "ABitmap.Free" en commentaire qui ne devrait pas l'être.

Et puis j'en profite pour signaler un bug du site: sur l'unité GMPanels.pas, il y a tellement de lignes que tout n'est pas affiché (il y a un grand blanc en dessous du code). De même, il n'y a pas ici de coloration syntaxique...

++
Flo
Utilisateur anonyme
21 mai 2007 à 18:51
@Florenth:
Non ça ne fonctionne pas (déjà testé) :D

le problème vient très certainement de la conception ...
mais j'ai pas le temps en ce moment de chercher d'ou vient le problème.
@gabs: c'est normal: il faut invalider les panels pour qu'ils se rafraichissent !
Logiquement, c'est en faisant GMPanel.Invalidate().

Mais il me semble qu'il existe un message windows à intercepter par le composant transparent pour justement éviter ce problème mais je n'ai plus son nom sous la main.

++
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
21 mai 2007 à 10:10
salut gerard1,

Désolé de ne pas avoir répondu plus tôt car je n' était pas dispo ces derniers temps.

Le problème est que je ne charge pas d image dans le panel.
Je mets une image de fond de Form avec un Timage en AlClient et les GMPanel sont en transparence donc quand je change l image de fond de la TImage les GMPanel conserve la transparence fig"é sur l 'image precedent.
cs_gerard1 Messages postés 2 Date d'inscription lundi 25 juillet 2005 Statut Membre Dernière intervention 9 mai 2007
9 mai 2007 à 05:42
Salut Gabs77.

Comment tu t'y prends pour changer l'image ?
Comme ceci ca marche bien :

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
GMPanel1.Picture.Picture.LoadFromFile(OpenPictureDialog1.FileName);
end;
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
6 mai 2007 à 10:36
Salut,
En fait, c'est bon j'ai trouvé en cherchant un peu !!

En revanche, un problème qui est un peu dommage c'est quand on change d'image de fond durant l'application, la rafraichissement des panels transparents ne le rends plus visible ou inaccessible !!
gabs77 Messages postés 379 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 8 octobre 2008
6 mai 2007 à 08:54
Salut,
Ta source m'interesse mais seulement je ne m'y connais pas encore très bien en delphi. Est ce que tu peux m'expliquer comment faire pour rajouter GMPanel.pas à delphi de tel sorte à ce que je puisse l'utiliser.

Merci d'avance !!
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
8 mars 2007 à 11:28
Salut,

Il est génial ton composant : déjà c'est bleuffant en terme d'effet mais en plus c'est vraiment bien codé (malgré les ptites remarques justifiées de Cirec).

9/10

@+
cs_gerard1 Messages postés 2 Date d'inscription lundi 25 juillet 2005 Statut Membre Dernière intervention 9 mai 2007
4 mars 2007 à 19:37
Merci Cirec pour tes commentaires.
Je n'ai effectivement jamais travaillé avec Turbo Delphi.
J'ai développé ce composant a temps perdu, et il est vrai que je n'ai pas toujours eu l'occasion d'y mettre les heures voulues. Je pouvais parfois passer plusieurs semaines avant de pourvoir y revenir. Je ne dit pas cela pour me trouver des excuses ;) mais bon...
Je suis conscient que plusieurs améliorations peuvent y etre apportées. Si il y a des volontaires, ca serait apprécié...
Utilisateur anonyme
3 mars 2007 à 05:34
Bon alors, merci d'avoir exhausser nos voeux ...

Pas totalement ... mais tu as fait un grand pas ...
j'ai fait le reste (les composants ne sont pas dynamique) tu ne le sais peut être pas
mais on peut plus intaller de composant dans les nouvelles version (Turbo Delphi)

Mais par contre Turbo Delphi ma permis de voir ceci :

---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:



21 - 28 bytes: TBrush x 2, TPen x 2, TGMPanelPicture x 1, TTransparent x 2

29 - 36 bytes: TFont x 2, Unknown x 2

37 - 44 bytes: TGradient x 1

53 - 60 bytes: TBitmap x 3

61 - 68 bytes: Unknown x 1

93 - 100 bytes: TBitmapCanvas x 2

109 - 116 bytes: TBitmapImage x 3


---------------------------
OK
---------------------------

C'est donc clair et sans appel il y a des fuites de mémoires ;(

Je te rassure c'est pas très dur à résoudre ...

j'ai rajouté des Try Finally des Free à tous les objets qui n'étaient pas libérés
et puis dans les Destructeurs veille à libérer les objets que tu as crées en premier
et ensuite seulement faire appel à Inherited Destroy; !!!!!

Sinon ça commençait très bien mais (le prend pas mal) j'ai l'impression, que la fin a été bâclé
comme si tu étais pressé de poster la source ... c'est dommage

Le source pourrait nettement être optimisé, il y a du code inutile du code mort ...

et vu le niveau je pense que c'est pas un problème pour toi de découvrir ce qui ne va pas

si toutes fois ça n'allait pas je te filerais un coup pouce

Mais bon quoi qu'il en soit ... c'est déjà du très bon boulot ... Félicitations

@+
Cirec
cs_lucien Messages postés 82 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 juin 2007
2 mars 2007 à 17:02
Alors je fais amende honorable ;)
et je vais jeter un coup d'oeil sur ce compo...:))

Lucien
Utilisateur anonyme
2 mars 2007 à 15:29
Je suis du même avis que Florenth :

à savoir qu'un petit exemple en dynamique (ce qui éviterait à ceux qui voudraient tester ta source d'installer le composant)serait de bon aloi.

Le petit plus serait d'y ajouter une capture de l'exemple ce qui donnerait certainement envie, à un plus grand nombre de membre, de jeter un oeil sur ton code qui à l'air très intéressant et bien construit

@+
Cirec
Wooooaaahh ! Enorme ! Le code est très bien fait, il manque juste un exemple pour illustrer les fonctionnalités.

@ Lucien: on peut très bien noter sans commenter. Rien n'engage à rien, surtout qu'ici, la note est très bonne, pas comme un 1/10 qui fait raller...
cs_lucien Messages postés 82 Date d'inscription vendredi 27 décembre 2002 Statut Membre Dernière intervention 3 juin 2007
2 mars 2007 à 09:32
J'ai du mal à comprendre comment il peut y avoir une note sans que personne n'ai fait de commentaire ?
Or j'écris celui-ci en premier, à réception, ce matin :)

Lucien
Rejoignez-nous