FAQ Visual Basic Consultez toutes les FAQ

Nombre d'auteurs : 50, nombre de questions : 300, dernière mise à jour : 2 septembre 2018 

 
OuvrirSommaireInterfaceDivers

Si au lancement de votre application, une fenêtre ne s'affiche pas instantanément, cela donnera une impression de lourdeur et de lenteur d'exécution à l'utilisateur. Le chargement de la fenêtre principale d'un programme pouvant être relativement long, il est courant d'afficher un écran d'accueil, qui apparaît immédiatement, et qui reste visible pendant le chargement du reste du programme.

Nous allons créer une procédure Main qui sera chargée :

  • d'afficher l'écran d'accueil
  • d'afficher la fenêtre principale
  • de fermer l'écran d'accueil après un délai à spécifier

Le délai sert à laisser l'écran d'accueil visible au moins quelques secondes, même dans le cas où l'ouverture de la fenêtre principale serait quasi instantanée.

Pour créer l'écran d'accueil, ajoutez une form au projet et nommez-la frmSplash. Enlevez sa barre de titre en donnant la valeur False à la propriété ControlBox et en ne mettant aucun texte dans la propriété Caption. Vous pouvez aussi, si vous le souhaitez, enlever la bordure de la fenêtre en donnant la valeur 0 à la propriété BorderStyle. Donnez la valeur 2 à la propriété StartUpPosition. Posez ensuite un timer et nommez-le "tmr". Puis collez ce code source dans le module de la feuille :

vb
Sélectionnez

Dim sec As Long
Dim delai As Long
 
Private Sub Form_Load()
 
    tmr.Enabled = False
    tmr.Interval = 1000
    sec = 0
    AuSommet Me.hwnd
 
End Sub
 
Public Sub CloseAfter(ByVal attente As Long)
 
    tmr.Enabled = True
    delai = attente
 
End Sub
 
Private Sub tmr_Timer()
 
    sec = sec + 1
    Me.Print sec
    If sec >= delai Then Unload Me
 
End Sub]

Dans la procédure Form_Load, l'appel à la fonction AuSommet permet de spécifier que cette form doit toujours se trouver au premier plan. Ainsi elle ne sera pas cachée par la fenêtre principale. Ajoutez une autre form au projet et nommez-la frmMain. Placez enfin ce code dans un module standard :

vb
Sélectionnez

Private Const SWP_NOMOVE = 2
Private Const SWP_NOSIZE = 1
Private Const FLAGS = SWP_NOMOVE Or SWP_NOSIZE
Private Const HWND_TOPMOST = -1
 
Private Declare Function SetWindowPos Lib "USER32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _
                                                    ByVal x As Long, ByVal y As Long, ByVal cx As Long, _
                                                    ByVal cy As Long, ByVal wFlags As Long) As Long
 
Public Function AuSommet(hwnd As Long) As Long
 
    AuSommet = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, FLAGS)
 
End Function
 
Sub Main()
 
    frmSplash.Show
    DoEvents
    frmMain.Show
    'fermeture au bout de 2 secondes
    frmSplash.CloseAfter 2
 
End Sub
Créé le 28 juin 2004  par Romain Puyfoulhoux, Alexandre Lokchine

Lien : Projet VB à télécharger

Non. Vous devrez donc programmer vos propres boîtes de message avec une form qui aura la valeur fixedSingle à la propriété BorderStyle pour qu'elle ne soit pas redimensionnable, et la valeur CenterScreen pour StartUpPosition.

Créé le 29 juillet 2002  par Romain Puyfoulhoux

Voici deux solutions : la faire vous même avec un PictureBox, ou utiliser le contrôle ProgressBar contenu dans le composant Microsoft Windows Common Controls 6.0. Voyons un exemple illustrant la première méthode; posez un PictureBox et un timer sur une form, et placez ce code dans le module de la form :

vb
Sélectionnez

Dim niveau as long, max as long
 
Private Sub Form_Load()
 
max = 100    'valeur maximale du niveau
niveau = 0   'valeur initiale
Timer1.Interval = 200
Picture1.Width = 5000
Picture1.Height = 280
 
End Sub 
 
Private Sub Timer1_Timer()
 
niveau = niveau + 1
If niveau = max Then Timer1.Enabled = False
Picture1.Line (0, 0)-(niveau * Picture1.ScaleWidth / max, Picture1.ScaleHeight), vbBlue, BF 
 
End Sub

Et maintenant voici l'équivalent avec le contrôle ProgressBar. Posez sur une form un timer et un contrôle ProgressBar, et placez ce code dans le module de la form :

vb
Sélectionnez

Private Sub Form_Load()
 
ProgressBar1.min = 0
ProgressBar1.max = 100
ProgressBar1.Value = 0
Timer1.Interval = 200
 
End Sub
 
Private Sub Timer1_Timer()
 
ProgressBar1.Value = ProgressBar1.Value + 1
If ProgressBar1.Value >= ProgressBar1.max Then Timer1.Enabled = False
 
End Sub
Créé le 29 juillet 2002  par Romain Puyfoulhoux

Exemple pour un label nommé "lblDateImp" qui est dans la section "sctEntete" :

vb
Sélectionnez

Datareport1.Sections("sctEntete").controls("lblDateImp").caption = "Imprimé le " & date
Créé le 6 janvier 2003  par Romain Puyfoulhoux

Si vous n'avez pas installé le Service Pack 4 ou une version ultérieure pour Microsoft Visual Studio 6, le DataReport utilise la configuration de l'imprimante par défaut pour choisir entre le mode portrait et le mode paysage. Les Service Packs 4 et supérieurs contiennent une mise à jour de l'objet DataReport, qui possède une nouvelle propriété appelée Orientation. Le code suivant utilise cette propriété afin d'afficher un DataReport en mode paysage :

vb
Sélectionnez

DataReport1.Orientation = rptOrientLandscape
DataReport1.Show
Créé le 6 janvier 2003  par Romain Puyfoulhoux

Placez sur une form une frame nommée Frame1. Sélectionnez-la, et placez dans cette frame une autre frame, nommée Frame2.
Frame1 doit être le conteneur de Frame2 et la hauteur de Frame2 doit être supérieure à celle de Frame1. Mettez la propriété Top de Frame2 à 0. Puis placez les contrôles qui devront défiler dans Frame2. Enfin ajoutez ce code dans le module de la form :

vb
Sélectionnez

Private Sub Form_Load()
 
VScroll1.Min = 0
VScroll1.Max = Frame2.Height - Frame1.Height
 
End Sub
 
Private Sub VScroll1_Change()
 
Frame2.Top = -VScroll1.Value
 
End Sub
 
Private Sub VScroll1_Scroll()
 
VScroll1_Change
 
End Sub

Vous pouvez aussi utiliser des PictureBox, mais les frames consomment moins de ressources.

Créé le 6 janvier 2003  par Romain Puyfoulhoux

L'éditeur de menus de Visual Basic ne permet pas d'ajouter une image pour un menu. Voici une façon de le faire.

Copiez ces déclarations dans un module standard :

vb
Sélectionnez

Public Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long 
Public Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long 
Public Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, _
                                                         ByVal nPosition As Long, _
                                                         ByVal wFlags As Long, _
                                                         ByVal hBitmapUnchecked As Long, _
                                                         ByVal hBitmapChecked As Long) As Long 
Public Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long 
Public Const MF_BYPOSITION = &H400&

Vos images seront de préférence des gifs transparentes. Vous pouvez les stocker par exemple dans un contrôle ImageList. Pour cela, ajoutez le composant « Microsoft Windows Common Controls 6.0 » à votre projet. Déposez un contrôle ImageList sur votre form. Faites un clic droit sur le contrôle ImageList et cliquez sur le menu Propriétés. La fenêtre qui s'est ouverte vous permet d'insérer vos images.

Le code qui ajoute les images aux menus est à placer dans la procédure Form_Load() de la form. L'exemple ci-dessous traite les deux premiers menus d'une form, qui sont typiquement les menus Fichier et Edition.

vb
Sélectionnez

Private Sub Form_Load() 
 
Dim hMenu As Long, hSousMenu As Long, menuId As Long 
 
hMenu = GetMenu(Me.hwnd) 
 
hSousMenu = GetSubMenu(hMenu, 0)    'handle du menu Fichier
SetMenuItemBitmaps hSousMenu, 0, MF_BYPOSITION, ImageList1.ListImages(1).Picture, 0   'ouvrir
SetMenuItemBitmaps hSousMenu, 1, MF_BYPOSITION, ImageList1.ListImages(2).Picture, 0   'enregistrer
SetMenuItemBitmaps hSousMenu, 2, MF_BYPOSITION, ImageList1.ListImages(3).Picture, 0   'imprimer
 
hSousMenu = GetSubMenu(hMenu, 1)    'handle du menu Edition
SetMenuItemBitmaps hSousMenu, 0, MF_BYPOSITION, ImageList1.ListImages(4).Picture, 0   'annuler
SetMenuItemBitmaps hSousMenu, 1, MF_BYPOSITION, ImageList1.ListImages(5).Picture, 0   'couper
SetMenuItemBitmaps hSousMenu, 2, MF_BYPOSITION, ImageList1.ListImages(6).Picture, 0   'copier
SetMenuItemBitmaps hSousMenu, 3, MF_BYPOSITION, ImageList1.ListImages(7).Picture, 0   'coller
 
End Sub

Cette méthode a malheureusement un inconvénient : les couleurs sont mal respectées, et vos images auront un aspect anormalement foncé. Une autre méthode, beaucoup plus compliquée et réservée aux programmeurs avancés, est utilisée dans ce projet.

Créé le 4 septembre 2003  par Romain Puyfoulhoux

Il ne s'agit pas ici de sous-menus à un deuxième niveau, comme ceux du menu "Zoom" de l'éditeur de Visual Basic, mais bien de mettre les sous-menus sur plusieurs colonnes.

Dans le module d'une form, copiez d'abord ces déclarations dans la partie Générale :

vb
Sélectionnez

Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long 
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long 
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long 
Private Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" _
                                       (ByVal hMenu As Long, ByVal wIDItem As Long, _
                                        ByVal lpString As String, ByVal nMaxCount As Long, _
                                        ByVal wFlag As Long) As Long 
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long 
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" _
                                    (ByVal hMenu As Long, ByVal nPosition As Long, _
                                     ByVal wFlags As Long, ByVal wIDNewItem As Long, _
                                     ByVal lpString As Any) As Long

Puis copiez cette procédure :

vb
Sélectionnez

Private Sub MenuSurPlusieursColonnes(handle As Long, numeroDuMenu As Integer, _
                                     nbEltsParColonnes As Integer) 
 
Dim hMenu As Long, hSubMenu As Long 
Dim mnuItemCount As Long, mnuItemID As Long, mnuItemText As String 
Dim compteur As Integer, Resultat As Long, Buffer As String 
 
If nbEltsParColonnes < 1 Then Exit Sub 
If nbEltsParColonnes < 0 Then Exit Sub 
 
hMenu = GetMenu(handle) 'Handle du menu de la feuille
hSubMenu = GetSubMenu(hMenu, numeroDuMenu) 'Handle du sous menu désiré
mnuItemCount = GetMenuItemCount(hSubMenu) 'Nombre d'éléments dans le sous menu
 
'On règle le pas et le compteur pour le nombre d'éléments par colonne
For compteur = nbEltsParColonnes + 1 To mnuItemCount Step nbEltsParColonnes 
    Buffer = Space$(256) 
    Resultat = GetMenuString(hSubMenu, compteur - 1, Buffer, Len(Buffer), &H400&) 
    mnuItemText = Left$(Buffer, Resultat) 
    mnuItemID = GetMenuItemID(hSubMenu, compteur - 1) 
    Call ModifyMenu(hSubMenu, compteur - 1, &H400& Or &H20&, mnuItemID, mnuItemText) 
Next compteur 
 
End Sub

Appelez simplement la procédure pour chacun des menus à modifier :

vb
Sélectionnez

Private Sub Form_Load() 
 
MenuSurPlusieursColonnes Me.hwnd, 0, 5  '5 éléments par colonne pour le premier menu
MenuSurPlusieursColonnes Me.hwnd, 1, 8  '8 éléments par colonne pour le deuxième menu
 
End Sub
Créé le 4 septembre 2003  par Jean-Marc Rabilloud

Le DragDrop doit être vu comme un artifice visuel. Pour schématiser, rien n'est déplacé lors d'une opération DragDrop. C'est votre code qui va générer le "déplacement". Cette opération existe sous deux formes :

  • La forme standard pour les opérations de déplacement au sein d'un process
  • La forme OLE, qui rend possible les déplacements inter process.

La forme standard est assez simple d'utilisation. On active l'opération dans l'événement MouseMove du contrôle source, on gère les icônes dans l'(es) événement(s) DragOver des contrôles de la feuille, et enfin on effectue le déplacement dans l'événement DragDrop du contrôle cible. L'exemple suivant permet d'échanger des éléments entre deux contrôles Listbox.

vb
Sélectionnez

Private Sub Form_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
If Source Is List1 Then
    Source.DragIcon = _
        LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc\misc06.ico")
End If
End Sub
 
Private Sub List1_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
If (Source Is List1) Or (Source Is List2) Then
    Source.DragIcon = _
        LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Dragdrop\drop1pg.ico")
End If
End Sub
 
Private Sub List2_DragOver(Source As Control, X As Single, Y As Single, State As Integer)
If (Source Is List1) Or (Source Is List2) Then
    Source.DragIcon = _
        LoadPicture("C:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Dragdrop\drop1pg.ico")
End If
End Sub
 
Private Sub List1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
List1.Drag vbBeginDrag
End Sub
 
Private Sub List2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
List2.Drag vbBeginDrag
End Sub
 
Private Sub List1_DragDrop(Source As Control, X As Single, Y As Single)
If Source Is List2 Then
    List1.AddItem List2.List(List2.ListIndex)
    List2.RemoveItem List2.ListIndex
End If
End Sub
 
Private Sub List2_DragDrop(Source As Control, X As Single, Y As Single)
If Source Is List1 Then
    List2.AddItem List1.List(List1.ListIndex)
    List1.RemoveItem List1.ListIndex
End If
End Sub

Sous sa forme OLE, le drag and drop peut être beaucoup plus complexe. Bien qu'identique dans la forme de programmation, les données peuvent être transmises entre les applications. Dans l'exemple suivant, vous pouvez déplacer un fichier graphique en partant de l'explorateur vers votre PictureBox.

vb
Sélectionnez

Private Sub Form_Load()
 
'autorise les opérations manuelles de dépose
Picture1.OLEDropMode = vbOLEDropManual
 
End Sub
 
Private Sub Picture1_OLEDragDrop(Data As DataObject, Effect As Long, Button As Integer, _
                                 Shift As Integer, X As Single, Y As Single)
 
Dim NomFichier As String
 
'vérifie le format de l'objet Data Transmis
If Data.GetFormat(vbCFFiles) = True Then
    ' vbCFFiles correspond à une liste de fichier, donc récupération du premier élément
    NomFichier = Data.Files(1)
    On Error GoTo invalidPicture
    Picture1.Picture = LoadPicture(NomFichier)
End If
Exit Sub
 
invalidPicture:
    MsgBox "Format de fichier incorrect", vbCritical + vbOKOnly
 
End Sub
 
Private Sub Picture1_OLEDragOver(Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, _
                                 X As Single, Y As Single, State As Integer)
 
'vérifie le format de l'objet Data Transmis pour valoriser le paramètre Effect
If Data.GetFormat(vbCFFiles) Then
    Effect = vbDropEffectCopy And Effect
Else
    Effect = vbDropEffectNone
End If
 
End Sub
Créé le 17 février 2004  par Jean-Marc Rabilloud

Les procédures des évènements MouseDown, MouseMove et MouseUp reçoivent les coordonnées de la souris dans les paramètres X et Y. L'origine utilisée est le coin haut gauche du contrôle concerné. Les coordonnées sont exprimées dans l'unité spécifiée dans la propriété ScaleMode pour les contrôles conteneurs, et toujours en twips pour les autres.

Pour les autres évènements, par exemple Click ou DblClick, les coordonnées se récupèrent via les API Windows. Copiez ces déclarations au début du module de la form :

vb
Sélectionnez

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
 
Private Type POINTAPI
    X As Long
    Y As Long
End Type

Puis la fonction ci-dessous, qui renvoie les coordonnées de la souris exprimées en twips, par rapport au coin haut gauche de la form :

vb
Sélectionnez

Private Function GetMousePosition() As POINTAPI
 
Dim pos As POINTAPI
 
GetCursorPos pos
ScreenToClient Me.hwnd, pos
pos.X = Screen.TwipsPerPixelX * pos.X
pos.Y = Screen.TwipsPerPixelY * pos.Y
GetMousePosition = pos
 
End Function
Créé le 17 février 2004  par Romain Puyfoulhoux

Placez ce code dans un module standard. La procédure Clic simule un clic de souris. Les paramètres à passer sont les coordonnées en pixels.

vb
Sélectionnez

Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As Long
Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, _
                                      ByVal cButtons As Long, ByVal dwExtraInfo As Long)
 
Public Const MOUSEEVENTF_MOVE = &H1
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_RIGHTDOWN = &H8
Public Const MOUSEEVENTF_RIGHTUP = &H10
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20
Public Const MOUSEEVENTF_MIDDLEUP = &H40
Public Const MOUSEEVENTF_ABSOLUTE = &H8000
 
Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
 
Public Type POINTAPI
    x As Long
    y As Long
End Type
 
Public dstX As Long
Public dstY As Long
 
Public Function GetX() As Long
    Dim n As POINTAPI
    GetCursorPos n
    GetX = n.x
End Function
 
Public Function GetY() As Long
    Dim n As POINTAPI
    GetCursorPos n
    GetY = n.y
End Function
 
Public Sub Clic(PosX As Integer, PosY As Integer)
 
    'placer la souris par sécurité (pour processeurs lents)
    Call SetCursorPos(PosX, PosY)
    mouse_event MOUSEEVENTF_LEFTDOWN + MOUSEEVENTF_LEFTUP, PosX, PosY, 0, 0
 
End Sub
Créé le 26 avril 2004  par Alexandre Lokchine

Voici un composant gratuit très simple d'emploi : gif89.zip.

Il suffit d'extraire le fichier d'extension .dll dans le répertoire windows\system, puis de l'ajouter dans les composants du projet. Vous aurez alors un nouveau contrôle dans la boîte à outils. Pour afficher une image, vous pouvez indiquer le chemin du fichier à la propriété filename en mode conception ou lors de l'exécution.

Créé le 28 juin 2004  par Romain Puyfoulhoux

Sous Windows, tous les contrôles et toutes les fenêtres sont attachés à une fonction, que l'on appelle "procédure de fenêtre", et qui est chargée de traiter tous les messages reçus par cette fenêtre. Voici sa déclaration en VB :

vb
Sélectionnez

Public Function WindowProc(ByVal hwnd As Long, ByVal msg As Long, _
                           ByVal wParam As Long, ByVal lParam As Long) As Long

Cette fonction est donc exécutée chaque fois qu'une fenêtre qui lui est attachée reçoit un message. VB utilise ce genre de fonction pour nous signaler qu'un évènement a lieu en lançant la procédure évènementielle que l'on a déclarée, par exemple Form_Load.

Mais de nombreux événements pouvant parfois être utiles au programmeur n'ont pas été repris dans Visual Basic. C'est ici qu'intervient le sous classement - en anglais subclassing - : nous attachons à un contrôle ou à la form notre propre procédure afin d'intercepter l'évènement qui nous intéresse.

Exemples d'utilisation du sous classement :

Créé le 6 septembre 2004  par Romain Puyfoulhoux

Un projet VB6 (.vbp, .vbg) est compilable en ligne de commande.
Le principe : créer un tableau contenant le ou les chemins complets du ou des projets à compiler. Lancer la procédure de compilation, qui va, elle-même, exécuter ces tâches successivement (Sub ExecuteTache), afin d'éviter les erreurs de compilation multiples et simultanées.
Nota : tous les projets à compiler doivent être fermés, et les fichiers exécutables associés, non utilisés (faute de quoi ils ne pourront être écrasés).

vb
Sélectionnez

Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function GetExitCodeProcess Lib "kernel32" (ByVal hProcess As Long, lpExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, _
                                                     ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
 
Private Const STILL_ACTIVE = &H103
Private Const PROCESS_QUERY_INFORMATION = &H400
Private Const C_COMMANDLINECOMPILE As String = """C:\Program Files\Microsoft Visual Studio\VB98\vb6.exe"" /make "
 
 
Private Sub ExecuteTache(ByVal Tache As String, Optional ModShell As Variant)
' ---Cette fonction crée une tache puis regarde si elle est active---
Dim hProcess As Long
Dim RetVal As Long
    ' ---Ouvre un programme et récupère son handle (hProcess)---
    On Error GoTo errShell
    hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, False, _
                           Shell(Tache, IIf(IsMissing(ModShell), vbMinimizedNoFocus, ModShell)))
    On Error GoTo 0
 
    ' ---Regarde si le processus est actif---
    Do
        ' Retourne le status du processus en cours
        GetExitCodeProcess hProcess, RetVal
        ' Les 2 lignes suivantes sont recommandées pour éviter de faire
        ' travailler le système avec GetExitCodeProcess
        DoEvents
        Sleep 200
    Loop While RetVal = STILL_ACTIVE
    CloseHandle (hProcess)
    Debug.Print "Tache exécutée"
    Exit Sub
 
errShell:
    msg = "Erreur " & Err.Number & " : " & Err.Description & vbLf & _
          "Programme concerné : " & Tache
    MsgBox msg, vbOKOnly + vbCritical, "Lancement de la tâche impossible"
End Sub
 
Private Sub Compile(Projects() As String)
Dim i As Integer
    Screen.MousePointer = vbHourglass
    For i = 0 To UBound(Projects)
        cmd = C_COMMANDLINECOMPILE & Projects(i)
        Debug.Print cmd
        ExecuteTache cmd
    Next i
    Screen.MousePointer = vbDefault
End Sub
 
Private Sub Command1_Click()
Dim ProjetACompiler(1) As String
 
    ProjetACompiler(0) = """C:\VB6toto\Projet1.vbp"""
    ProjetACompiler(1) = """C:\VB6titi\Projet1.vbp"""
    Compile ProjetACompiler()
End Sub
Créé le 2 mai 2006  par Xo, ThierryAIM

Pour capturer certaines touches comme la touche "Suppr" l'utilisation de l'événement keypress, ne suffit pas, une solution est l'utilisation de l'API GetAsyncKeyState
déclarer l'API GetAsyncKeyState :

vb
Sélectionnez
Public Declare Function GetAsyncKeyState Lib "user32.dll" (ByVal vKey As Long) As Integer

Voici en exemple, une boucle qui s'interrompt avec une action sur la touche Suppr :

vb
Sélectionnez
'Boucle tant que touche Suppr pas actionnée..
While GetAsyncKeyState(&H2E) = 0
 DoEvents
Wend
MsgBox "FIN"

Liste des constantes utilisables :

Constante Valeur Définition
  • VK_F9 78 Touche f9
  • VK_F8 77 Touche f8
  • VK_F6 75 Touche f6
  • VK_F7 76 Touche f7
  • VK_F5 74 Touche f5
  • VK_F4 73 Touche f4
  • VK_F3 72 Touche f3
  • VK_F2 71 Touche f2
  • VK_F1 70 Touche f1
  • VK_DIVIDE 6F Touche "division".
  • VK_DECIMAL 6E Touche séparateur décimal.
  • VK_SUBTRACT 6D Touche "soustraction".
  • VK_SEPARATOR 6C Touche de séparation.
  • VK_ADD 6B Touche "addition".
  • VK_MULTIPLY 6A Touche "multiplication".
  • VK_NUMPAD9 69 Touche 9 (clavier numérique).
  • VK_NUMPAD8 68 Touche 8 (clavier numérique).
  • VK_NUMPAD7 67 Touche 7 (clavier numérique).
  • VK_NUMPAD6 66 Touche 6 (clavier numérique).
  • VK_NUMPAD5 65 Touche 5 (clavier numérique).
  • VK_NUMPAD4 64 Touche 4 (clavier numérique).
  • VK_NUMPAD3 63 Touche 3 (clavier numérique).
  • VK_NUMPAD2 62 Touche 2 (clavier numérique).
  • VK_NUMPAD1 61 Touche 1 (clavier numérique).
  • VK_NUMPAD0 60 Touche 0 (clavier numérique).
  • VK_APPS 5D Touche Windows applications (Microsoft Natural Keyboard).
  • VK_RWIN 5C Touche Windows droite (Microsoft Natural Keyboard).
  • VK_LWIN 5B Touche Windows gauche (Microsoft Natural Keyboard).
  • VK_Z 5A Touche z
  • VK_Y 59 Touche y
  • VK_X 58 Touche x
  • VK_W 57 Touche w
  • VK_V 56 Touche v
  • VK_U 55 Touche u
  • VK_T 54 Touche t
  • VK_S 53 Touche s
  • VK_R 52 Touche r
  • VK_Q 51 Touche q
  • VK_P 50 Touche p
  • VK_O 4F Touche o
  • VK_N 4E Touche n
  • VK_M 4D Touche m
  • VK_L 4C Touche l
  • VK_K 4B Touche k
  • VK_J 4A Touche j
  • VK_I 49 Touche i
  • VK_H 48 Touche h
  • VK_G 47 Touche g
  • VK_F 46 Touche f
  • VK_E 45 Touche e
  • VK_D 44 Touche d
  • VK_C 43 Touche c
  • VK_B 42 Touche b
  • VK_A 41 Touche a
  • VK_9 39 Touche 9
  • VK_8 38 Touche 8
  • VK_7 37 Touche 7
  • VK_5 35 Touche 5
  • VK_6 36 Touche 6
  • VK_3 33 Touche 3
  • VK_4 34 Touche 4
  • VK_1 31 Touche 1
  • VK_2 32 Touche 2
  • VK_0 30 Touche 0
  • VK_HELP 2F Touche "aide".
  • VK_DELETE 2E Touche "Suppression".
  • VK_INSERT 2D Touche insertion.
  • VK_SNAPSHOT 2C Touche impression écran.
  • VK_EXECUTE 2B Touche "exécution".
  • VK_SELECT 29 Touche "selection".
  • VK_DOWN 28 Flèche curseur bas.
  • VK_RIGHT 27 Flèche curseur droit.
  • VK_UP 26 Flèche curseur haut.
  • VK_LEFT 25 Flèche curseur gauche.
  • VK_HOME 24 Touche "début".
  • VK_END 23 Touche "fin".
  • VK_NEXT 22 Touche "page bas".
  • VK_PRIOR 21 Touche "page haut".
  • VK_SPACE 20 Touche Espace.
  • VK_ESCAPE 1B Touche Echap.
  • VK_CAPITAL 14 Touche verrouillage majuscule.
  • VK_PAUSE 13 Touche "Pause".
  • VK_MENU 12 Touche "Alt".
  • VK_CONTROL 11 Touche "Control".
  • VK_SHIFT 10 Touche "Shift".
  • VK_RETURN 0D Touche "Entrée".
  • VK_CLEAR 0C Touche d'effacement.
  • VK_TAB 09 Touche tabulation.
  • VK_BACK 08 Touche retour arrière.
  • VK_MBUTTON 04 Bouton du milieu de la souris (le 3ème boutton).
  • VK_CANCEL 03 Control-break.
  • VK_RBUTTON 02 Bouton droit de la souris.
  • VK_LBUTTON 01 Bouton gauche de la souris.
  • VK_F10 79 Touche f10
  • VK_F11 7A Touche f11
  • VK_F12 7B Touche f12
  • VK_F13 7C Touche f13
  • VK_F14 7D Touche f14
  • VK_F15 7E Touche f15
  • VK_F16 7F Touche f16
  • VK_F17 80H Touche f17
  • VK_F18 81H Touche f18
  • VK_F19 82H Touche f19
  • VK_F20 83H Touche f20
  • VK_F21 84H Touche f21
  • VK_F22 85H Touche f22
  • VK_F23 86H Touche f23
  • VK_F24 87H Touche f24
  • VK_NUMLOCK 90 Touche verrouillage numérique.
  • VK_SCROLL 91 Touche verrouillage défilement.
  • VK_ATTN F6 Touche "Attn".
  • VK_CRSEL F7 Touche "CrSel".
  • VK_EXSEL F8 Touche "ExSel".
  • VK_PLAY FA Touche "Play".
  • VK_ZOOM FB Touche "Zoom".
  • VK_NONAME FC Reservé.
  • VK_PA1 FD Touche PA1.
Créé le 16 septembre 2007  par spacefrog
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.