Accueil > > > AJOUT D'UN CONTRÔLE CALENDRIER EN DYNAMIQUE SUR UNE FORM, D'UNE MANIÈRE PEUT CONVENTIONNELLE !
AJOUT D'UN CONTRÔLE CALENDRIER EN DYNAMIQUE SUR UNE FORM, D'UNE MANIÈRE PEUT CONVENTIONNELLE !
Information sur la source
Description
Tous l'intérêt de ce code est de découvrir une manière peux conventionnel pour inclure un contrôle sur une form…. Le code original est de Michel Pierron (http://www.excelabo.net/trucs/ocx_optionnel) que j’ai simplifié et complété.
Source
- '
- ' Source original : (Michel Pierron) http://www.excelabo.net/trucs/ocx_optionnel
- '
- ' Pour tester, mettre dans en bas d’une form une TextBox nommé TextBox1, et deux boutons nommés CmdSET et CmdGET.
- '
- '
-
-
- Option Explicit
-
- Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
- Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
- Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
- 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 Declare Sub InitCommonControls Lib "comctl32" ()
-
- ' MonthCal Messages
- Private Const MCM_FIRST = &H1000
- Private Const MCM_GETCURSEL = (MCM_FIRST + 1)
- Private Const MCM_SETCURSEL = (MCM_FIRST + 2)
- Private Const MCM_SETCOLOR = (MCM_FIRST + 10)
- Private Const MCM_GETCOLOR = (MCM_FIRST + 11)
- Private Const MCM_SETFIRSTDAYOFWEEK = (MCM_FIRST + 15)
- Private Const MCM_GETFIRSTDAYOFWEEK = (MCM_FIRST + 16)
-
- ' MonthCal Styles
- Private Const MCS_MULTISELECT = &H2
- Private Const MCS_WEEKNUMBERS = &H4
- Private Const MCS_NOTODAYCIRCLE = &H8
- Private Const MCS_NOTODAY = &H10
-
- ' MonthCal Color
- Private Const MCSC_BACKGROUND = 0 ' the background color (between months)
- Private Const MCSC_TEXT = 1 ' the dates
- Private Const MCSC_TITLEBK = 2 ' background of the title
- Private Const MCSC_TITLETEXT = 3
- Private Const MCSC_MONTHBK = 4 ' background within the month cal
- Private Const MCSC_TRAILINGTEXT = 5 ' the text color of header & trailing days
-
- Private Type SYSTEMTIME
- wYear As Integer
- wMonth As Integer
- wDayOfWeek As Integer
- wDay As Integer
- wHour As Integer
- wMinute As Integer
- wSecond As Integer
- wMilliseconds As Integer
- End Type
-
- Private dtHwnd As Long
-
- Private Sub Form_Load()
- InitCommonControls
- dtHwnd = CreateWindowEx(0, "SysMonthCal32", vbNullString, &H50000000 + MCS_WEEKNUMBERS, 40, 10, 200, 200, Me.hWnd, 0&, 0&, ByVal 0&)
- SendMessage dtHwnd, MCM_SETCOLOR, MCSC_BACKGROUND, ByVal &HE0E0E0
- SendMessage dtHwnd, MCM_SETCOLOR, MCSC_TITLEBK, ByVal RGB(46, 210, 50)
- End Sub
-
- Private Sub CmdGET_Click()
- Dim CurSysTime As SYSTEMTIME
- SendMessage dtHwnd, MCM_GETCURSEL, 0&, CurSysTime
- Me.TextBox1.Text = Format(DateSerial(CurSysTime.wYear, CurSysTime.wMonth, CurSysTime.wDay), "Short Date")
- End Sub
-
- Private Sub CmdSET_Click()
- Dim CurSysTime As SYSTEMTIME
- On Error Resume Next
- CurSysTime.wYear = Year(CDate(Me.TextBox1.Text))
- CurSysTime.wMonth = Month(CDate(Me.TextBox1.Text))
- CurSysTime.wDay = Day(CDate(Me.TextBox1.Text))
- On Error GoTo 0
- SendMessage dtHwnd, MCM_SETCURSEL, 0&, CurSysTime
- End Sub
-
- Private Sub Form_QueryClose(Cancel As Integer, CloseMode As Integer)
- DestroyWindow dtHwnd
- End Sub
-
-
'
' Source original : (Michel Pierron) http://www.excelabo.net/trucs/ocx_optionnel
'
' Pour tester, mettre dans en bas d’une form une TextBox nommé TextBox1, et deux boutons nommés CmdSET et CmdGET.
'
'
Option Explicit
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hwndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function DestroyWindow Lib "user32" (ByVal hWnd As Long) As Long
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 Declare Sub InitCommonControls Lib "comctl32" ()
' MonthCal Messages
Private Const MCM_FIRST = &H1000
Private Const MCM_GETCURSEL = (MCM_FIRST + 1)
Private Const MCM_SETCURSEL = (MCM_FIRST + 2)
Private Const MCM_SETCOLOR = (MCM_FIRST + 10)
Private Const MCM_GETCOLOR = (MCM_FIRST + 11)
Private Const MCM_SETFIRSTDAYOFWEEK = (MCM_FIRST + 15)
Private Const MCM_GETFIRSTDAYOFWEEK = (MCM_FIRST + 16)
' MonthCal Styles
Private Const MCS_MULTISELECT = &H2
Private Const MCS_WEEKNUMBERS = &H4
Private Const MCS_NOTODAYCIRCLE = &H8
Private Const MCS_NOTODAY = &H10
' MonthCal Color
Private Const MCSC_BACKGROUND = 0 ' the background color (between months)
Private Const MCSC_TEXT = 1 ' the dates
Private Const MCSC_TITLEBK = 2 ' background of the title
Private Const MCSC_TITLETEXT = 3
Private Const MCSC_MONTHBK = 4 ' background within the month cal
Private Const MCSC_TRAILINGTEXT = 5 ' the text color of header & trailing days
Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Private dtHwnd As Long
Private Sub Form_Load()
InitCommonControls
dtHwnd = CreateWindowEx(0, "SysMonthCal32", vbNullString, &H50000000 + MCS_WEEKNUMBERS, 40, 10, 200, 200, Me.hWnd, 0&, 0&, ByVal 0&)
SendMessage dtHwnd, MCM_SETCOLOR, MCSC_BACKGROUND, ByVal &HE0E0E0
SendMessage dtHwnd, MCM_SETCOLOR, MCSC_TITLEBK, ByVal RGB(46, 210, 50)
End Sub
Private Sub CmdGET_Click()
Dim CurSysTime As SYSTEMTIME
SendMessage dtHwnd, MCM_GETCURSEL, 0&, CurSysTime
Me.TextBox1.Text = Format(DateSerial(CurSysTime.wYear, CurSysTime.wMonth, CurSysTime.wDay), "Short Date")
End Sub
Private Sub CmdSET_Click()
Dim CurSysTime As SYSTEMTIME
On Error Resume Next
CurSysTime.wYear = Year(CDate(Me.TextBox1.Text))
CurSysTime.wMonth = Month(CDate(Me.TextBox1.Text))
CurSysTime.wDay = Day(CDate(Me.TextBox1.Text))
On Error GoTo 0
SendMessage dtHwnd, MCM_SETCURSEL, 0&, CurSysTime
End Sub
Private Sub Form_QueryClose(Cancel As Integer, CloseMode As Integer)
DestroyWindow dtHwnd
End Sub
Conclusion
Pour la récupération automatique de la date sélectionnée, on pourrait prévoir une procédure de sous classement de la fenêtre dtHwnd. Personnellement, j'utilise un simple timer et la procédure suivante :
Private Sub TimerCalendar_Timer() Static Dt As String Dim CurSysTime As SYSTEMTIME Dim NewDT As String TimerCalendar = False SendMessage dtHwnd, MCM_GETCURSEL, 0&, CurSysTime NewDT = Format(DateSerial(CurSysTime.wYear, CurSysTime.wMonth, CurSysTime.wDay), "Short Date") If Dt = "" Then Dt = NewDT If Dt <> NewDT Then Me.TextBox1.Text = NewDT Dt = NewDT End If TimerCalendar = True End Sub
Historique
- 02 septembre 2010 10:23:43 :
- .
- 02 septembre 2010 10:25:25 :
- .
- 06 septembre 2010 14:27:14 :
- ajout de l'instruction InitCommonControls avant l'appel de la class SysMonthCal32 (Merci à Renfield)
- 06 septembre 2010 14:27:18 :
- ajout de l'instruction InitCommonControls avant l'appel de la class SysMonthCal32 (Merci à Renfield)
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|