Einzelnen Beitrag anzeigen

hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#1

DateTimePicker, Kalenderwoche, Vista, falsche Darstellung

  Alt 28. Jul 2008, 17:10
Hallo #,

mit folgendem Code (aufgerufen im OnDropDown)
kann zur Laufzeit bei einem DateTime Picker
links die Kalenderwoche zusätzlich angezeigt werden.



Delphi-Quellcode:
{
name:
  DTP_AddWeekNumber
usage:
  to add a week number column to the calendar
parameter:
  theDTP
return parameter:
return:
notes:
  - method mustbe called in OnDropDown
dunit: no
}

procedure DTP_AddWeekNumber(theDTP: TDateTimePicker);
const
  MCM_GETMAXTODAYWIDTH = MCM_FIRST + 21;
var
  Style: LongInt;
  hDTP: THandle;

  r: TRect;
  intTodayWidth: Integer;
begin
// Notlösung unter Vista
// if IsWindowsVista then Exit;
  
  {to get a handle of calendar}
  hDTP := DateTime_GetMonthCal(theDTP.Handle);

  {change a style}
  Style := GetWindowLong(hDTP, GWL_STYLE);
  SetWindowLong(hDTP, GWL_STYLE, Style or MCS_WEEKNUMBERS);

  {now we must change the width for calendar because week numbers shifted all strings}
  {1. to get the required rect }
  r := Rect(0, 0, 0, 0);
  SendMessage(hDTP, MCM_GETMINREQRECT, 0, Longint(@r));

  {2. to get the maximum width of the "today" string}
  intTodayWidth := SendMessage(hDTP, MCM_GETMAXTODAYWIDTH, 0, 0);

  {3. adjust rect width to fit the "today" string }
  if intTodayWidth > r.Right then
    r.Right := intTodayWidth;

  {4. to set new the height and width }
  SetWindowPos(hDTP, 0,
              r.Left, r.Top, r.Right-r.Left, r.Bottom-r.Top,
              SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOZORDER);
end; { DTP_AddWeekNumber }
Unter Vista wird aber der Sonntag nicht mehr komplett angezeigt ;(

Hat jemand die KW-Anzeige unter Vista schon zum Laufen bekommen ?
Meine "Notlösung": unter Vista nicht anzeigen ;(


Heiko
Heiko
  Mit Zitat antworten Zitat