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
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.