Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > VBA Access
VBA Access Le forum pour les questions relatives au code VBA sous Access, et à son environnement de développement VBE.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/11/2011, 15h56   #1
Nouveau Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 91
Points : 36
Points : 36
Envoyer un message via MSN à lakhdar16
Par défaut transparence sur perte focus

Bonjour,

je voulais appliquer la transparence sur mon formulaire lors de perte focus mais ca marche pas ??? mais si je fais le même code sur ouverture par exemple, ça marche, pourriez-vous m'aider s'il vous plait?

déclarations:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_ALPHA = &H2
Private Const GWL_EXSTYLE = &HFFEC
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal lngWinIdx As Long, _
ByVal dwNewLong As Long) As Long
 
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal lngWinIdx As Long) As Long
 
Private Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hwnd As Long, _
ByVal crKey As Integer, _
ByVal bAlpha As Integer, _
ByVal dwFlags As Long) As Long
sur perte Focus:

Code :
1
2
3
4
5
6
Private Sub Form_LostFocus()
Dim lAlpha As Long
lAlpha = 255 * (20 / 100)
    SetWindowLong Me.hwnd, GWL_EXSTYLE, GetWindowLong(Me.hwnd, GWL_EXSTYLE) Or WS_EX_LAYERED
    SetLayeredWindowAttributes Me.hwnd, 0, lAlpha, LWA_ALPHA
End Sub

j'ajoute que le formulaire est en fenêtre indépendante.

merci à vous.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 09h43   #2
Membre confirmé
 
Inscription : juillet 2006
Messages : 346
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 346
Points : 288
Points : 288
Bonjour,

Quel est le but recherché ? pourquoi voulez-vous mettre le formulaire en transparence ? Est-ce pour empecher l'utilisateur de quitter la fenetre tant que la saisie n'est pas validée ? autre chose ?
Access Newbie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 11h10   #3
Nouveau Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 91
Points : 36
Points : 36
Envoyer un message via MSN à lakhdar16
Bonjour,

le formulaire principale fait appel à d'autres formulaires indépendants, le but c'est plutôt esthétique , je veux, quand j'appelle un formulaire, le formulaire principal devient transparent et inaccessible (perte focus).

merci.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 11h42   #4
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 223
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 223
Points : 9 936
Points : 9 936
Envoyer un message via Skype™ à Domi2
Tu as vérifié que l'événement sur Perte focus se produit ?

Simplement en essayant d'afficher un message.
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 11h52   #5
Nouveau Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 91
Points : 36
Points : 36
Envoyer un message via MSN à lakhdar16
Bonjour,

si j'ai vérifié, et ca marche pas, mais si je fais le même code sur ouverture par exemple il marche?? la j'ai pas compris.

merci.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 12h01   #6
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 223
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 223
Points : 9 936
Points : 9 936
Envoyer un message via Skype™ à Domi2
Je ne suis pas sûr d'avoir bien compris.

Tu as un formulaire ouvert et tu en ouvres un deuxième, en voulant que le premier devienne transparent, c'est ça ?
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 12h05   #7
Nouveau Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 91
Points : 36
Points : 36
Envoyer un message via MSN à lakhdar16
Bonjour,

oui c'est exactement ça, et sur réception focus il redeviens normal

Code :
lAlpha = 255 * (100/ 100)
merci.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 12h24   #8
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 223
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 223
Points : 9 936
Points : 9 936
Envoyer un message via Skype™ à Domi2
Je ne suis toujours pas convaincu que l'événement Sur perte focus se produise (et je ne peux pas tester).

D'autre part, Me.hwnd est le descripteur de la fenêtre active, et ton premier formulaire ne l'est probablement plus.

Il faudrait peut-être essayer de récupérer la valeur dans une variable globale et essayer de la passer comme ça aux fonctions.

Ce n'est qu'une idée.
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 13h14   #9
Nouveau Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 91
Points : 36
Points : 36
Envoyer un message via MSN à lakhdar16
Excusez moi, pourriez-vous être plus clair ? là, je suis perdu.

Merci.
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2011, 13h31   #10
Rédacteur/Modérateur
 
Avatar de Domi2
 
Homme
Inscription : juin 2006
Messages : 6 223
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 52
Localisation : Suisse

Informations professionnelles :
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juin 2006
Messages : 6 223
Points : 9 936
Points : 9 936
Envoyer un message via Skype™ à Domi2
Ayant retrouvé un poste de travail avec Access, j'ai pu faire quelques tests.

Tu n'as certainement pas bien vérifié tes événements, j'ai tout essayé, je n'arrive pas à faire survenir l'événement Sur perte focus du premier formulaire.

J'ai donc fait comme ceci :

Propriété Fen indépendante des 2 formulaires = Oui

Dans l'entête d'un module standard et non celui d'un formulaire, on déclare les 3 constantes et on met les 3 fonctions, le tout comme Public et non Private.

On déclare également une variable publique supplémentaire, lngDescripteur.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
Option Compare Database
Option Explicit
 
Public Const WS_EX_LAYERED = &H80000
Public Const LWA_ALPHA = &H2
Public Const GWL_EXSTYLE = &HFFEC
 
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hwnd As Long, _
ByVal lngWinIdx As Long, _
ByVal dwNewLong As Long) As Long
 
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hwnd As Long, _
ByVal lngWinIdx As Long) As Long
 
Public Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hwnd As Long, _
ByVal crKey As Integer, _
ByVal bAlpha As Integer, _
ByVal dwFlags As Long) As Long
 
Public lngDescripteur As Long
Dans l'événement Sur chargement du formulaire 1, on récupère le descripteur de sa fenêtre et on l'affecte à la variable lngDescripteur.

Code :
1
2
3
4
5
Private Sub Form_Load()
 
    lngDescripteur = Me.hwnd
 
End Sub
Dans l'événement Sur ouverture du formulaire 2, on fait appel aux fonctions en passant non pas le descripteur de la fenêtre active, mais celui du formulaire 1.

Code :
1
2
3
4
5
6
7
8
9
Private Sub Form_Open(Cancel As Integer)
 
    Dim lAlpha As Long
 
    lAlpha = 255 * (50 / 100)
    SetWindowLong lngDescripteur, GWL_EXSTYLE, GetWindowLong(lngDescripteur, GWL_EXSTYLE) Or WS_EX_LAYERED
    SetLayeredWindowAttributes lngDescripteur, 0, lAlpha, LWA_ALPHA
 
End Sub
Et la même chose dans l'événement Sur fermeture du formulaire 2, en supprimant la transparence.

Code :
1
2
3
4
5
6
7
8
9
Private Sub Form_Close()
 
    Dim lAlpha As Long
 
    lAlpha = 255 * (100 / 100)
    SetWindowLong lngDescripteur, GWL_EXSTYLE, GetWindowLong(lngDescripteur, GWL_EXSTYLE) Or WS_EX_LAYERED
    SetLayeredWindowAttributes lngDescripteur, 0, lAlpha, LWA_ALPHA
 
End Sub
Très bel effet !
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor)

Ici, on ne perd pas de temps ! On en passe...


Access : créer des codes-barres 128 en VBA
Access : les commandes intégrées des menus

Ce message (ou un autre) vous a aidé ? Votez pour lui avec
Domi2 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/11/2011, 14h34   #11
Nouveau Membre du Club
 
Homme
Channel Support Coordinator
Inscription : avril 2011
Messages : 91
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 35
Localisation : Algérie

Informations professionnelles :
Activité : Channel Support Coordinator
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : avril 2011
Messages : 91
Points : 36
Points : 36
Envoyer un message via MSN à lakhdar16
waaaaaaaawwwwwwwwww c'est EXCELLENTTTTTTT

ça marche nickel et chui trés heureux , un grand merci pour vous Domi2

Je vais mettre Résolu afin que d'autres personnes peuvent l'utiliser.

mes respects.

merci encore
lakhdar16 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h37.


 
 
 
 
Partenaires

Hébergement Web