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:
 
Date = MonthView1.Value
 
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
 
Weitere Links zum Thema
BUG: MonthView Control verhindert CommandButton Click Ereignis
Hinweis
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: [ 408 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Dienstag, 22. Februar 2011