![]() |
Tipp 0540
|
Aktuelles Datum im MonthView neu setzen
|
 |
|
Autor/Einsender: Datum: |
|
Detlev Schubert 26.02.2008 |
|
Entwicklungsumgebung: |
|
VB 6 |
|
|
Mit dem MonthView-Steuerelement aus den Microsoft Windows
Common Controls 2, 6.0 lässt sich das Systemdatum sehr
einfach und vor allem komfortabel aus einer Anwendung heraus neu
setzen, da man lediglich einen Mausklick und nur eine einzige Zeile
Code benötigt: |
|
|
Allerdings lässt sich die Anzeige "Heutiger Tag" sowie die
Markierung (in der Regel ein roter Kringel) des aktuellen Tages ohne
ein Neuladen der Form mit VB-Bordmitteln nicht ändern, da es keine
ToDay-Eigenschaft und somit keine direkte Kontrolle gibt, dass das
System-Datum auch entsprechend verändert wurde. Auch ein Neusetzen
der Value-Eigenschaft, oder ein Refresh führen nicht zum
gewünschten Ergebnis. Hier hilft also nur ein tiefer Griff in die
API-Trickkiste und zur Universalfunktion SendMessage.
|
In diesem Fall allerdings erwartet SendMessage nicht nur eine
Struktur, sondern auch zwei Konstanten, die im Visual Basic
API-Katalog nicht enthalten sind. In diesem Beispiel wird das Setzen
des aktuellen Tages über einen Command-Button gesteuert, um
zusätzlich noch aufzuzeigen wie ein Bug des Controls umgangen werden
kann.
|
|
Code im Codebereich des Moduls |
|
|
Option Explicit
Public Const MCM_FIRST As Long = &H1000&
Public Const MCM_SETTODAY As Long = (MCM_FIRST + 12)
Public 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
Public Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As Any) As Long
Public Function SetToday(ByVal hwnd As Long, Data As SYSTEMTIME) _
As Long
SetToday = SendMessage(hwnd, MCM_SETTODAY, 0&, Data)
End Function
|
|
|
Code im Codebereich der Form |
|
|
Option Explicit
Private Sub Command1_Click()
Dim Data As SYSTEMTIME
'MonthView-Daten an die Struktur übergeben
With Data
.wDay = MonthView1.Day
.wMonth = MonthView1.Month
.wYear = MonthView1.Year
End With
SetToday MonthView1.hwnd, Data
Command1.Enabled = False
' System-Datum setzen
' Date = MonthView1.Value
End Sub
Private Sub Form_Load()
' Aktuelles Datum setzen
MonthView1.Value = Date
End Sub
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
'MonthView Click-Bug umgehen
With Command1
.Enabled = True
.SetFocus
End With
End Sub
|
|
|
|
|
|
Um diesen Tipp ausführen zu können, muss die Komponente Microsoft
Windows Common Controls 2, 6.0 in das Projekt eingebunden werden.
|
|
Windows-Version |
95 |
 |
|
98 |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
VB-Version |
VBA 5 |
 |
|
VBA 6 |
 |
|
VB 4/16 |
 |
|
VB 4/32 |
 |
|
VB 5 |
 |
|
VB 6 |
 |
|
|
|
Download (3,7
kB)
|
Downloads bisher: [ 402 ]
|
|
|