Base de connaissances CCM
Programmation - Langages - Visual Basic




Sujet 631 - [Visual Basic] Liens utiles

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]


La première doc à consulter

Le site officiel

Des cours, des tutoriaux intéressants

Quelques codes sources en cas de problèmes

Cours débutant VBA

Les graphiques Excel en VBA (en anglais)

Bon Courage !

Lire la suite

VB6 : Maintenir une appli au dessus des autres. »
Publié par JSS - Dernière mise à jour le 5 novembre 2009 à 16:39 par marlalapocket




Sujet 10273 - VB6 : Maintenir une appli au dessus des autres.

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]

Pour mettre une feuille au dessus des autres dans une application MDI il y a bien sur la fonction Zordre 0, mais mon propos est de maintenir une appli au dessus des autres appli, qu'elles soient présente à l'écran ou appellées après.

Dans un module général


Public 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 Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SWP_NOACTIVATE = &H10
Public Const SWP_SHOWWINDOW = &H40
Public Const SWP_NOMOVE = 2
Public Const SWP_NOSIZE = 1

Dans la forme d'ouverture


Private Sub Form_Load()
    Dim R as long
    R = SetWindowPos(NomFeuille.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
end sub

En rappel


Il arrive que d’autres appli utilise cette fonction, il faut donc remettre la fonction dans l’activation de la forme, ce qui permet de reprendre cette fonction si la forme est sélectionée.
Private Sub Form_Activate()
    Dim R as long
    R = SetWindowPos(NomFeuille.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
end sub

Supprimer la priorité


Private sub SuppPriorité()
    Dim R as long
    R= SetWindowPos(NomFeuille.hwnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)
End sub

Lire la suite

VB6. Connaître la position absolue de la souris. »
Publié par lermite222 - Dernière mise à jour le 16 novembre 2009 à 13:23 par marlalapocket




Sujet 10275 - VB6. Connaître la position absolue de la souris.

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]

Cette petite fonction permet de connaître la position de la souris par rapport à l'écran et non par rapport à la feuille ou au contrôle qu'elle contient.

Dans un module


Déclaration

Public Type POINTAPI
        x As Long
        y As Long
End Type
Public m_CursorPos As POINTAPI

Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long


La fonction
Sub GetCurseur()
Dim LonCStat As Long
    LonCStat = GetCursorPos&(m_CursorPos)
    'pour ce servir du résultat, les données doivent êtres transformées en Pixel.
    m_CursorPos.x = m_CursorPos.x * Screen.TwipsPixelX
    m_CursorPos.y = m_CursorPos.y * Screen.TwipsPixelY
End Sub

Lire la suite

[VB6] Rendre une forme transparente »
Publié par lermite222 - Dernière mise à jour le 16 novembre 2009 à 13:22 par marlalapocket




Sujet 10545 - [VB6] Rendre une forme transparente

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]




Introduction


Cette astuce explique comment se servir de la transparence..

Restriction


Ne fonctionne pas sur des couleurs avec signe négatif
Il faut mettre une couleur de la palette

Dans un module


Option Explicit
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bDefaut As Byte, ByVal dwFlags As Long) As Long

Private Const GWL_EXSTYLE       As Long = (-20)
Private Const LWA_COLORKEY      As Long = &H1
Private Const LWA_Defaut         As Long = &H2
Private Const WS_EX_LAYERED     As Long = &H80000

'
Public Function Transparence(ByVal hWnd As Long, Optional ByVal Coul As Long = vbBlack, _
    Optional ByVal PcTransp As Byte = 255, Optional ByVal TrMode As Boolean = True) As Boolean
' Retourne : True s'il n'y a pas eu d'erreur.
' hWnd   : hWnd de la fenêtre à rendre transparente
' Coul : Couleur à rendre transparente si TrMode=False
' PcTransp  : 0 à 255 >> 0 = transparent  -:- 255 = Opaque
Dim VoirStyle As Long
    On Error GoTo Sortie
    VoirStyle = GetWindowLong(hWnd, GWL_EXSTYLE)
    If VoirStyle <> (VoirStyle Or WS_EX_LAYERED) Then
        VoirStyle = (VoirStyle Or WS_EX_LAYERED)
        Call SetWindowLong(hWnd, GWL_EXSTYLE, VoirStyle)
    End If
    Transparence = (SetLayeredWindowAttributes(hWnd, Coul, PcTransp, IIf(TrMode, LWA_COLORKEY Or LWA_Defaut, LWA_COLORKEY)) <> 0)
    
Sortie:
    If Not Err.Number = 0 Then Err.Clear
End Function

Public Sub ActiveTransparence(M As Form, d As Boolean, F As Boolean, _
     T_Transparence As Integer, Optional Couleur As Long)
Dim B As Boolean
        If d And F Then
        'Rend la couleur (ici la couleur du fond de la forme) transparente
        'au taux de T_Transparence
            B = Transparence(M.hWnd, Couleur, T_Transparence, False)
        ElseIf d Then
            'Rend toute la forme, y compris les composants, transparente
            'au taux de T_Transparence
            B = Transparence(M.hWnd, 0, T_Transparence, True)
        Else
            'Restaure la forme opaque.
            B = Transparence(M.hWnd, , 255, True)
        End If
End Sub

Exemple dans une forme


Private Sub Form_Load()
Dim i As Integer
    'Ex: tout transparent à 140/255ème
    'ActiveTransparence Me, True, False, 140, Me.BackColor
    'Ex: Forme transparent, composant visible à 140/255ème
    'ActiveTransparence Me, True, True, 140, Me.BackColor
    
    'Exemple d'affichage de la forme par gradation de la transparence
    ActiveTransparence Me, True, False, 0
    Me.Show
    For i = 0 To 255 Step 3
        ActiveTransparence Me, True, False, i
        Me.Refresh
    Next i
End Sub

Lire la suite

VB6 : Changer l'image du bureau + écrire dans le régistre »
Publié par lermite222 - Dernière mise à jour le 13 novembre 2009 à 15:41 par marlalapocket




Sujet 10722 - VB6 : Changer l'image du bureau + écrire dans le régistre

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]


Introduction


Comme dit dans le titre ces quelques lignes de code permettent de changer l'image du bureau
et de l'inscrire dans le régistre.

Initialisation du projet


Ouvrir un nouveau projet
Dans la forme coller les composants suivants...
'1 textBox Name = Text1
'1 CommandButton  Name = Applique
                ' caption = Appliquer
'3 x OptionButton Name = Option1
'   index = 0 : caption = Centrer
'   index = 1 : caption = Mosaique
'   index = 2 : caption = Etirer


'Vous pouvez aussi ajouter un CommondDialog pour rechercher un fichier image
'mais ce n'est pas le propos dans cette astuce.

'Pour le test, mettre le chemin et nom complet d'un fichier image dans text1

Dans le module de la forme


Option Explicit

Private Declare Function SystemParametersInfo Lib "User32" Alias "SystemParametersInfoA" _
(ByVal uAction As Long, ByVal uParam As Long, ByVal lpvParam As String, ByVal fuWinIni As Long) As Long

 Const SPI_SETDESKWALLPAPER = 20
 Const SPIF_UPDATEINIFILE = &H1
 Const SPIF_SENDWININICHANGE = &H2


' API pour la base de registre:
' ---------------------------------------------
 Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal Hkey As Long) As Long
 Private Declare Function RegCreateKey Lib "advapi32.dll" Alias "RegCreateKeyA" (ByVal Hkey As Long, _
 ByVal  lpSubKey As String, phkResult As Long) As Long
 Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal Hkey As Long, _
 ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, lpData As Any, ByVal cbData _
 As Long) As Long

 Const HKEY_CURRENT_USER = &H80000001
 Const ERROR_SUCCESS = 0&
 Const REG_SZ = 1
 
 Dim NomFichier As String
 Dim AffiType As Integer

Private Sub Applique_Click()
Dim Txt1 As String, Txt2 As String
Dim R As Long
Dim Hand As Long
    ' Gestion de l'erreur si pas d'image
    On Error Resume Next

    NomFichier = Text1.Text

' Mettre les options dans les régistres
    Select Case AffiType
    Case 0 ' Centrer
        Txt1 = "0": Txt2 = "0"
    Case 1 ' Mosaïque
        Txt1 = "0": Txt2 = "1"
    Case 2 ' Etirer
        Txt1 = "2": Txt2 = "0"
    End Select
   R = RegCreateKey(HKEY_CURRENT_USER, "Control Panel\Desktop", Hand)
   R = RegSetValueEx(Hand, "WallpaperStyle", 0, REG_SZ, ByVal Txt1, Len(Txt1))
   R = RegCloseKey(Hand)
   
   R = RegCreateKey(HKEY_CURRENT_USER, "Control Panel\Desktop", Hand)
   R = RegSetValueEx(Hand, "TileWallpaper", 0, REG_SZ, ByVal Txt2, Len(Txt2))
   R = RegCloseKey(Hand)
   
    SystemParametersInfo SPI_SETDESKWALLPAPER, 0&, NomFichier, SPIF_UPDATEINIFILE Or _
    SPIF_SENDWININICHANGE

End Sub

Private Sub Option1_Click(Index As Integer)
    AffiType = Index

End Sub

Lire la suite

VB6 Retrouver les valeurs RGB d'une couleur »
Publié par lermite222 - Dernière mise à jour le 16 novembre 2009 à 12:18 par marlalapocket




Sujet 10727 - VB6 Retrouver les valeurs RGB d'une couleur

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]


Dim R as integer
Dim G as integer
Dim B as integer

Sub TrouveRGB(Coul As Long)
    R = &HFF& And Coul 
    G = (&HFF00& And Coul ) \ 256
    B = (&HFF0000 And Coul ) \ 65536
End Sub

Et l'inverse :
Function TrouveCoul(R As Long, G As Long, B As Long) As Long
    TrouveCoul = R + (G * 256) + (B * 65536)
End Function

Lire la suite

VB6 Tracer le suivi de la souris ou ligne droite sur une forme »
Publié par lermite222 - Dernière mise à jour le 2 novembre 2009 à 16:58 par marlalapocket




Sujet 12143 - VB6 Tracer le suivi de la souris ou ligne droite sur une forme

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]


Lignes aléatoires


Lignes droites


Pour cette dernière fonction, déplacer le code comme indiqué en remarque.
Peut servir sur tout contrôle qui possède un hdc.

Option Explicit
Const PS_SOLID = 0
Const Epp = 10 'épaisseur du trait

Private Type POINTAPI
  X As Long
  Y As Long
End Type
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function CreatePen Lib "gdi32" (ByVal nPenStyle As Long, ByVal nWidth As Long, ByVal crColor As Long) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, _
  ByVal X As Long, ByVal Y As Long, lpPoint As Any) As Long


Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    DeleteObject SelectObject(Me.hdc, CreatePen(PS_SOLID, Epp, RGB(0, 255, 0)))
    MoveToEx Me.hdc, X, Y, &H0
End Sub

'Mettre ce code dans Form_MouseUp pour une ligne droite
'sans la ligne >> If Button <> 1 Then Exit Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button <> 1 Then Exit Sub
    DeleteObject SelectObject(Me.hdc, CreatePen(PS_SOLID, Epp, RGB(0, 255, 0)))
    LineTo Me.hdc, X, Y
    Me.Refresh
End Sub


Le code en soi n'a pas beaucoup d'intérêt, mais il permet de mettre en œuvre quelques API intéressantes.

Lire la suite

[VB6/VBA] Le contrôle CommonDialog. »
Publié par lermite222 - Dernière mise à jour le 13 novembre 2009 à 14:13 par marlalapocket




Sujet 12535 - [VB6/VBA] Le contrôle CommonDialog.

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]


Les différentes fonctions du contrôle CommonDialog


J'ai laissé toutes les constantes disponibles bien qu'elles ne sont pas toutes utilisées dans les fonctions proposées, elles permettront d'éventuelles recherches sur d'autres données possibles.

Les fonctions possibles avec Commond Dialog


Préliminaires


Une form > Name = Dialog
Un contrôle CommonDialog > Name = CMDialog1

bouton1 > Caption = Ouvrir Fichier
Code dans CommandX_Click() > Ret = cmd_Ouvre() >voir les rem pour plus de détails.

bouton2 > Caption = Sauve sous
Code dans Clic Ret = cmd_Ouvre()

bouton3 > Caption = Imprimer
Code dans CommandX_Click() > Ret = cmd_Print()

bouton4 > Caption = Police
Code dans CommandX_Click() > Ret = cmd_Police()

Dans un module standard


Option Explicit

Public Filtre1 As String
Public Filtre2 As String
Public Filtre3 As String
Public Filtre4 As String
Public Filtre5 As String
Public Filtre6 As String
Public Filtre7 As String

Public Const DLG_FILE_OPEN = 1
Public Const DLG_FILE_SAVE = 2
Public Const DLG_COLOR = 3
Public Const DLG_FONT = 4
Public Const DLG_Print = 5
Public Const DLG_HELP = 6

'File Open/Save Dialog Flags
Public Const OFN_READONLY = &H1&
Public Const OFN_OVERWRITEPROMPT = &H2&
Public Const OFN_HIDEREADONLY = &H4&
Public Const OFN_NOCHANGEDIR = &H8&
Public Const OFN_SHOWHELP = &H10&
Public Const OFN_NOVALIDATE = &H100&
Public Const OFN_ALLOWMULTISELECT = &H200&
Public Const OFN_EXTENSIONDIFFERENT = &H400&
Public Const OFN_PATHMUSTEXIST = &H800&
Public Const OFN_FILEMUSTEXIST = &H1000&
Public Const OFN_CREATEPROMPT = &H2000&
Public Const OFN_SHAREAWARE = &H4000&
Public Const OFN_NOREADONLYRETURN = &H8000&

'Color Dialog Flags
Public Const CC_RGBINIT = &H1&
Public Const CC_FULLOPEN = &H2&
Public Const CC_PREVENTFULLOPEN = &H4&
Public Const CC_SHOWHELP = &H8&

'Fonts Dialog Flags
Public Const CF_SCREENFONTS = &H1&
Public Const CF_PRINTERFONTS = &H2&
Public Const CF_BOTH = &H3&
Public Const CF_SHOWHELP = &H4&
Public Const CF_INITTOLOGFONTSTRUCT = &H40&
Public Const CF_USESTYLE = &H80&
Public Const CF_EFFECTS = &H100&
Public Const CF_APPLY = &H200&
Public Const CF_ANSIONLY = &H400&
Public Const CF_NOVECTORFONTS = &H800&
Public Const CF_NOSIMULATIONS = &H1000&
Public Const CF_LIMITSIZE = &H2000&
Public Const CF_FIXEDPITCHONLY = &H4000&
Public Const CF_WYSIWYG = &H8000&         'must also have CF_SCREENFONTS & CF_PRINTERFONTS
Public Const CF_FORCEFONTEXIST = &H10000
Public Const CF_SCALABLEONLY = &H20000
Public Const CF_TTONLY = &H40000
Public Const CF_NOFACESEL = &H80000
Public Const CF_NOSTYLESEL = &H100000
Public Const CF_NOSIZESEL = &H200000

'Printer Dialog Flags
Public Const PD_ALLPAGES = &H0&
Public Const PD_SELECTION = &H1&
Public Const PD_PAGENUMS = &H2&
Public Const PD_NOSELECTION = &H4&
Public Const PD_NOPAGENUMS = &H8&
Public Const PD_COLLATE = &H10&
Public Const PD_PRINTTOFILE = &H20&
Public Const PD_PRINTSETUP = &H40&
Public Const PD_NOWARNING = &H80&
Public Const PD_RETURNDC = &H100&
Public Const PD_RETURNIC = &H200&
Public Const PD_RETURNDEFAULT = &H400&
Public Const PD_SHOWHELP = &H800&
Public Const PD_USEDEVMODECOPIES = &H40000
Public Const PD_DISABLEPRINTTOFILE = &H80000
Public Const PD_HIDEPRINTTOFILE = &H100000

'Help Constants
Public Const HELP_CONTEXT = &H1           'Display topic in ulTopic
Public Const HELP_QUIT = &H2              'Terminate help
Public Const HELP_INDEX = &H3             'Display index
Public Const HELP_CONTENTS = &H3
Public Const HELP_HELPONHELP = &H4        'Display help on using help
Public Const HELP_SETINDEX = &H5          'Set the current Index for multi index help
Public Const HELP_SETCONTENTS = &H5
Public Const HELP_CONTEXTPOPUP = &H8
Public Const HELP_FORCEFILE = &H9
Public Const HELP_KEY = &H101             'Display topic for keyword in offabData
Public Const HELP_COMMAND = &H102
Public Const HELP_PARTIALKEY = &H105      'call the search engine in winhelp

Function ajoute(a$) As String
    If a$ <> "" Then a$ = a$ + "|"
    ajoute = a$
End Function

'Lignes d'appel...
'NomFichier = cmd_ouvre()
'Si 1 filtre en plus >> NomFichier = cmd_ouvre("txt") < par ex.
'Si plusieurs filtres, initialiser les filtres Filtre1 à 4
'la routine ajoute le filtre tous (*.*)
Function cmd_Ouvre(Optional Filt1 As String) As String
Dim CTRL$, a$, b$, F1$, F2$, F3$, F4$
CTRL$ = Chr$(13) + Chr$(10)
    If Filt1 <> "" Then
        a$ = " Fichier (*." & Filt1 & ") | *." & Filt1
    End If
    If Filtre1 <> "" Then
        a$ = ajoute(a$)
        a$ = a$ + " Fichier (*." & Filtre1 & ") | *." & Filtre1
        Filtre1 = ""
    End If
    If Filtre2 <> "" Then
        a$ = ajoute(a$)
        a$ = a$ + " Fichier (*." & Filtre2 & ") | *." & Filtre2
        Filtre2 = ""
    End If
    If Filtre3 <> "" Then
        a$ = ajoute(a$)
        a$ = a$ + " Fichier (*." & Filtre3 & ") | *." & Filtre3
        Filtre3 = ""
    End If
    If Filtre4 <> "" Then
        a$ = ajoute(a$)
        a$ = a$ + " Fichier (*." & Filtre4 & ") | *." & Filtre4
        Filtre4 = ""
    End If
        a$ = ajoute(a$)
        a$ = a$ + " Tous (*.*) | *.*"
    Dialog.CMDialog1.Filter = a$
    Dialog.CMDialog1.FilterIndex = 1
    Dialog.CMDialog1.FLAGS = CF_EFFECTS Or OFN_HIDEREADONLY Or CF_ANSIONLY
    Dialog.CMDialog1.Action = DLG_FILE_OPEN
    cmd_Ouvre = Dialog.CMDialog1.FileName
    Unload Dialog
End Function

Function cmd_Police()
    Dialog.CMDialog1.DialogTitle = "Sélection police"
    Dialog.CMDialog1.FLAGS = CF_WYSIWYG + CF_BOTH + CF_SCALABLEONLY
    Dialog.CMDialog1.Action = DLG_FONT
    Filtre1 = Dialog.CMDialog1.FontName
    Filtre4 = Dialog.CMDialog1.FontSize
    Filtre5 = Dialog.CMDialog1.FontBold
    Filtre6 = Dialog.CMDialog1.FontItalic
    cmd_Police = Dialog.CMDialog1.FontName
End Function

Function cmd_Print()
    Dialog.CMDialog1.FLAGS = PD_ALLPAGES
    Dialog.CMDialog1.Min = 1
    Dialog.CMDialog1.Max = 100
    Dialog.CMDialog1.FromPage = 1
    Dialog.CMDialog1.ToPage = 100
    Dialog.CMDialog1.Action = DLG_Print
    Unload Dialog
End Function

'Filt1 = extention des fichiers à chercher
'ex: TXT ou EXE
'la routine ajoute le filtre tous (*.*)
Function cmd_SaveAs(Filt1 As String) As String
    Filtre1 = "Fichier (*." & Filt1 & ") | *." & Filt1
    Filtre2 = "Tous (*.*) | *.*"
    Dialog.CMDialog1.Filter = Filtre1 + "|" + Filtre2
    Dialog.CMDialog1.FilterIndex = 1
    Dialog.CMDialog1.FLAGS = OFN_HIDEREADONLY
    Dialog.CMDialog1.Action = DLG_FILE_SAVE
    cmd_SaveAs = Dialog.CMDialog1.FileName
    Unload Dialog

End Function

Lire la suite

[VBA/VB6] Rép. Mes Documents+Variables Environnement »
Publié par lermite222 - Dernière mise à jour le 13 novembre 2009 à 13:29 par marlalapocket




Sujet 12901 - [VBA/VB6] Rép. Mes Documents+Variables Environnement

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]

Dans l'explorateur de fichiers, le dossier Mes Documents semble être sur le root, or ce n'est pas le cas. Il est situé dans un sous-répertoire de C:\Documents and Settings. Le hic, c'est que le premier sous-répertoire prend le nom de l'utilisateur et change donc non seulement d'un PC à l'autre, mais également sur un PC multi-utilisateurs.
Le code ci-dessous permet d'avoir le répertoire de Mes Documents quel que soit l'utilisateur connecté.
Collez ce code dans un module général :

Option Explicit

Private Type SHITEMID
    cb As Long
    abID As Byte
End Type
Private Type ITEMIDLIST
    mkid As SHITEMID
End Type
Private Const CSIDL_PERSONAL As Long = &H5
Private Declare Function SHGetSpecialFolderLocation Lib "shell32.dll" _
                        (ByVal hwndOwner As Long, ByVal nFolder As Long, _
                         pidl As ITEMIDLIST) As Long
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" Alias "SHGetPathFromIDListA" _
                        (ByVal pidl As Long, ByVal pszPath As String) As Long


Public Function Rep_Documents() As String
    Dim lRet As Long, IDL As ITEMIDLIST, sPath As String
    lRet = SHGetSpecialFolderLocation(100&, CSIDL_PERSONAL, IDL)
    If lRet = 0 Then
        sPath = String$(512, Chr$(0))
        lRet = SHGetPathFromIDList(ByVal IDL.mkid.cb, ByVal sPath)
        Rep_Documents = Left$(sPath, InStr(sPath, Chr$(0)) - 1)
    Else
        Rep_Documents = vbNullString
    End If
End Function

Exemple d'appel : Dans une feuille, collez un bouton et dans le code du bouton, collez
Private Sub CommandButton1_Click()
    Cells(5, 2) = Rep_Documents()
End Sub




Plus simple sous VB6


Sous VB6, il vous suffit d'exploiter la variable d'environnement UserProfile :
Ceci ne marche pas sous macintosh.

Fonctionne aussi sous VBA


Dim sPathUser as String
sPathUser = Environ$("USERPROFILE") & "\mes documents\"
MsgBox sPathUser

Fonctions Environnement


La fonction Environ$ sert à recevoir la valeur d'une variable d'environnement.
Par exemple, si vous auriez mis WINDIR (sous Windows), vous auriez obtenu le dossier où est installé Windows (par défaut C:\Windows\).
Oui, oui : ce sont bien les variables que vous pouvez utiliser aussi bien en Batch que dans la boite de dialogue Exécuter. Également dans un environnement de programmation tel que VB et VBA.
Sous Windows, faites la touche Windows + R (ou menu démarrer ► Exécuter) et tapez %UserProfile%, vous atterrissez dans le dossier de l'utilisateur actuel. Tapez "%UserProfile%\Mes documents" pour atterrir dans vos documents, ou tapez %WinDir% pour le dossier de Windows ... ou encore %tmp% pour les dossiers temporaires, etc ...

Variables Windows


Variables utilisateur par défaut

Variables système


Annexe


Si vous êtes administrateur, vous pouvez aussi changer les valeurs ou ajouter des variables d'environnement en allant dans le Panneau de configuration (en affichage classique) ► System ► Avancé ► Variables d'environnement.
Et normalement vous verrez ce que j'ai écrit.
(fait avec Windows XP Pro).

Lire la suite

[VB6] Un progressBar graphique (OCX) »
Publié par lermite222 - Dernière mise à jour le 10 novembre 2009 à 16:06 par marlalapocket




Sujet 25977 - [VB6] Un progressBar graphique (OCX)

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]

Cet OCX génère un progresse-barre graphique identique au progresse-barre de Vista.
Deux fonctions sont implémentées,
Un décompteur de temps.
Un Progresse barre en pourcentage.
5 couleurs d'affichage sont disponnibles.
Un mode d'emploi est inclu dans le zip.
Eventuellement, pour ceux que cela pourraient intéresser, je peux communiquer les fichiers source, me faire la demande par MP en communiquant votre mail.
Copier les 3 fichiers contenu dans le répertoir Controle dans le répertoir Systeme32.
Enrégistrer l'OCX avec REGSVR32.
    REGSVR32 LN_BarPr.ocx

voir cette astuce si vous êtes sous vista.


le fichier .zip


Exemples :

Lire la suite

[VB6] Message déroulant hors écran. + barre des tâches »
Publié par lermite222 - Dernière mise à jour le 23 janvier 2010 à 16:29 par lermite222




Sujet 27088 - [VB6] Message déroulant hors écran. + barre des tâches

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]

Message déroulant Démo.

Pour envoyer un message d'alerte ou tout simplement un message à l'utilisateur certain d'entre-vous font « dérouler » une boite à partir d'un bord de l'écran. Mais c'est sans compter avec la barre des tâches, qu'elle soit fixe ou rentrante.
Cette démo tient compte de la barre des tâches quelle que soit sa position et sont mode (Fixe/rentrante).
Dans le mode ou la barre des tâches est rentrante le boite à message suis sa positions dans tout les modes, même si sa position est modifiée pendant l'affichage du message
J'en ai profité pour ajouter quelque sous routines nécessaire au fonctionnement de la démo.

Retrait auto : cache le message automatiquement après +- 6 secondes (réglable)
Cliquer sur le message le referme.

Les paramètres de la barre des tâches


'A mettre dans un module. Module1 par exemple.
Option Explicit 

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 
Private Declare Function GetWindowPlacement Lib "user32" (ByVal hWnd As Long, lpwndpl As WINDOWPLACEMENT) As Long 

  
Private Type POINTAPI 
        X As Long 
        Y As Long 
End Type 
Private Type RECT 
        Left As Long 
        Top As Long 
        Right As Long 
        Bottom As Long 
End Type 
Private Type WINDOWPLACEMENT 
        Length As Long 
        FLAGS As Long 
        showCmd As Long 
        ptMinPosition As POINTAPI 
        ptMaxPosition As POINTAPI 
        rcNormalPosition As RECT 
End Type 
Public WinPlacement As WINDOWPLACEMENT 

Sub GetTasckBarPlacement() 
Dim TrayHwnd As Long 
    TrayHwnd = FindWindow("Shell_traywnd", "") 
    WinPlacement.Length = Len(WinPlacement) 
    GetWindowPlacement TrayHwnd, WinPlacement 
End Sub


Vous pouvez télécharger un projet de démo ici

.

Lire la suite

[VBA VB6] Un menu "Flottant" type PopUpMenu. »
Publié par lermite222 - Dernière mise à jour le 7 mars 2010 à 15:45 par lermite222




Sujet 27517 - VBA VB6 - Un menu "Flottant" type PopUpMenu.

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]

Cette classe implémente un menu qui est positionné à l'emplacement de la souris.
Il peut servir de menu mais aussi de "bulle" d'information.
Disponible sur les feuilles et les UserForm.

Se referme dès qu'une action intervient, que ce soit sur le menu ou ailleurs, dans ce cas renvoi 0, il est aussi possible d'ajouter un timer de x secondes pour le refermer automatiquement.

Sur une feuille, employécomme "bulle"

centre


centre


Sur un UserForm, employé comme "menu"
centre


Testé sur Excel 2000 et 2007.
Le classeur Excel 97 - 03 > Serveur 1 : PopUpMenu.xls
Le projet VB6. > Serveur 1 : TestMenuF.zip

Ce zip Contient : Les modules Bas et cls pour être employés en VB6 et le classeur Excel 97-03
Serveur réserve : PopUpMenu.zip

Publié par lermite222 - Dernière mise à jour le 4 mars 2011 à 13:32 par lermite222
Ce document intitulé « VBA VB6 - Un menu "Flottant" type PopUpMenu. » issu de Comment Ça Marche Informatique (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.




Sujet 28142 - VB6 - Imprimer un tableau Acces dans un FlexGrid VB6

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]



Note : Pour l'ouvrir la première fois il faut avoir ouvert VB6 en tant qu'administrateur.
Cliquez droit sur l'icône de VB6 dans le menu sélectionnez Exécuter en tant qu'administrateur.


Le code n'est pas joint vu qu'il faut la base de donnée pour tester cette démo.
Télécharger le projet et la BD :
Serveur 1 : ImprimerFlexGrid.zip
Serveur réserve : ImprimerFlexGrid.zip
Publié par lermite222 - Dernière mise à jour le 3 mars 2011 à 17:44 par lermite222
Ce document intitulé « VB6 - Imprimer un tableau Acces dans un FlexGrid VB6 » issu de Comment Ça Marche Informatique (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.




Sujet 30368 - VB.net - Remplacer les index des contrôles d'une form

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]



Introduction


Pour les programmeurs qui connaissent VB6 les collections de contrôles étaient on ne peut plus facile. En effet, il suffisait de créer des contrôles avec le même nom mais avec un index différent.
En VB.Net Bill Gates a décidé de nous compliquer la vie : ces collections n'existent plus, du moins pas aussi facilement.
Il est donc nécessaire de développer des astuces pour palier ce manque. Mais ne vous en faites pas, tout est possible avec VB.Net !
Nous pouvons considérer que tous les contrôles d'une forme font déjà partie d'une collection, ... de là à les identifier !
Nous pouvons passer en revue tous les "contrôles" qui constituent le design de la forme,
la difficulté est que chaque contrôle a ses propres propriétés.
Cette première approche nous permettra de traiter les propriétés de plusieurs contrôles de différents types avec quelques lignes de code dans une seule "sub".

Préliminaires



Le code


Le code est séparé en deux "sub" pour une meilleur compréhension mais pourrait être réalisé en une seule "sub".
Si vous le souhaitez vous pouvez libérer les deux lignes Img.image = ...
Les images sont dans le zip.
'==============================================================  
'Sur la forme,  
'4 TextBox propriété Tag de 1 à 4  
'6 PictureBox propriété Tag de 1 à 6  
'==============================================================  
Public Class Form1  
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
        InitPic()  
        InitText()  
    End Sub  
    Sub InitText()  
        Dim Ctl As Control  
        Dim Txt As TextBox  
        Static NbAlea As Integer  
        NbAlea += 1 : If NbAlea > 4 Then NbAlea = 1  
        For Each Ctl In Me.Controls 'boucle sur tout les contrôles de la forme  
            If TypeOf Ctl Is TextBox Then 'Vérifie que c'est un textbox  
                Txt = Ctl  
                If Txt.Tag = NbAlea Then  
                    'S'il n'y a que des TextBox sur la form il n'est pas nécessaire  
                    'de passer par une variable buffer  
                    Txt.Text = "c'est le TextBox : " & Txt.Name  
                    Txt.BackColor = Color.Fuchsia  
                Else  
                    Txt.Text = ""  
                    Txt.BackColor = Color.Empty  
                End If  
            End If  
        Next  
    End Sub  
    Sub InitPic()  
        Dim Pic As Control  
        Dim Img As PictureBox  
        Static NbAlea As Integer  
        NbAlea += 1 : If NbAlea > 6 Then NbAlea = 1  
        'S'il n'y a que des pictureBox sur la form il n'est pas nécessaire  
        'de passer par une variable buffer  
        For Each Pic In Me.Controls 'boucle sur tout les contrôles de la forme  
            If TypeOf Pic Is PictureBox Then  
                Img = Pic  
                If Pic.Tag = NbAlea Then  
                    Img.BackColor = Color.Aquamarine  
                    Img.BorderStyle = BorderStyle.Fixed3D  
                    'Img.Image = System.Drawing.Bitmap.FromFile(My.Application.Info.DirectoryPath & "\bt" & NbAlea & ".bmp")  
                    'Img.SizeMode = PictureBoxSizeMode.StretchImage  
                Else  
                    Img.BackColor = Color.Chocolate  
                    Img.BorderStyle = BorderStyle.FixedSingle  
                End If  
            End If  
        Next  
    End Sub  

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click  
        InitText()  
    End Sub  

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click  
        InitPic()  
    End Sub  
End Class

Téléchargement


La solution VB.Net
Serveur 1 : VbNet Collection.zip
Serveur réserve : VbNet Collection.zip
N'oubliez pas de décompresser le dossier Zip.
Publié par lermite222 - Dernière mise à jour le 28 février 2011 à 23:00 par lermite222
Ce document intitulé « VB.net - Remplacer les index des contrôles d'une form » issu de Comment Ça Marche Informatique (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.




Sujet 30562 - VB.Net - Minuterie polyvalente

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]



Voila une minuterie (décompteur du temps), elle peu bien évidement être employée sans affichage.
Utile pour une approche des contrôles.
Et pour le traitement de chaine en VB.Net

Par facilité je n'ai pas mis le code mais un projet démo.



Télécharger le projet démo
Serveur 1 : Minuterie.zip
Serveur réserve : Minuterie.zip

PS: Petite rectification dans le code.
Dans l'événement Form1_Load ajouter la ligne Timer1.Interval = 1000
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  
        Timer1.Interval = 1000  
End Sub


Une version plus élaborée avec démo pour les API...
Implémente le déplacement (sans cadre) et arrondi les coins de la forme.

Télécharger la version 2
Serveur 1 : Minuterie V2.zip
Serveur réserve : Minuterie V2.zip
Publié par lermite222 - Dernière mise à jour le 9 mars 2011 à 22:16 par lermite222
Ce document intitulé « VB.Net - Minuterie polyvalente » issu de Comment Ça Marche Informatique (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.




Sujet 30991 - VB6 - Gérer un fichier INI + Divers fonctions

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]


Cette démo comprend un module BAS pour écriture et lecture dans un fichier INI et une forme pour les exemple d'emploi des fonctions.

Le code est largement documenté pour permettre une utilisation facile.

Entête du module


'**********************************************************
Lermite - module LN_Routines
Version 3.3 7/05/2002
Gère les fonctions d'appels et écritures dans un fichier INI.

Et quelques routines générales


Pour utiliser toutes les fonctions dans votre appli, ajouter le module LN_RoutinesINI à votre projet.

Téléchargement du projet::
Serveur 1 : LN_RoutinesINI.zip
Serveur réserve : LN_RoutinesINI.zip

Publié par lermite222 - Dernière mise à jour le 28 février 2011 à 18:40 par lermite222
Ce document intitulé « VB6 - Gérer un fichier INI + Divers fonctions » issu de Comment Ça Marche Informatique (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.




Sujet 31148 - VB6 - Ajouter un scroll horizontal dans ListBox

[ Voir ce sujet en ligne ] - [ Catégorie: Programmation - Langages - Visual Basic ]



En VB6 les zones de listes n'implémente pas un Scroll horizontal, assez gênant si la longueur des textes sont plus long que la largeur de la listBox.
Ce qui oblige à élargir la listBox dans des proportions qui ne sont pas nécessairement souhaitées pour le design.
Ces quelque lignes de code génère un Scroll horizontal dans la listBox.
Option Explicit 

Private Const LB_SETHORIZONTALEXTENT = &H194 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long 

Private Sub Form_Load() 
Dim Lg As Integer, L As Integer, Va As String, i As Integer 
    'Remplir la list avec des lignes longues pour la démo 
    For i = 0 To 20 
        Va = Va & "Test" & i & " " 
        List1.AddItem Va 
        L = TextWidth(List1.List(i)) 
        If Lg < TextWidth(List1.List(i)) Then Lg = L 
    Next 
    'Adapter les valeurs du scroll horizontal. 
    If Lg > List1.Width Then 
        HorizontalSrcoll List1, Lg 
    End If 
End Sub 

'Adapter les valeurs du scroll horizontal. 
Private Sub HorizontalSrcoll(Lt As Control, Lg As Integer) 
Dim Ret As Long 
Dim ScrollMax As Long 
  ScrollMax = (Lg / Screen.TwipsPerPixelX) + 6 
  Ret = SendMessage(Lt.hwnd, LB_SETHORIZONTALEXTENT, ScrollMax, 0&) 
End Sub 

Serveur 1 : ScrollHzList.zip
Serveur réserve : ScrollHzList.zip
Publié par lermite222 - Dernière mise à jour le 9 mars 2011 à 10:16 par Jeff
Ce document intitulé « VB6 - Ajouter un scroll horizontal dans ListBox » issu de Comment Ça Marche Informatique (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.





© Tous droits réservés 2010 Jean-François Pillou