;************************************************** ;* 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 ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< ; IDE Options = PureBasic 5.42 LTS (Windows - x64) ; Folding = AAi ; EnableUnicode ; EnableXP ; UseIcon = Uhr.ico ; Executable = Uhr.exe