Dategadget Kalender gößer darstellen

Anfängerfragen zum Programmieren mit PureBasic.
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Dategadget Kalender gößer darstellen

Beitrag von gnaps »

Hallo Forum,

gibt es eine Möglichkeit die Tage im Kalender größer anzeigen zu lassen.

Schreibe ein Programm für meine Frau die hat eine TouchDisplay und Sie trifft die Tage
nur schlecht. Desshalb größere Zahlen.

Gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Dategadget Kalender gößer darstellen

Beitrag von RSBasic »

Am sinnvollsten ist es, wenn du die DPI-Einstellung deines Monitors unter Windows erhöhst, dann werden nicht nur die Tage vom DateGadget, sondern alle anderen Gadgets ebenfalls größer dargestellt.
Oder möchtest du wirklich nur die Tage größer darstellen?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: Dategadget Kalender gößer darstellen

Beitrag von gnaps »

HI RSBasic,

ja, nur die Tage größer,

meine Buttons haben schon 50x50Pixel und der rest ist auch schon größer,
nur die Tage sind zu klein.

gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Dategadget Kalender gößer darstellen

Beitrag von RSBasic »

Code: Alles auswählen

EnableExplicit

LoadFont(1, "Segoe UI", 15)

Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
  Protected *NMDATETIMECHANGE.NMDATETIMECHANGE
  Protected Handle_DropDown
  Protected Handle_SysMonthCal32
  
  Select uMsg
    Case #WM_NOTIFY
      *NMDATETIMECHANGE = lParam
      
      Select *NMDATETIMECHANGE\nmhdr\hwndfrom
        Case GadgetID(0)
          If *NMDATETIMECHANGE\nmhdr\code = #DTN_DROPDOWN
            Handle_DropDown = FindWindow_("DropDown", 0)
            Handle_SysMonthCal32 = FindWindowEx_(Handle_DropDown, #Null, "SysMonthCal32", #Null)
            If Handle_SysMonthCal32
              SetWindowTheme_(Handle_SysMonthCal32, @"", @"")
              SendMessage_(Handle_SysMonthCal32, #WM_SETFONT, FontID(1), 0)
              SetWindowPos_(Handle_DropDown, 0, 0, 0, 250, 300, #SWP_SHOWWINDOW | #SWP_NOZORDER | #SWP_NOMOVE | #SWP_FRAMECHANGED)
            EndIf
          EndIf
      EndSelect
      
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  DateGadget(0, 10, 10, 300, 20, "%dd.%mm.%yyyy", Date())
  
  SetWindowCallback(@WindowCallback())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: Dategadget Kalender gößer darstellen

Beitrag von gnaps »

Hi RSBasic,

das sieht ja gut aus.
Leider verstehe ich den Code nicht.

ich habe mindestens 10 verschieden Dategadgets für verschiedene Datumswerte, kann man den Code den du geschrieben hast global
für jedes Dategadget einsetzen.

gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Dategadget Kalender gößer darstellen

Beitrag von RSBasic »

Hallo gnaps,
gnaps hat geschrieben:Leider verstehe ich den Code nicht.
Die von mir verwendeten Funktionen sind nicht von PB, sondern von Windows. Das nennt man auch WinAPIs. WinAPI-Funktionen sind von Windows bereitgestellten Funktionen, die jeder Programmierer benutzen kann.
Mit WinAPI kannst du deutlich viel mehr machen, als mit PB.
In meinem Code erstelle ich eine Callback-Prozedur basierend auf das Nachrichtensystem von Windows. Zuerst ermittle ich, wann der Kalender ausgeklappt wurde. Anschließend ermittle ich die jeweilige Handle-Nummer. Handle-Nummer ist sowas wie die ID in PB, nur eine von Windows verwaltete ID.
Mit Hilfe der Handle-Nummer kann ich die Schriftart und -größe mit SendMessage_() und #WM_SETFONT verändern. Da die Tage nach der Änderung mehr Platz benötigen, muss ich das Kalenderfenster mit SetWindowPos_() nachträglich vergrößern.
Ich hoffe, das reicht als Erklärung.
gnaps hat geschrieben:ich habe mindestens 10 verschieden Dategadgets für verschiedene Datumswerte, kann man den Code den du geschrieben hast global für jedes Dategadget einsetzen.
Ja, kann man. Hier für dich:

Code: Alles auswählen

EnableExplicit

LoadFont(1, "Segoe UI", 15)

Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
  Protected *NMDATETIMECHANGE.NMDATETIMECHANGE
  Protected Handle_DropDown
  Protected Handle_SysMonthCal32
  Protected ClassName$ = Space(1024)
  
  Select uMsg
    Case #WM_NOTIFY
      *NMDATETIMECHANGE = lParam
      
      If *NMDATETIMECHANGE\nmhdr\hwndfrom
        GetClassName_(*NMDATETIMECHANGE\nmhdr\hwndfrom, @ClassName$, Len(ClassName$))
        If ClassName$ = "SysDateTimePick32"
          If *NMDATETIMECHANGE\nmhdr\code = #DTN_DROPDOWN
            Handle_DropDown = FindWindow_("DropDown", 0)
            Handle_SysMonthCal32 = FindWindowEx_(Handle_DropDown, #Null, "SysMonthCal32", #Null)
            If Handle_SysMonthCal32
              SetWindowTheme_(Handle_SysMonthCal32, @"", @"")
              SendMessage_(Handle_SysMonthCal32, #WM_SETFONT, FontID(1), 0)
              SetWindowPos_(Handle_DropDown, 0, 0, 0, 250, 300, #SWP_SHOWWINDOW | #SWP_NOZORDER | #SWP_NOMOVE | #SWP_FRAMECHANGED)
            EndIf
          EndIf
        EndIf
      EndIf
      
  EndSelect
  
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  DateGadget(0, 10, 10, 300, 20, "%dd.%mm.%yyyy", Date())
  DateGadget(1, 10, 40, 300, 20, "%dd/%mm/%yyyy", Date())
  DateGadget(2, 10, 70, 300, 20, "%yyyy", Date())
  
  SetWindowCallback(@WindowCallback())
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: Dategadget Kalender gößer darstellen

Beitrag von gnaps »

Hi RSBasic,

APIs sind mir bekannt, jedoch eine fremde Ebene.
Ich werde mich mal einarbeiten.

jetzt noch eine dumme Frage, wie bekomme ich mein ausgewähltes datum in eine Variable.

gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Dategadget Kalender gößer darstellen

Beitrag von RSBasic »

Mit GetGadgetState() und mit FormatDate() kannst du den Datumswert in ein Datumstext ausgeben.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: Dategadget Kalender gößer darstellen

Beitrag von gnaps »

Hi RsBasic,

danke bin gerade selber darauf gekommen, dennoch vielen dank dafür.

gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
gnaps
Beiträge: 151
Registriert: 02.09.2008 13:02

Re: Dategadget Kalender gößer darstellen

Beitrag von gnaps »

Hi RSBasic,

ich weis ich nerve, aber ich brauche das unbedingt.
Mein Code ist jetzt schon über 17000 Zeilen, und das mit dem Datum
will ich meiner Gattin doch nun wirklich bereitstellen.

ich habe verschiedene Fenster mit jeweils einer Liste diese Liste wird mit dem Datum von bis geladen.

Wie mache ich das jetzt mit dem DateGadget in verschiedenen Fenstern.

Gruß
gnaps
PureBasic Vollversion V 5.71 für Windows - Windows 10 (64)
Antworten