Datepicker mit größeren Buchstaben

Anfängerfragen zum Programmieren mit PureBasic.
bin_neu_hier
Beiträge: 105
Registriert: 06.03.2019 21:52

Datepicker mit größeren Buchstaben

Beitrag von bin_neu_hier »

Hallo Leute,

leider muss ich (nicht mehr der Allerjüngste) feststellen, dass mir die Schrift für einige Anzeigen zu mickrig ist und ich da schon mehr und mehr Schwierigkeiten bekomme. Beispielsweise bei den Mesagerequestern, Calender- und Dategadget.

In meinem kleinen Projekt (kleine Softwaretools) für einen Bekannten, der es noch schwerer mit den Augen hat, sind das noch viel schwerwiegendere Probleme. Ich habe hier so einen Datepicker zusammengenagelt, mehr oder weniger alles per Copy&Paste zusammengesetzt (nein, ich schäme mich nicht dafür), der zwar läuft, aber mit dem ich doch nicht so zufrieden bin.

Code: Alles auswählen


Enumeration
  #hauptfenster
  #zeichensatz
EndEnumeration



Procedure datepicker(pdatumgadget)
  tt = Val(StringField(GetGadgetText(pdatumgadget), 1, "."))
  mm = Val(StringField(GetGadgetText(pdatumgadget), 2, "."))
  yy = Val(StringField(GetGadgetText(pdatumgadget), 3, "."))
  pmainwindow = GetActiveWindow()
  DisableWindow(pmainwindow, #True)
  cw = OpenWindow(#PB_Any, 0, 0, 200, 240, "Datum auswählen", #PB_Window_WindowCentered, WindowID(pmainwindow))
  SetWindowColor(cw, RGB(255,255,255))
  fontnum = LoadFont(#PB_Any, "Arial", 12)
  SetGadgetFont(#PB_Default, FontID(fontnum))
  cg = CalendarGadget(#PB_Any, 0, 0, 200, 200)
  SetGadgetAttribute(cg, #PB_Calendar_Minimum, Date(1970,1,1,0,0,0))
  SetGadgetAttribute(cg, #PB_Calendar_Maximum, Date(2037,12,31,0,0,0))
  SetWindowTheme_(GadgetID(cg), @"", @"")
  SendMessage_(GadgetID(cg), #MCM_SETCOLOR, #MCSC_TITLEBK, RGB( 51, 170, 255))
  SetWindowLongPtr_(GadgetID(cg), #GWL_EXSTYLE, GetWindowLongPtr_(GadgetID(cg), #GWL_EXSTYLE) &(~#WS_EX_CLIENTEDGE))
  SetWindowPos_(GadgetID(cg), 0, 0, 0, 0, 0, #SWP_SHOWWINDOW | #SWP_NOZORDER | #SWP_NOSIZE | #SWP_NOMOVE | #SWP_FRAMECHANGED)
  SetGadgetState(cg, Date(yy,mm,tt,0,0,0))
  SetGadgetColor(cg, #PB_Gadget_BackColor, RGB(255,255,255)) ;Hintergrundfarbe
  SetGadgetColor(cg, #PB_Gadget_FrontColor, RGB(  0,  0,  0)) ;Textfarbe für angezeigte Tage
  SetGadgetColor(cg, #PB_Gadget_TitleBackColor, RGB( 51,204,102)) ;Hintergrundfarbe für den Monatstitel
  SetGadgetColor(cg, #PB_Gadget_TitleFrontColor, RGB(  0,  0,  0)) ;Textfarbe für den Monatstitel
  SetGadgetColor(cg, #PB_Gadget_GrayTextColor, RGB( 190, 190, 190))   ; Textfarbe für Tage, welche nicht im aktuellen Monat liegen
  
  bga = ButtonGadget(#PB_Any,0,215,100,25,"abbrechen")
  bgo = ButtonGadget(#PB_Any,100,215,100,25,"übernehmen")
  datum = 0
  Repeat
    Event = WaitWindowEvent()
    If EventWindow() = cw
      If Event = #PB_Event_Gadget
        If EventGadget() = bgo
          datum = GetGadgetState(cg)
          Break
        EndIf
        If EventGadget() = bga
          datum = 0
          Break
        EndIf
      EndIf
    EndIf
  ForEver
  CloseWindow(cw)
  DisableWindow(pmainwindow, #False)
  If datum <> 0
    SetGadgetText(pdatumgadget, FormatDate("%dd.%mm.%yyyy",datum))
  EndIf
  
EndProcedure



If OpenWindow(#hauptfenster, 0, 0, 300, 300, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
  If LoadFont(#zeichensatz, "Arial", 11) : SetGadgetFont(#PB_Default, FontID(#zeichensatz)) : EndIf
  
  tg = TextGadget(#PB_Any, 15, 15, 122, 24, "01.12.2000", #PB_Text_Center | #WS_BORDER  )
  SetGadgetColor(tg, #PB_Gadget_BackColor, $FFFFFF)
  SetGadgetColor(tg, #PB_Gadget_FrontColor, $000000)
  SetWindowLongPtr_(GadgetID(tg), #GWL_STYLE, GetWindowLongPtr_(GadgetID(tg), #GWL_STYLE) | #SS_NOTIFY)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case tg
            datepicker(tg)
            
        EndSelect
        
      Case #PB_Event_CloseWindow
        End
        
    EndSelect
  ForEver
EndIf
End
Das mit den Farben ist suboptimal, vor allem, dass man die Wochentage nicht separat einfärben kann - jedenfalls ich kann das nicht. Weiß da jemand Rat?

Natürlich gibt es da bestimmt eine ganze Menge zu optimieren und mit sehr hoher Wahrscheinlichkeit habe ich das Rad neu erfunden und es gibt schon tausende Datepickers dieser Art - natürlich bessere! Vielleicht kann da ja jemand hier Verbesserungen vorschlagen.
Bin mit 21 erstmals mit Computern in Kontakt gekommen und konnte mich daher in meiner Jugend ganz auf den Alkohol konzentrieren. Bin nun seit fast 40 Jahren programmiertechnisch konstant auf Anfänger-Level, konnte jedoch beim Thema Alkohol eine gewisse Virtuosität erreichen.
Irgendwas muss man ja gut können.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Datepicker mit größeren Buchstaben

Beitrag von RSBasic »

Bezüglich der Größe: Du musst nicht manuell die Größe der einzelnen Controls ändern. Dafür gibt es von Windows die DPI-Einstellung, die dafür sorgt, dass alle Texte gleichmäßig in der gewünschten Größe skaliert werden. Hast du damit schon versucht?
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten