So blieb nur das Handy. Ist aber sehr umständlich, weil das Display laufend abschaltet.
Hatte mein Windows Tablet dabei und versuchte dieses zu nutzen.
Eine vernünftige Uhrenanzeige, die auch ohne Brille gut lesbar ist, konnte ich aber nicht finden.
Auch ein fertiges Programm welches meine Ansprüche erfüllte fand ich auf die Schnelle nicht.
Deshalb begann ich ein eigenes Programm zu schreiben. Hier das Ergebnis .
Weil ich auch in den Foren öfters nach Lösungen sucht und meistens auch finde,
möchte ich auch anderen helfen. Vielleicht können Teile des Programms auch anderen nützlich sein.
Denn nur auf diese Weise funktionieren diese Foren.
Das Programm hat eine Analog- und Digitalanzeige und eine Terminerinnerung.
Diese Anzeigen können beliebig Ein- oder Ausgeschaltet werden.
Die Größe und Position kann geändert werden und wird gespeichert.
Zu den Einstellungen mit der rechten Maustaste auf die Uhr oder das Taskleistensymbol klicken.
Linke Maustaste auf das Taskleistensymbol, Ein- oder Ausblenden.
Die Forenbeiträge von STARGÅTE und PureLust haben mir sehr geholfen, besten Dank hierfür.
Hier noch die Dateien.
Programm
Icon
Tondatei
EXE (64Bit)
Habe die Dateiverknüpfungen aktualisiert.
Code: Alles auswählen
;**************************************************
;* Programmname: Uhr.pb *
;* Geschrieben von: Krieger Armin *
;* Erstellt am: 31.08.2016 *
;* Letzte Änderung: 07.09.2016 *
;* Funktion: Uhr mit Erinnerung anzeigen *
;* PureBasic Version: V5.42 *
;***************************************************************************************************************************
;* Benötigte Dateien: *
;* Uhr.ico -> Uhrensymbol für den SysTray (Ich verwende das Icon #266 aus der Datei 'C:\Windows\System32\shell32.dll') *
;* Uhr.wav -> Tondatei für die Erinnerung (Ich verwende eine Kopie von 'C:\Windows\Media\tada.wav') *
;***************************************************************************************************************************
;* Hilfreiche Informationen: *
;* http://www.purebasic.fr/german/viewtopic.php?f=2&t=19283&hilit=bayerische+uhr&start=10 *
;* http://www.purebasic.fr/english/viewtopic.php?f=12&t=43869 *
;* Besten Dank hierfür an STARGÅTE und PureLust *
;***************************************************************************************************************************************************************************
;* API-Funktionen: *
;* GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE) -> Fensterstil ermitteln *
;* SetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE, STYLE_NEU) -> Fensterstil neu setzen *
;* SetLayeredWindowAttributes_(WindowID(0), TRANSPARENTFARBE, TRANSPARENTWERT, #LWA_ALPHA | #LWA_COLORKEY) -> Durchsichtige Farbe festlegen und Transparenz einstellen *
;* GetAsyncKeyState_(#VK_LBUTTON) -> Prüfen ob linke Maustaste gedrückt ist *
;* LoadCursor_(0, #IDC_SIZEALL) -> Systemcursor '#IDC_SIZEALL' laden *
;* SetSystemCursor_(CURSOR_NEU, #OCR_NORMAL) -> Systemcursor '#OCR_NORMAL' ändern *
;* SystemParametersInfo_(#SPI_SETCURSORS, 0, 0, 0) -> Systemcursor zurücksetzen *
;***************************************************************************************************************************************************************************
EnableExplicit
;-* Konstanten *
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
#Durchsichtig = $006D82
#Randfarbe = $E6E6E6
#Rahmenfarbe = $D2D2D2
#HintergrundFarbe = $F5F5F5
#SchriftFarbe = $000000
#AlarmFarbe = $AAAAAA
#AlarmFarbeEin = $00FF00
#AlarmFarbeAus = $0000FF
#InfoTextFarbe = $FF0000
#StundenFarbe = $000000
#MinutenFarbe = $808080
#SekundenFarbe = $FF0000
Enumeration ;Schriften
#Schrift1
#Schrift2
#Schrift3
#Schrift4
EndEnumeration
Enumeration ;Bilder
#BildBlatt
#BildZeiger
#BildIcon
EndEnumeration
Enumeration ;Gadgets
#UhrZeiger
#InfoZeitText
#InfoZeitWert
#InfoMeldungText
#InfoMeldungWert
#InfoWeiterText
#InfoWeiterWert
#InfoSchliessen
#InfoAendern
EndEnumeration
Enumeration ;Menü
#MenueInfoEin
#MenueInfoText
#MenuePosition
#MenueGroesse
#MenueAnzAnalog
#MenueAnzDigital
#MenueAnzInfo
#MenueRand
#MenueRahmen
#MenueHintergrund
#MenueTransp_0
#MenueTransp_1
#MenueTransp_2
#MenueTransp_3
#MenueTransp_4
#MenueTransp_5
#MenueTransp_6
#MenueTransp_7
#MenueTransp_8
#MenueTransp_9
#MenueVordergrund
#MenueAnklickbar
#MenueAusblenden
#MenueBeenden
EndEnumeration
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;-* Globale Variablen anlegen *
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
OpenPreferences(GetCurrentDirectory() + "Uhr.ini")
PreferenceGroup("Abmessungen")
Global WinPosX.i = ReadPreferenceLong ("WinPosX" , 10)
Global WinPosY.i = ReadPreferenceLong ("WinPosY" , 10)
Global WinBreit.i = ReadPreferenceLong ("WinBreit" , 300)
Global WinHoch.i = ReadPreferenceLong ("WinHoch" , 460)
PreferenceGroup("Info")
Global InfoStatus.i = ReadPreferenceLong ("InfoStatus" , 0)
Global InfoZeit.s = ReadPreferenceString("InfoZeit" , "12:00")
Global InfoText.s = ReadPreferenceString("InfoText" , "-")
PreferenceGroup("Ansicht")
Global AnzeigeAnalog.i = ReadPreferenceLong ("AnzeigeAnalog" , #True)
Global AnzeigeDigital.i = ReadPreferenceLong ("AnzeigeDigital" , #True)
Global AnzeigeInfo.i = ReadPreferenceLong ("AnzeigeInfo" , #True)
Global AnzeigeRand.i = ReadPreferenceLong ("AnzeigeRand" , #True)
Global AnzeigeRahmen.i = ReadPreferenceLong ("AnzeigeRahmen" , #True)
Global AnzeigeHintergrund.i = ReadPreferenceLong ("AnzeigeHintergrund", #True)
Global AnzeigeTransparent.i = ReadPreferenceLong ("AnzeigeTransparent", #False)
PreferenceGroup("Verhalten")
Global Dauerhaft.i = ReadPreferenceLong ("Dauerhaft" , #True)
Global Anklickbar.i = ReadPreferenceLong ("Anklickbar" , #True)
Global Minimieren.i = ReadPreferenceLong ("Minimieren" , #False)
ClosePreferences()
Global ZeichenBreite.i, SchriftGroesse.i, MausStatus.i, Verschieben.i
Global UhrX.i, UhrY.i, UhrR.i, ZeitX.i, ZeitY.i
Global Schrift1.i, Schrift2.i, Schrift3.i, Schrift4.i
Global AktZeit.i = Date(), SoundStatus.i, SoundAktiv.i
Global FarbeRand = #Randfarbe
Global FarbeRahmen = #Rahmenfarbe
Global FarbeHintergrund = #HintergrundFarbe
If AnzeigeRand = #False : FarbeRand = #Durchsichtig : EndIf
If AnzeigeRahmen = #False : FarbeRahmen = #Durchsichtig : EndIf
If AnzeigeHintergrund = #False : FarbeHintergrund = #Durchsichtig : EndIf
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;Einstellungen speichern
Procedure EinstellungenSpeichern()
CreatePreferences(GetCurrentDirectory() + "Uhr.ini")
PreferenceGroup("Abmessungen")
WritePreferenceLong ("WinPosX" , WinPosX)
WritePreferenceLong ("WinPosY" , WinPosY)
WritePreferenceLong ("WinBreit" , WinBreit)
WritePreferenceLong ("WinHoch" , WinHoch)
PreferenceGroup("Info")
WritePreferenceLong ("InfoStatus" , InfoStatus)
WritePreferenceString("InfoZeit" , InfoZeit)
WritePreferenceString("InfoText" , InfoText)
PreferenceGroup("Ansicht")
WritePreferenceLong ("AnzeigeAnalog" , AnzeigeAnalog)
WritePreferenceLong ("AnzeigeDigital" , AnzeigeDigital)
WritePreferenceLong ("AnzeigeInfo" , AnzeigeInfo)
WritePreferenceLong ("AnzeigeRand" , AnzeigeRand)
WritePreferenceLong ("AnzeigeRahmen" , AnzeigeRahmen)
WritePreferenceLong ("AnzeigeHintergrund", AnzeigeHintergrund)
WritePreferenceLong ("AnzeigeTransparent", AnzeigeTransparent)
PreferenceGroup("Verhalten")
WritePreferenceLong ("Dauerhaft" , Dauerhaft)
WritePreferenceLong ("Anklickbar" , Anklickbar)
WritePreferenceLong ("Minimieren" , Minimieren)
ClosePreferences()
EndProcedure
;Unschärfe entfernen
Procedure Unschaerfe(XVon.i, XBis.i, YVon.i, YBis.i, FarbeOK.i, FarbeSetzen.i)
Protected X.i, Y.i
For X = XVon To XBis
For Y = YVon To YBis
If Point(X, Y) <> FarbeOK
Plot(X, Y, FarbeSetzen)
EndIf
Next Y
Next X
EndProcedure
;Bild erstellen und Schriftgroesse ermitteln
Procedure.i Schriftgroesse(Breit.i, Hoch.i, ZBreite.i)
Protected ID.i, Groesse.i = 4, Breite.i
If IsImage(#BildBlatt) : FreeImage(#BildBlatt) : EndIf
If CreateImage(#BildBlatt, Breit, Hoch, 24, #Durchsichtig)
Repeat
ID = LoadFont(#PB_Any, "Arial", Groesse, #PB_Font_Bold)
If StartDrawing(ImageOutput(#BildBlatt))
DrawingFont(FontID(ID))
Breite = TextWidth("00:00:00")
StopDrawing()
Else
MessageRequester("Fehler - 'Schriftgroesse ermitteln'", " Das Bild kann zum Bearbeiten nicht geöffnet werden. ", 16)
End
EndIf
FreeFont(ID)
If Breite > ZBreite
Groesse - 1
Break
Else
Groesse + 1
If Groesse > 500 : Break : EndIf
EndIf
ForEver
EndIf
If IsImage(#BildZeiger) : FreeImage(#BildZeiger) : EndIf
CreateImage(#BildZeiger, Breit, Hoch, 24, #Durchsichtig)
ProcedureReturn Groesse
EndProcedure
;Grundbild Uhr Zeichnen
Procedure UhrGrundBild(Breit.i, Hoch.i)
Protected SchriftBreite.i, SchriftHoehe.i, Winkel.i, Radius.i, PosX.i, PosY.i, Text.i
Protected AlarmX.i, AlarmY.i, AlarmA.i, AlarmS.i, Korrektur.i, X.i, Y.i
If StartDrawing(ImageOutput(#BildBlatt))
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(#SchriftFarbe)
DrawingFont(Schrift1)
SchriftBreite = TextWidth("00:00:00")
SchriftHoehe = TextHeight("00:00:00")
RoundBox(0, 0, Breit , Hoch , 20, 20, FarbeRand)
RoundBox(4, 4, Breit - 8, Hoch - 8, 18, 18, FarbeRahmen)
RoundBox(8, 8, Breit - 16, Hoch - 16, 16, 16, FarbeHintergrund)
If AnzeigeInfo = #True
AlarmX = Int((Breit - SchriftBreite) / 2)
AlarmY = Hoch - SchriftHoehe - 10
DrawingFont(Schrift1)
If (AnzeigeAnalog = #True) Or (AnzeigeDigital = #True)
Box(8, AlarmY - 6, Breit - 16, 4 , FarbeRahmen)
EndIf
DrawText (AlarmX, AlarmY, InfoZeit, #AlarmFarbe, FarbeHintergrund)
Unschaerfe(AlarmX, AlarmX + TextWidth(InfoZeit), AlarmY, AlarmY + TextHeight(InfoZeit), FarbeHintergrund, #AlarmFarbe)
AlarmA = AlarmX + TextWidth("12:00:")
DrawingFont(Schrift2)
AlarmS = AlarmY + TextHeight("12:00:")
DrawText (AlarmA, AlarmY, "Info", #AlarmFarbe, FarbeHintergrund)
Unschaerfe(AlarmA, AlarmA + TextWidth("Info"), AlarmY, AlarmY + TextHeight("Info"), FarbeHintergrund, #AlarmFarbe)
If InfoStatus = #False
DrawText (AlarmA, AlarmS, "Aus ", #AlarmFarbeAus, FarbeHintergrund)
Unschaerfe(AlarmA, AlarmA + TextWidth("Aus "), AlarmS, AlarmS + TextHeight("Aus "), FarbeHintergrund, #AlarmFarbeAus)
Else
DrawText (AlarmA, AlarmS, "Ein ", #AlarmFarbeEin, FarbeHintergrund)
Unschaerfe(AlarmA, AlarmA + TextWidth("Ein "), AlarmS, AlarmS + TextHeight("Ein "), FarbeHintergrund, #AlarmFarbeEin)
EndIf
EndIf
If AnzeigeDigital = #True
ZeitX = Int((Breit - SchriftBreite) / 2)
ZeitY = Hoch - SchriftHoehe - 10
If AnzeigeInfo = #True : ZeitY - SchriftHoehe - 8 : EndIf
If AnzeigeAnalog = #True
Box(8, ZeitY - 6, Breit - 16, 4, FarbeRahmen)
EndIf
EndIf
If AnzeigeAnalog = #True
UhrX = Int(Breit / 2)
UhrY = Int(Hoch / 2)
Korrektur = 0
If AnzeigeInfo = #True : Korrektur + SchriftHoehe + 8 : EndIf
If AnzeigeDigital = #True : Korrektur + SchriftHoehe + 8 : EndIf
If Korrektur <> 0 : UhrY - Int(Korrektur / 2) : EndIf
If UhrX < UhrY
UhrR = UhrX - 20
Else
UhrR = UhrY - 20
EndIf
DrawingFont(Schrift3)
Radius = Int(UhrR * 0.94) ;1 Minuten Punkte
For Winkel = -84 To 270 Step 6
PosX = Radius * Cos(Winkel * #PI / 180) + UhrX
PosY = Radius * Sin(Winkel * #PI / 180) + UhrY
Circle(PosX, PosY, Int(UhrR * 0.02), #SchriftFarbe)
Next
For Winkel = -60 To 270 Step 30 ;15 Minuten Striche
For Radius = Int(UhrR * 0.90) To Int(UhrR * 0.98)
PosX = Radius * Cos(Winkel * #PI / 180) + UhrX
PosY = Radius * Sin(Winkel * #PI / 180) + UhrY
Circle(PosX, PosY, Int(UhrR * 0.02), #SchriftFarbe)
Next
Radius = Int(UhrR * 0.75) ;15 Minuten Beschriftung
PosX = Radius * Cos(Winkel * #PI / 180) + UhrX
PosY = Radius * Sin(Winkel * #PI / 180) + UhrY
Text + 1
X = PosX - (TextWidth(Str(Text)) / 2)
Y = PosY - (TextHeight(Str(Text)) / 2)
DrawText(X, Y, Str(Text), #SchriftFarbe, FarbeHintergrund)
Unschaerfe(X, X + TextWidth(Str(Text)), Y, Y + TextHeight(Str(Text)), FarbeHintergrund, #SchriftFarbe)
Next
EndIf
StopDrawing()
Else
MessageRequester("Fehler - 'Grundbild Uhr Zeichnen'", " Das Bild kann zum Bearbeiten nicht geöffnet werden. ", 16)
End
EndIf
EndProcedure
;Zeitanzeige Erneuern
Procedure Zeitanzeige(ZeitWert.i)
Protected Radius.i, Laenge.i, PosZ.f, PosX.i, PosY.i
If StartDrawing(ImageOutput(#BildZeiger))
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor(#SchriftFarbe)
DrawingFont(Schrift1)
DrawImage(ImageID(#BildBlatt),0 ,0)
If AnzeigeDigital = #True
DrawText(ZeitX, ZeitY, FormatDate("%hh:%ii:%ss", ZeitWert), #SchriftFarbe, FarbeHintergrund)
Unschaerfe(ZeitX, ZeitX + TextWidth("00:00:00"), ZeitY, ZeitY + TextHeight("00:00:00"), FarbeHintergrund, #SchriftFarbe)
EndIf
If AnzeigeAnalog = #True
Radius = Int(UhrR * 0.06) ;Stundenzeiger
For Laenge = 0 To Int(UhrR * 0.50)
PosZ = Hour(ZeitWert) * 5 + Minute(ZeitWert) / 60 * 5
PosX = Sin(PosZ / 30 * #PI) * Laenge + UhrX
PosY = -Cos(PosZ / 30 * #PI) * Laenge + UhrY
Circle(PosX, PosY, Radius, #StundenFarbe)
Next
Radius = Int(UhrR * 0.04) ;Minutenzeiger
For Laenge = 0 To Int(UhrR * 0.75)
PosZ = Minute(ZeitWert)
PosX = Sin(PosZ / 30 * #PI) * Laenge + UhrX
PosY = -Cos(PosZ / 30 * #PI) * Laenge + UhrY
Circle(PosX, PosY, Radius, #MinutenFarbe)
Next
Radius = Int(UhrR * 0.01) ;Sekundenzeiger
For Laenge = Int(0 - (UhrR * 0.15)) To Int(UhrR * 0.90)
PosZ = Second(ZeitWert)
PosX = Sin(PosZ / 30 * #PI) * Laenge + UhrX
PosY = -Cos(PosZ / 30 * #PI) * Laenge + UhrY
Circle(PosX, PosY, Radius, #SekundenFarbe)
Next
EndIf
StopDrawing()
Else
MessageRequester("Fehler - 'Zeitanzeige Erneuern'", " Das Bild kann zum Bearbeiten nicht geöffnet werden. ", 16)
End
EndIf
EndProcedure
;Grundeinstellung
Procedure Grundeinstellung()
ZeichenBreite = WinBreit - 52
SchriftGroesse = Schriftgroesse (WinBreit, WinHoch, ZeichenBreite)
Schrift1 = LoadFont(#Schrift1, "Arial", SchriftGroesse, #PB_Font_Bold)
Schrift2 = LoadFont(#Schrift2, "Arial", Int(SchriftGroesse / 2))
Schrift3 = LoadFont(#Schrift3, "Arial", Int(SchriftGroesse / 3))
Schrift4 = LoadFont(#Schrift4, "Arial", 30, #PB_Font_Bold)
UhrGrundBild(WinBreit, WinHoch)
Zeitanzeige(AktZeit)
EndProcedure
;-* Programmstart *
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
SoundStatus = InitSound()
If SoundStatus <> #False
SoundStatus = CatchSound(0, ?Tondatei)
EndIf
Grundeinstellung()
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;* Hauptfenster mit Eingabeschleife *
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Define i.i, Wert.i, Event.i
Define AltMausX.i, AltMausY.i, NeuMausX.i, NeuMausY.i, BewegungX.i, BewegungY.i
Define WinVonX.i, WinBisX.i, WinVonY.i, WinBisY.i
If OpenWindow(0, WinPosX, WinPosY, WinBreit, WinHoch, "Uhr v1.0", #PB_Window_BorderLess)
SetWindowColor(0, #Durchsichtig)
HideWindow(0, #True)
For i = 0 To 9
If ((AnzeigeTransparent >> i) & 1) = #True
Wert = i * 10
Break
EndIf
Next i
SetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE, GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_LAYERED | #WS_EX_TOOLWINDOW)
SetLayeredWindowAttributes_(WindowID(0), #Durchsichtig, 255 * (100 - Wert) / 100, #LWA_ALPHA | #LWA_COLORKEY)
HideWindow(0, #False)
ImageGadget(#UhrZeiger, 0, 0, WinBreit, WinHoch, ImageID(#BildZeiger))
StickyWindow(0, Dauerhaft)
HideWindow(0, Minimieren)
AddSysTrayIcon(0, WindowID(0), CatchImage(#BildIcon, ?Icon))
If CreatePopupMenu(0) ;Popup-Menü erstellen
MenuItem(#MenueInfoEin , "Info Ein/Aus")
MenuItem(#MenueInfoText , "Info ändern")
MenuBar()
MenuItem(#MenuePosition , "Position ändern")
MenuItem(#MenueGroesse , "Größe ändern")
MenuBar()
MenuItem(#MenueAnzAnalog , "Analoganzeige")
MenuItem(#MenueAnzDigital , "Digitalanzeige")
MenuItem(#MenueAnzInfo , "Infoanzeige")
MenuBar()
MenuItem(#MenueRand , "Rand anzeigen")
MenuItem(#MenueRahmen , "Rahmen anzeigen")
MenuItem(#MenueHintergrund, "Hintergrund anzeigen")
MenuBar()
OpenSubMenu("Transparent anzeigen")
MenuItem(#MenueTransp_0, "Transparenz Aus")
MenuItem(#MenueTransp_1, "Transparenz 10%")
MenuItem(#MenueTransp_2, "Transparenz 20%")
MenuItem(#MenueTransp_3, "Transparenz 30%")
MenuItem(#MenueTransp_4, "Transparenz 40%")
MenuItem(#MenueTransp_5, "Transparenz 50%")
MenuItem(#MenueTransp_6, "Transparenz 60%")
MenuItem(#MenueTransp_7, "Transparenz 70%")
MenuItem(#MenueTransp_8, "Transparenz 80%")
MenuItem(#MenueTransp_9, "Transparenz 90%")
CloseSubMenu()
MenuBar()
MenuItem(#MenueVordergrund, "Im Vordergrund")
MenuItem(#MenueAnklickbar , "Anklickbar")
MenuItem(#MenueAusblenden , "Ausblenden")
MenuBar()
MenuItem(#MenueBeenden , "Beenden")
SetMenuItemState(0, #MenueInfoEin , InfoStatus) ;Popup-Menü Grundeinstellung
SetMenuItemState(0, #MenueAnzAnalog , AnzeigeAnalog)
SetMenuItemState(0, #MenueAnzDigital , AnzeigeDigital)
SetMenuItemState(0, #MenueAnzInfo , AnzeigeInfo)
SetMenuItemState(0, #MenueRand , AnzeigeRand)
SetMenuItemState(0, #MenueRahmen , AnzeigeRahmen)
SetMenuItemState(0, #MenueHintergrund, AnzeigeHintergrund)
SetMenuItemState(0, #MenueTransp_0 , Bool((AnzeigeTransparent >> 0) & 1))
SetMenuItemState(0, #MenueTransp_1 , Bool((AnzeigeTransparent >> 1) & 1))
SetMenuItemState(0, #MenueTransp_2 , Bool((AnzeigeTransparent >> 2) & 1))
SetMenuItemState(0, #MenueTransp_3 , Bool((AnzeigeTransparent >> 3) & 1))
SetMenuItemState(0, #MenueTransp_4 , Bool((AnzeigeTransparent >> 4) & 1))
SetMenuItemState(0, #MenueTransp_5 , Bool((AnzeigeTransparent >> 5) & 1))
SetMenuItemState(0, #MenueTransp_6 , Bool((AnzeigeTransparent >> 6) & 1))
SetMenuItemState(0, #MenueTransp_7 , Bool((AnzeigeTransparent >> 7) & 1))
SetMenuItemState(0, #MenueTransp_8 , Bool((AnzeigeTransparent >> 8) & 1))
SetMenuItemState(0, #MenueTransp_9 , Bool((AnzeigeTransparent >> 9) & 1))
SetMenuItemState(0, #MenueVordergrund, Dauerhaft)
SetMenuItemState(0, #MenueAnklickbar , Anklickbar)
SetMenuItemState(0, #MenueAusblenden , Minimieren)
EndIf
Repeat
Event = WaitWindowEvent(100)
If AktZeit <> Date() ;Zeitanzeige aktualisieren
AktZeit = Date()
Zeitanzeige(AktZeit)
SetGadgetState(#UhrZeiger, ImageID(#BildZeiger))
EndIf
If InfoStatus = #True ;Info anzeigen
If InfoZeit = FormatDate("%hh:%ii", AktZeit)
InfoStatus = #False
If OpenWindow(1, 0, 0, 965, 370, "Information anzeigen", #PB_Window_Tool | #PB_Window_ScreenCentered, 0)
SetGadgetFont(#PB_Default, Schrift4)
TextGadget (#InfoZeitText , 10, 10, 240, 58, "Zeit:")
TextGadget (#InfoZeitWert , 250, 10, 200, 58, InfoZeit)
SetGadgetColor(#InfoZeitWert , #PB_Gadget_FrontColor, #InfoTextFarbe)
TextGadget (#InfoMeldungText, 10, 75, 240, 58, "Text:")
TextGadget (#InfoMeldungWert, 250, 75, 700, 108, InfoText)
SetGadgetColor(#InfoMeldungWert, #PB_Gadget_FrontColor, #InfoTextFarbe)
TextGadget (#InfoWeiterText , 10, 190, 240, 58, "Fortfahren:")
ComboBoxGadget(#InfoWeiterWert , 250, 190, 700, 58)
AddGadgetItem (#InfoWeiterWert , 0, "Keine Wiederholung, Info beenden")
AddGadgetItem (#InfoWeiterWert , 1, "In 5 Minuten wiederholen")
AddGadgetItem (#InfoWeiterWert , 2, "In 10 Minuten wiederholen")
AddGadgetItem (#InfoWeiterWert , 3, "In 15 Minuten wiederholen")
AddGadgetItem (#InfoWeiterWert , 4, "In 30 Minuten wiederholen")
SetGadgetState(#InfoWeiterWert , 0)
ButtonGadget (#InfoSchliessen , 300, 290, 365, 70, "Übernehmen")
StickyWindow(1, #True)
SoundAktiv = #True
EndIf
EndIf
EndIf
If (SoundAktiv > #False) And (SoundStatus <> #False) ;Infoton abspielen
If Mod(Second(AktZeit), 30) = 0
If SoundAktiv = #True
PlaySound(0, #PB_Sound_MultiChannel, 80)
SoundAktiv = 2
EndIf
Else
SoundAktiv = #True
EndIf
EndIf
If Verschieben <> #False ;Fenster verschieben oder Größe ändern
AltMausX = NeuMausX
AltMausY = NeuMausY
NeuMausX = DesktopMouseX()
NeuMausY = DesktopMouseY()
BewegungX = AltMausX - NeuMausX
BewegungY = AltMausY - NeuMausY
WinVonX = WindowX(0)
WinBisX = WinVonX + WindowWidth(0)
WinVonY = WindowY(0)
WinBisY = WinVonY + WindowHeight(0)
If GetAsyncKeyState_(#VK_LBUTTON) ;Linke Maustaste drücken
If (NeuMausX > WinVonX) And (NeuMausX < WinBisX) And (NeuMausY > WinVonY) And (NeuMausY < WinBisY)
MausStatus + 1
If Verschieben = #True ;Fenster verschieben
ResizeWindow(0, WinVonX - BewegungX, WinVonY - BewegungY, #PB_Ignore, #PB_Ignore)
Else ;Fenster Größe ändern
WinBreit = WindowWidth(0) - BewegungX
WinHoch = WindowHeight(0) - BewegungY
ResizeWindow(0, #PB_Ignore, #PB_Ignore, WinBreit, WinHoch)
Grundeinstellung()
EndIf
EndIf
Else ;Linke Maustaste loslassen
If MausStatus > 3
MausStatus = #False
Verschieben = #False
SystemParametersInfo_(#SPI_SETCURSORS, 0, 0, 0)
WinPosX = WindowX(0)
WinPosY = WindowY(0)
WinBreit = WindowWidth(0)
WinHoch = WindowHeight(0)
EinstellungenSpeichern()
ResizeWindow(0, WinPosX, WinPosY, WinBreit, WinHoch)
Grundeinstellung()
EndIf
EndIf
Else ;Standardabfragen
Select Event
Case #PB_Event_Gadget
Select EventGadget()
Case #UhrZeiger ;Popup-Menü anzeigen
If EventType() = #PB_EventType_RightClick
DisplayPopupMenu(0, WindowID(0))
EndIf
Case #InfoSchliessen ;Info Anzeige wurde geschlossen
Select GetGadgetState(#InfoWeiterWert)
Case 1 : InfoStatus = #True : InfoZeit = FormatDate("%hh:%ii", AddDate(AktZeit, #PB_Date_Minute, 5))
Case 2 : InfoStatus = #True : InfoZeit = FormatDate("%hh:%ii", AddDate(AktZeit, #PB_Date_Minute, 10))
Case 3 : InfoStatus = #True : InfoZeit = FormatDate("%hh:%ii", AddDate(AktZeit, #PB_Date_Minute, 15))
Case 4 : InfoStatus = #True : InfoZeit = FormatDate("%hh:%ii", AddDate(AktZeit, #PB_Date_Minute, 30))
EndSelect
CloseWindow(1)
SoundAktiv = #False
SetMenuItemState(0, #MenueInfoEin, InfoStatus)
EinstellungenSpeichern()
Grundeinstellung()
Case #InfoAendern ;Info Änderung wurde geschlossen
InfoStatus = #True
InfoZeit = GetGadgetText(#InfoZeitWert)
InfoText = GetGadgetText(#InfoMeldungWert)
InfoText = ReplaceString(InfoText, #CRLF$, ", ")
CloseWindow(1)
SetMenuItemState(0, #MenueInfoEin, InfoStatus)
EinstellungenSpeichern()
Grundeinstellung()
EndSelect
Case #PB_Event_Menu
Select EventMenu()
Case #MenueBeenden ;Programm schliessen
Break
Case #MenueInfoEin ;Info Ein/Aus
InfoStatus = Bool(Not InfoStatus)
SetMenuItemState(0, #MenueInfoEin, InfoStatus)
EinstellungenSpeichern()
Grundeinstellung()
Case #MenueInfoText ;Info Text ändern
If OpenWindow(1, 0, 0, 835, 305, "Information ändern", #PB_Window_Tool | #PB_Window_ScreenCentered, 0)
SetGadgetFont(#PB_Default, Schrift4)
TextGadget (#InfoZeitText , 10, 10, 110, 58, "Zeit:")
DateGadget (#InfoZeitWert , 120, 10, 200, 58, "%hh:%ii", ParseDate("%hh:%ii", InfoZeit), #PB_Date_UpDown)
SetGadgetColor(#InfoZeitWert , #PB_Gadget_FrontColor, #InfoTextFarbe)
TextGadget (#InfoMeldungText , 10, 75, 110, 58, "Text:")
EditorGadget (#InfoMeldungWert , 120, 75, 700, 108, #PB_Editor_WordWrap)
SetGadgetText (#InfoMeldungWert , InfoText)
SetGadgetColor(#InfoMeldungWert , #PB_Gadget_FrontColor, #InfoTextFarbe)
ButtonGadget (#InfoAendern , 235, 225, 365, 70, "Übernehmen")
StickyWindow(1, #True)
EndIf
Case #MenuePosition ;Fenster Position ändern
Verschieben = #True
NeuMausX = DesktopMouseX()
NeuMausY = DesktopMouseY()
SetSystemCursor_(LoadCursor_(0, #IDC_SIZEALL), #OCR_NORMAL)
Case #MenueGroesse ;Fenster Größe ändern
Verschieben = 2
NeuMausX = DesktopMouseX()
NeuMausY = DesktopMouseY()
SetSystemCursor_(LoadCursor_(0, #IDC_SIZEALL), #OCR_NORMAL)
Case #MenueAnzAnalog ;Analoganzeige Ein/Aus
AnzeigeAnalog = Bool(Not AnzeigeAnalog)
SetMenuItemState(0, #MenueAnzAnalog, AnzeigeAnalog)
EinstellungenSpeichern()
Grundeinstellung()
Case #MenueAnzDigital ;Digitalanzeige Ein/Aus
AnzeigeDigital = Bool(Not AnzeigeDigital)
SetMenuItemState(0, #MenueAnzDigital, AnzeigeDigital)
EinstellungenSpeichern()
Grundeinstellung()
Case #MenueAnzInfo ;Infoanzeige Ein/Aus
AnzeigeInfo = Bool(Not AnzeigeInfo)
SetMenuItemState(0, #MenueAnzInfo, AnzeigeInfo)
EinstellungenSpeichern()
Grundeinstellung()
Case #MenueRand ;Rand durchsichtig Ein/Aus
AnzeigeRand = Bool(Not AnzeigeRand)
SetMenuItemState(0, #MenueRand, AnzeigeRand)
EinstellungenSpeichern()
If AnzeigeRand = #False
FarbeRand = #Durchsichtig
Else
FarbeRand = #Randfarbe
EndIf
Grundeinstellung()
Case #MenueRahmen ;Rahmen durchsichtig Ein/Aus
AnzeigeRahmen = Bool(Not AnzeigeRahmen)
SetMenuItemState(0, #MenueRahmen, AnzeigeRahmen)
EinstellungenSpeichern()
If AnzeigeRahmen = #False
FarbeRahmen = #Durchsichtig
Else
FarbeRahmen = #Rahmenfarbe
EndIf
Grundeinstellung()
Case #MenueHintergrund ;Hintergrund durchsichtig Ein/Aus
AnzeigeHintergrund = Bool(Not AnzeigeHintergrund)
SetMenuItemState(0, #MenueHintergrund, AnzeigeHintergrund)
EinstellungenSpeichern()
If AnzeigeHintergrund = #False
FarbeHintergrund = #Durchsichtig
Else
FarbeHintergrund = #HintergrundFarbe
EndIf
Grundeinstellung()
Case #MenueTransp_0 To #MenueTransp_9 ;Fenster Transparent anzeigen
Select EventMenu()
Case #MenueTransp_0 : AnzeigeTransparent = 1 : Wert = 0
Case #MenueTransp_1 : AnzeigeTransparent = 2 : Wert = 10
Case #MenueTransp_2 : AnzeigeTransparent = 4 : Wert = 20
Case #MenueTransp_3 : AnzeigeTransparent = 8 : Wert = 30
Case #MenueTransp_4 : AnzeigeTransparent = 16 : Wert = 40
Case #MenueTransp_5 : AnzeigeTransparent = 32 : Wert = 50
Case #MenueTransp_6 : AnzeigeTransparent = 64 : Wert = 60
Case #MenueTransp_7 : AnzeigeTransparent = 128 : Wert = 70
Case #MenueTransp_8 : AnzeigeTransparent = 256 : Wert = 80
Case #MenueTransp_9 : AnzeigeTransparent = 512 : Wert = 90
EndSelect
SetMenuItemState(0, #MenueTransp_0, Bool((AnzeigeTransparent >> 0) & 1))
SetMenuItemState(0, #MenueTransp_1, Bool((AnzeigeTransparent >> 1) & 1))
SetMenuItemState(0, #MenueTransp_2, Bool((AnzeigeTransparent >> 2) & 1))
SetMenuItemState(0, #MenueTransp_3, Bool((AnzeigeTransparent >> 3) & 1))
SetMenuItemState(0, #MenueTransp_4, Bool((AnzeigeTransparent >> 4) & 1))
SetMenuItemState(0, #MenueTransp_5, Bool((AnzeigeTransparent >> 5) & 1))
SetMenuItemState(0, #MenueTransp_6, Bool((AnzeigeTransparent >> 6) & 1))
SetMenuItemState(0, #MenueTransp_7, Bool((AnzeigeTransparent >> 7) & 1))
SetMenuItemState(0, #MenueTransp_8, Bool((AnzeigeTransparent >> 8) & 1))
SetMenuItemState(0, #MenueTransp_9, Bool((AnzeigeTransparent >> 9) & 1))
EinstellungenSpeichern()
SetLayeredWindowAttributes_(WindowID(0), #Durchsichtig, 255 * (100 - Wert) / 100, #LWA_ALPHA | #LWA_COLORKEY)
Case #MenueVordergrund ;Fenster im Vordergrund halten
Dauerhaft = Bool(Not Dauerhaft)
SetMenuItemState(0, #MenueVordergrund, Dauerhaft)
EinstellungenSpeichern()
StickyWindow(0, Dauerhaft)
Case #MenueAnklickbar ;Fenster Anklickbar
Anklickbar = Bool(Not Anklickbar)
SetMenuItemState(0, #MenueAnklickbar, Anklickbar)
EinstellungenSpeichern()
If Anklickbar = #False
SetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE, GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE) | #WS_EX_TRANSPARENT)
Else
SetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE, GetWindowLongPtr_(WindowID(0), #GWL_EXSTYLE) & ~#WS_EX_TRANSPARENT)
EndIf
Case #MenueAusblenden ;Fenster Minimieren
Minimieren = Bool(Not Minimieren)
SetMenuItemState(0, #MenueAusblenden, Minimieren)
EinstellungenSpeichern()
HideWindow(0, Minimieren)
EndSelect
Case #PB_Event_SysTray
Select EventType()
Case #PB_EventType_LeftClick ;Fenster Minimieren
Minimieren = Bool(Not Minimieren)
SetMenuItemState(0, #MenueAusblenden, Minimieren)
EinstellungenSpeichern()
HideWindow(0, Minimieren)
Case #PB_EventType_RightClick ;Popup-Menü anzeigen
DisplayPopupMenu(0, WindowID(0))
EndSelect
EndSelect
EndIf
ForEver
EndIf
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;-* Programmende *
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
FreeFont (#PB_All)
FreeImage(#PB_All)
FreeSound(#PB_All)
End
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
;-* Dateien *
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
DataSection
Tondatei:
IncludeBinary "Uhr.wav"
Icon:
IncludeBinary "Uhr.ico"
EndDataSection
;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<