Chargement d'un formulaire VB 6

Melissa -  
 Melissa -
Bonjour,

Bonjour et merci d'avance de votre aide.
J'ai 2 questions différentes sur Visual Basic

1- Comment faire pour afficher en rouge, dans Label1, un taux de pourcentage d'une valeur inférieure à 50, c'est-à-dire, 50%, et en vert si la valeur de ce taux de pourcentage est supérieure ou égale à 50, c'est-à-dire, 50% ?
2- J'ai crée 3 formulaires. Un formulaire Pssword avec deux zones de texte et deux boutons de commande (Valider et Annuler), un autre formulaire Menu principal et un troisième qui s'affiche, après l'identification de l'utilisateur dans la fenêtre Password, pour indiquer, avec une barre de progression (Shape), le chargement de la fenêtre Menu principal.
Une fois le chargement effectué, donc la connexion de l'utilisateur dans l'application, celui-ci peut décider de changer de session en cliquant sur le lien (Label) "Fermer la session" dans le Menu principal. La fenêtre Password apparaît pour mettre à l'utilisateur de renseigner des nouveaux identifiants.
Le problème c'est que si on valide ces nouveaux identifiants, il y a erreur à propos du fenêtre (F_splash) qui indique le chargement vers le Menu principal du fait que ce dernier (le Menu principal) est en mode Modal. J'ai besoin d'une solution à ce problème tout en sachant que je souhaite garder ces 3 formulaires.
P.J : Le code de ces 3 formulaires.
Formulaire Mot de passe (F_password)
Private Sub Cmd_Annuler_Click()
Unload Me
End
End Sub
Private Sub Cmd_Valider_Click()
Dim Sql As String
Static i As Byte
If Trim(Text_Nom_Utilisateur) = "" Then
MsgBox "Veuillez saisir votre nom d'utilisateur", vbInformation + vbOKOnly, "Identification de l'utilisateur"
Text_Mot_de_passe = ""
Text_Nom_Utilisateur.SetFocus
ElseIf Text_Mot_de_passe = "" Then
MsgBox "Veuillez saisir votre mot de passe", vbInformation + vbOKOnly, "Identification de l'utilisateur"
Text_Mot_de_passe.SetFocus
Else
Call connect
Sql = "Select Utilisateur.* From Utilisateur where Login='" & Text_Nom_Utilisateur & "' and Password ='" & Text_Mot_de_passe & "'"
RsUtilisateur.Open Sql, MaConnection, adOpenStatic, adLockOptimistic
If RsUtilisateur.RecordCount = 0 Then
Call Deconnect
i = i + 1
MsgBox "Nom d'utilisateur ou mot de passe invalide. Veuillez ressayer.", vbCritical + vbOKOnly, "Identification de l'utilisateur"
Text_Mot_de_passe = ""
Text_Nom_Utilisateur.SetFocus
Text_Nom_Utilisateur.SelStart = 0
Text_Nom_Utilisateur.SelLength = Len(Text_Nom_Utilisateur)
Else
Call Deconnect
F_splash.Show
F_menu.Label15.Caption = LCase$(Text_Nom_Utilisateur)
F_menu.Label13.Caption = "Connecté"
F_menu.Label13.ForeColor = vbGreen
Unload Me
End If
End If
If i = 3 Then End
End Sub
Formulaire Chargement (F_splash)
Private Sub Timer1_Timer()
If Shape2.Width >= 4855 Then
F_menu.Show
Unload Me
Exit Sub
Else
Shape2.Width = Shape2.Width + 90
End If
End Sub
Formulaire Menu Principal
Private Sub Label_Fermer_Session_Click()
If (MsgBox("Voulez-vous vraiment fermer cette session ?", vbYesNo + vbQuestion, "Fermeture de session") = vbYes) Then
Label15.Caption = "-----"
Label13.Caption = "Déconnecté"
Label13.ForeColor = vbRed
F_password.Show vbModal
End If
End Sub
Private Sub Label_Quitter_Application_Click()
If (MsgBox("Etes vous sûr de vouloir quitter l'application ?", vbYesNo + vbQuestion, "Quitter") = vbYes) Then
Unload Me
End
End If
End Sub
Merci de votre aide.


A voir également:

6 réponses

Yoda
 
Bonjour,

Pour la question 1, en admettant que le taux soit dans textbox1
Private Sub TextBox1_Change()
If Val(TextBox1.Text) > 50 Then
       Label1.ForeColor = vbGreen
Else
       Label1.ForeColor = vbRed
End If
End Sub


Pour la question 2, modifier la procédure Cmd_Valider_Click() comme ci-dessous
	Else 
		Call Deconnect 
		Unload Me 
		F_splash.Show 
		F_menu.Label15.Caption = LCase$(Text_Nom_Utilisateur) 
		F_menu.Label13.Caption = "Connecté" 
		F_menu.Label13.ForeColor = vbGreen 
	End If 
0
Melissa
 
Bonjour,
Je tiens tout d'abord à vous remercier de votre aide tout en soulignant que votre solution sur la seconde question ne fonctionne pas comme je l'aurai souhaité. Quand je modifie la procédure, comme vous l'avez suggéré, à l'exécution, quand on ferme la session pour ouvrir une autre, d'abord le bouton "Valider" du formulaire Mot de passe (F_password), ce bouton là ne s'affiche pas. Toutefois je peux valider par le bouton Entrée du clavier. Après le formulaire Menu_principal s'affiche normalement sauf qu'ici le nom de l'utilisateur ne s'affiche pas. "F_menu.Label15.Caption = LCase$(Text_Nom_Utilisateur)".
Et pour la première question, je vous remercie également pour votre réponse.
0
Yoda
 
Bonjour,

Essayez alors cette version:

 Else  
     Call Deconnect  
     Me.Hide 
     F_splash.Show  
     F_menu.Label15.Caption = LCase$(Text_Nom_Utilisateur)  
     F_menu.Label13.Caption = "Connecté"  
     F_menu.Label13.ForeColor = vbGreen 
  End If 

A+.
0
Melissa
 
Bonjour,
Encore une fois, je te remercie de votre disponibilité et de ton aide.
Je viens de voir votre nouvelle solution et je vais essayer avec. Mais j'ai essayé de suivre encore et toujours votre idée de modifier la procédure et j'ai fini par trouver la solution en modifiant la procédure
Cmd_Valider_Click()
comme se présente le code ci-dessous :

Else 
		Call Deconnect 
		F_menu.Label15.Caption = LCase$(Text_Nom_Utilisateur) 
		F_menu.Label13.Caption = "Connecté" 
		F_menu.Label13.ForeColor = vbGreen
                Unload Me 
		F_splash.Show  
	End If 


Maintenant tout fonctionne comme je le souhaite et c'est grâce à vous. Merci encore !
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Melissa
 
Bonjour Yoda,
En fait, je voulais vous demander une aide sur un sujet en Visual Basic 6. et voici le sujet :
Dans un formulaire VB, j'ai placé 3 contrôles image (Image1, Image2 et Image3), 3 labels (Label_Nom_J1, Label_Nom_J2 et Label_Nom_J3) et 2 boutons de commande (Cmd_Nom_J et Cmd_Image_J).
Maintenant, une fois qu'on est en mode exécution, je souhaite cliquer à chaque fois, d'abord, sur le bouton "Cmd_Nom_J" pour ajouter le nom du joueur et l'affecter dans le label. Ça devrait donc être du genre (Label_Nom_J1=Nom_Joueur1, Label_Nom_J2=Nom_Joueur2 et Label_Nom_J3=Nom_Joueur3).
Même principe pour les images : On clique sur le bouton "Cmd_Image_J" pour insérer une photo du joueur dans le formulaire, et ça devrait être du genre : (Image1=Photo_Joueur1, Image2=Photo_Joueur2 et Image3=Photo_Joueur3).
Ça me parait simple à faire si je dois considérer que pour chaque joueur il a un bouton pour ajouter son nom et un autre pour insérer sa photo. Or ce n'est pas ce que je veux, je trouve cette idée moins pratique surtout quand aurions à travailler sur plusieurs joueurs.
Voici ce que j'ai pu faire en code :
Ajout du nom du joueur :
Private Sub Cmd_Nom_J1_Click()
Dim Nom_J1 As String
Nom_J1 = InputBox ("Taper le nom du joueur", "Ajout du nom du joueur")
If Nom_J1 = "" Then Exit Sub
Else
Label_Nom_J1.Caption = Nom_J1
End If
End Sub

Private Sub Cmd_Nom_J2_Click()
Dim Nom_J2 As String
Nom_J2 = InputBox ("Taper le nom du joueur", "Ajout du nom du joueur")
If Nom_J2 = "" Then Exit Sub
Else
Label_Nom_J2.Caption = Nom_J2
End If
End Sub

Private Sub Cmd_Nom_J3_Click()
Dim Nom_J3 As String
Nom_J3 = InputBox ("Taper le nom du joueur", "Ajout du nom du joueur")
If Nom_J3 = "" Then Exit Sub
Else
Label_Nom_J3.Caption = Nom_J3
End If
End Sub


Insertion d'une image du Joueur :
Private Sub Cmd_Image_J1_Click()
CommonDialog1.ShowOpen
Image1.Picture = LoadPicture (CommonDialog1.FileName)
End Sub

Private Sub Cmd_Image_J2_Click()
CommonDialog1.ShowOpen
Image2.Picture = LoadPicture (CommonDialog1.FileName)
End Sub

Private Sub Cmd_Image_J3_Click()
CommonDialog1.ShowOpen
Image3.Picture = LoadPicture (CommonDialog1.FileName)
End Sub


N.B : J'ai inséré dans le formulaire l'objet ActivX CommonDialog pour le chargement de la boite de dialogue Ouvrir de Windows. Dans la propriété Filter de ce contrôle, CommonDialog1, j'ai spécifié les types d'images qu'on peut charger.
J'espère avoir été assez claire pour obtenir une réponse. Et merci d'avance !!!
0
Yoda
 
Bonjour,

Tu peux très bien grouper les deux étapes , demander le nom du joueur (InputBox) et en même temps demander à charger la photo correspondante:

Private Sub Cmd_Nom_J1_Click()
Dim Nom_J1 As String
Nom_J1 = InputBox("Taper le nom du joueur n° " & "1" & vbCrLf _
                                & "Ensuite charger sa photo", _
                                "Ajout du nom du joueur et sa photo")
If Nom_J1 = "" Then
  Exit Sub
Else
   Label_Nom_J1.Caption = Nom_J1

CommonDialog1.ShowOpen
Image1.Picture = LoadPicture (CommonDialog1.FileName)

End If
End Sub


Enfin pour encore plus rationaliser le code, tu peux faire une seule procédure qui est appelée par les boutons.

Private Sub Cmd_Nom_J1_Click()
   Charge_Joueur(1) 
End Sub

Private Sub Cmd_Nom_J2_Click()
   Charge_Joueur(2) 
End Sub

Private Sub Cmd_Nom_J3_Click()
   Charge_Joueur(3) 
End Sub

Private Sub Charge_Joueur ( n as integer)
Dim Nom_J As String
Nom_J = InputBox("Taper le nom du joueur n° " & n & vbCrLf _
                                & "Ensuite charger sa photo", _
                                "Ajout du nom du joueur et sa photo")
If Nom_J = "" Then
    Exit Sub
Else
   CommonDialog1.ShowOpen
End If
Select case n
   case 1
      Label_Nom_J1.Caption = Nom_J
      Image1.Picture = LoadPicture (CommonDialog1.FileName)
   case 2
      Label_Nom_J2.Caption = Nom_J
      Image2.Picture = LoadPicture (CommonDialog1.FileName)
   case 3
      Label_Nom_J3.Caption = Nom_J
      Image2.Picture = LoadPicture (CommonDialog1.FileName)
   end select
End sub


J'espère que ça répond à to question.

A+
0
Melissa
 
Bonjour Yoda,
Votre solution me va très bien et je vous en remercie infiniment. J'ai pu limiter à 3 (au lieu de 6) le nombre des boutons de commande dans le formulaire. Mais est-ce qu'on ne peut pas faire mieux avec un seul bouton qui gère tout pour les joueurs (l'ajout d'un nom et d'une photo) ?
0