Frm zones transparentes, auto du rendu visible des contrôles

Présentation
Une Form avec des zones "transparentes".
Téléchargement
0  0 
Téléchargé 27 fois Voir les 8 commentaires
Détails
Catégories : Contrôles
Avatar de Francis MILLET
Rédacteur / Modérateur
Voir tous les téléchargements de l'auteur
Licence : Non renseignée
Date de mise en ligne : 14 novembre 2010




Avatar de ucfoutu ucfoutu - Inactif https://www.developpez.com
le 19/09/2007 à 21:07
Bonjour,

Un petit ennui : on peut cliquer au travers de la Form, y compris là où elle a sa place "normale", ce qui peut être gênant.
Je sais, je sais...
Bon. Une autre méthode existe pour avoir une Form "transparente" mais réellement présente, tout en conservant parfaitement opaques les contrôles qu'elle contient.
Il suffit pour celà des fonctions SetWindowLong et SetWindowPos de la librairie User32. C'est toutefois un peu "trompeur" car il s'agit en réalité d'une fausse transparence et que certaines choses doivent alors être répétées en cas de déplacement ou modification des dimensions de la fenêtre (mais cela va très vite.
Idem en ce qui concerne le traitement de Frames transparents mais gardant leurs contrôles opaques
Mais tout dépend bien évidemment du résultat que l'on veut atteindre

Bonne continuation ...
Avatar de ProgElecT ProgElecT - Rédacteur/Modérateur https://www.developpez.com
le 19/09/2007 à 22:59
Citation Envoyé par ucfoutu
Un petit ennui : on peut cliquer au travers de la Form, y compris là où elle a sa place "normale", ce qui peut être gênant.
Personnellement, c'est ce que je voulais, il y a très souvent plusieurs façons d’y parvenir, avec des variations suivant la finalité voulue.
En général, pour le programme fini, je lance le projet, puis je fais une image de la fenêtre définitive sur fond uni (un bloc note plein écran), je remplace l’image de construction avec, supprime la routine de dessin des boites pour les contrôles qui étaient dans des zones transparents et je crée l’exécutable.
Avatar de LeForestier LeForestier - Inactif https://www.developpez.com
le 20/09/2007 à 16:32
Tant pis si deuxième édition, j'ai eu plantage de IE
Bravo ProgElect, source très instructive et impecable. et en plus direct sur Vista
Comme d'habitude je mémorise ta source sur mon PC
ucfoutu, tu changerras jamais ? la critique est aisée mais la construction est beaucoups plus difficile
pourquoi qu'avec toutes tes "connaissances" tu ne nous aident pas a évolués ?
Cordialement
Edit: ont peu cliquer sur la partie "visible" où ont veut et elle réagit parfaitement. Ce qui est, je crois, le but premier.
Avatar de ucfoutu ucfoutu - Inactif https://www.developpez.com
le 20/09/2007 à 16:46
Bonjour,

Je crois qu'il y a là un sacré malentendu !
Je ne critiquerais pas (et pour cause ...) les éléments fondamentaux du code montré par Progelect .

Je voulais simplement appeler l'attention dur certains aspects (appelons-les "colatéraux" de certaines transparences. Les transparences sont, en gros, réparties en deux catégories :
- celles où un click "sur" la transparence clique "à travers"
- celles où un click sur la transparence reste un click dans la fenêtre de l'application.

Voilà tout.

Quant à la 2ème possibilité, j'ai signalé les deux fonctions à utiliser, non ?

Amitiés.
Avatar de LeForestier LeForestier - Inactif https://www.developpez.com
le 20/09/2007 à 18:15
Je ne reprendrais pas ta réponse mais ce que je constate c'est que ta mauvaise fois est toujours intacte, le fais de cliquer "juste à coter" de la forme visible active l'appli qui est juste là dessous.
et pour ProgElect... enlève-moi ce combo qui est Ch...t
Contrairement à mon habitude, J'ai pas encore étudier la source...(excuse-moi)
A+
EDIT:
- celles où un click "sur" la transparence clique "à travers"
- celles où un click sur la transparence reste un click dans la fenêtre de l'application.
Tu te mélange les pinceaux....
Avatar de ucfoutu ucfoutu - Inactif https://www.developpez.com
le 20/09/2007 à 18:26
Bon...

Je fais vite une petite démonstration de ce que je veux dire par click sur une Form transparente mais dont les contrôles restent opaques, tout en faisant que le click ne se fasse pas sur ce qui est "derrière".... mais bien sur la Form ...
et reviens...

A + donc...
Avatar de ucfoutu ucfoutu - Inactif https://www.developpez.com
le 20/09/2007 à 18:46
Voilà donc un tout petit zip mettant en exergue le principe dont il s'agit....

J'y ai mis un timer pour passer la form d'un état "transparent" en état opaque et vice-versa
Le bouton de commande n'est là que pour montrer que les contrôles contenus dans la forme restent eux totalement opaques (j'aurais pu choisir n'importe quoi d'autre).

Lancer... cliquer sur la forme dans l'un ou l'autre de ses deux états et voir si oui on non on clique bien sur la form et pas au travers (sur ce qu'il y aurait derrière).

J'ai un peu bâclé, mais celà me parait quand même suffisant.
Avatar de ProgElecT ProgElecT - Rédacteur/Modérateur https://www.developpez.com
le 20/09/2007 à 19:25
Citation Envoyé par LeForestier
pour ProgElect... enlève-moi ce combo qui est Ch...t
Mais il est la pour être déplacé, pour la démonstration de l'utilité du code, par le programmeur dans l'éditeur VB, dans une zone de couleurs déclarée a rendre transparente,
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
'le/les controles dont le Tag = "OUI"
'doit être visible même si en dehors de l'image de base
For Each CntrL In Me.Controls
 If CntrL.Tag = "OUI" Then
  'redimensionne la Form eventuellement si ce controle dépace l'image de base
  'calcul du bas et de l'extrémité droite du controle
  If Hauteur < CntrL.Top + CntrL.Height Then Hauteur = CntrL.Top + CntrL.Height
  If Largeur < CntrL.Left + CntrL.Width Then Largeur = CntrL.Left + CntrL.Width
  'verification si la Form est suffisament grande, sinon agrandit
  If Hauteur > Me.ScaleHeight Then Me.Height = ScaleY(Hauteur, 3, 1) + 15 '? 15 pas trouvé pourquoi ?
  If Largeur > Me.ScaleWidth Then Me.Width = ScaleX(Largeur, 3, 1)
  DoEvents
  'creation du masque d'opacité
  Me.Line (CntrL.Left, CntrL.Top)- _
        (CntrL.Left + CntrL.Width - 1, CntrL.Top + CntrL.Height - 1), 0, BF
 End If
Next
seule partie du code légèrement nouvelle et que je pensai utiles de partager.
Si (LeForestier) tu y met un CommandButton, un ListBox, un PictureBox ..... sa ne me gène pas
Pour le reste, tout programmeur professionnel ou amateur (plus ou moins éclairé ) est une bête susceptible
Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.