Programm zum Anzeigen der Uhrzeit

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
berie
Beiträge: 75
Registriert: 17.01.2018 08:52
Computerausstattung: Windows 11 64 bit, i7, 16GB RAM
Wohnort: Wesertal in Nordhessen

Programm zum Anzeigen der Uhrzeit

Beitrag von berie »

Hallo,
ich hatte Zeit und habe ein Programm geschrieben, das die Uhrzeit grafisch anzeigt.
Der praktische Nutzen geht gegen Null, ich habe es aus Langeweile geschrieben und wollte es euch nicht vorenthalten.
(Endlich kann man auch längere Quelltexte einstellen, ohne das Forum zu sprengen) :D

Im Anzeigemenu kann man verschieden Uhren einstellen:
-Arabisch : Analoguhr mit arabischen Ziffern
-Römisch : Analoguhr mit römischen Ziffern
-Digital : Uhrzeit als Text
-24 Stunden : Eine Uhr nur mit Stundenzeiger, sowas gibt es tatsächlich als Armbanduhr z.B. hier zu kaufen:
https://www.amazon.de/24-stunden-uhr/s?k=24+stunden+uhr (soll keine Werbung sein, ich habe nur keinen Wikipedia-Eintrag gefunden).
-Binär : zeigt die Zeit binär an (mit "Leuchtdioden")
-Berliner Uhr : Infos gibt es hier: https://de.wikipedia.org/wiki/Berlin-Uhr ,gibt es auch zu kaufen.
Ich wußte nicht, das es sowas gibt, gesehen habe ich die Berliner Uhr im TV in der Sendung "Berlin - Schicksalsjahre einer Stadt 1975".

Im Alarmmenu kann eine Alarmzeit eingestellt werden, das Programm spielt dann einen (vorher eingestellten) WAV.-FLAC.- oder OGG.-Sound ab. (also die Sound-Formate welche PB unterstützt)

Die Einstelleungen werden in AppData/Roaming gespeichert.


P.S.
Diese vielen roten Wellenlinien beim Eingeben des Textes sollen wohl eine Rechtschreibprüfung sein.
Wie kann man die Ausschalten oder auf Deutsch umstellen ?
Weiss das jemand ?

P.P.S.
Das kann grafisch noch was aufgepoppt werden...

Code: Alles auswählen

EnableExplicit

#WinW=300
#WinH=240
#WinTitle="Analoguhr"

;-Init
InitSound()

;-Enum
Enumeration
  #Ziffernblatt
  #Arabisch1
  #RoemischI
  #Digital
  #VierundzwanzigStunden
  #Binaer
  #BerlinUhr
EndEnumeration

Enumeration 1
  #Canvas
EndEnumeration

;-Const

;-Structure
Structure sAlarm
  Stunde.i
  Minute.i
  Ton.i
  Ein.i
  Name.s
EndStructure

;-Global
Global event.l,mx=#WinW/2,my=#WinH/2,uhr,sticky,wx,wy
Global prefs.s=GetUserDirectory(#PB_Directory_ProgramData)+"Analoguhr.prefs"
Global Alarm.sAlarm

;-Use
UseOGGSoundDecoder()
UseFLACSoundDecoder()

;-Define

;-Declare

;-Include

;-Macro

Procedure InitGui()
  ExamineDesktops()
  
  OpenPreferences(prefs)
  wx=ReadPreferenceInteger("Xpos",(DesktopWidth(0)-#WinW)/2)
  wy=ReadPreferenceInteger("Ypos",(DesktopHeight(0)-#WinH)/2+50)
  uhr=ReadPreferenceInteger("Uhr",#Arabisch1)
  sticky=ReadPreferenceInteger("Sticky",#True)
  Alarm\Name=ReadPreferenceString("Alarmtonname","")
  ClosePreferences()

  If OpenWindow(1,wx,wy,#WinW,#WinH,#WinTitle,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget)=0:End:EndIf 
  
  If CreateMenu(0,WindowID(1))
    MenuTitle("Anzeige")
    MenuItem(1,"Arabisch")
    MenuItem(2,"Römisch")
    MenuItem(3,"Digital")
    MenuItem(4,"24 Stunden")
    MenuItem(5,"Binär")
    MenuItem(6,"Berliner Uhr")
    MenuBar()
    MenuItem(16,"Immer im Vordergrund"):SetMenuItemState(0,6,sticky):StickyWindow(1,sticky)
    MenuBar()
    MenuItem(17,"Ende")
    MenuTitle("Alarm")
    MenuItem(18,"Alarm Ein"+Chr(9)+"Alt+E")
    MenuItem(19,"Alarm Aus"+Chr(9)+"Alt+A")
    MenuItem(20,"Alarmton einstellen")   
  EndIf
  
  AddKeyboardShortcut(1,#PB_Shortcut_Alt|#PB_Shortcut_E,18)
  AddKeyboardShortcut(1,#PB_Shortcut_Alt|#PB_Shortcut_A,19)
  
  SetMenuItemState(0,uhr,1)
  CanvasGadget(#Canvas,0,0,#WinW,#WinH)
  LoadFont(1,"Courier New",10)
  LoadFont(2,"Courier New",10,#PB_Font_Bold)
  LoadFont(3,"Arial",12)
  CreateImage(#Ziffernblatt,#winw,#winh)
  CreateImage(#VierundzwanzigStunden,#winw,#winh)
  CreateImage(#Binaer,#winw,#winh)
  CreateImage(#BerlinUhr,#winw,#winh)
  
  AddWindowTimer(1,1,1000)
  
  Alarm\Ton=0
  If Alarm\Name:Alarm\Ton=LoadSound(#PB_Any,Alarm\Name):EndIf
EndProcedure

Procedure AlarmtonEinstellen()
  Protected.s n=OpenFileRequester("Alarmton einstellen...",Alarm\Name,"Sound-Dateien | *.wav;*.ogg",1)

  If n
    Alarm\Ton=LoadSound(#PB_Any,n)
    If Alarm\Ton:Alarm\Name=n:EndIf
  EndIf
 
EndProcedure

Procedure UhrZeichnen()
  Dim zr.s(11)
  Protected c,a
  Protected.f x1,y1,x2,y2,r,l,tw,th,x,y
  Protected z.s
  
  For c=0 To 11
    Read.s zr(c)
  Next
  
  ;Zifferblatt
  If StartDrawing(ImageOutput(#Ziffernblatt))
    Box(0,0,#winw,#winh,$ffffff)
    Circle(#winw/2,#winh/2,3,$111111)
    For c=0 To 354 Step 6
      r=Radian(c)
      l=90
      If c%30=0:l=85:EndIf
      x1=l*Cos(r)+mx
      y1=l*Sin(r)+my
      x2=98*Cos(r)+mx
      y2=98*Sin(r)+my
      LineXY(x1,y1,x2,y2,$111111)
    Next
    StopDrawing()
  EndIf
  
  ;Zifferblatt24
  If StartDrawing(ImageOutput(#VierundzwanzigStunden))
    Box(0,0,#winw,#winh,$ffffff)
    Circle(#winw/2,#winh/2,3,$111111)
    For c=0 To 357 Step 3
      r=Radian(c)
      l=90
      If c%15=0:l=85:EndIf
      x1=l*Cos(r)+mx
      y1=l*Sin(r)+my
      x2=98*Cos(r)+mx
      y2=98*Sin(r)+my
      LineXY(x1,y1,x2,y2,$111111)
    Next
    DrawingFont(FontID(1))
    DrawingMode(#PB_2DDrawing_Transparent)
    l=75
    For c=1 To 24
      r=Radian((c-6)*15)
      z=Str(c)
      tw=TextWidth(z)/2
      th=TextHeight(z)/2
      x1=l*Cos(r)+mx
      y1=l*Sin(r)+my
      DrawText(x1-tw,y1-th,z,$111111)
    Next       
    StopDrawing()
  EndIf
  
  ;#Arabisch1 - Arabische Ziffern
  CopyImage(#Ziffernblatt,#Arabisch1)
  l=70
  If StartDrawing(ImageOutput(#Arabisch1))
    DrawingFont(FontID(1))
    DrawingMode(#PB_2DDrawing_Transparent)
    For c=1 To 12
      r=Radian((c-3)*30)
      z=Str(c)
      tw=TextWidth(z)/2
      th=TextHeight(z)/2
      x1=l*Cos(r)+mx
      y1=l*Sin(r)+my
      DrawText(x1-tw,y1-th,z,$111111)
    Next    
    StopDrawing()
  EndIf
  
  ;#RoemischI - Römische Ziffern
  CopyImage(#Ziffernblatt,#RoemischI)
  l=65
  If StartDrawing(ImageOutput(#RoemischI))
    DrawingFont(FontID(1))
    DrawingMode(#PB_2DDrawing_Transparent)
    For c=1 To 12
      r=Radian((c-3)*30)
      z=zr(c-1)
      tw=TextWidth(z)/2
      th=TextHeight(z)/2
      x1=l*Cos(r)+mx
      y1=l*Sin(r)+my
      DrawText(x1-tw,y1-th,z,$111111)
    Next    
    StopDrawing()
  EndIf
  FreeImage(#Ziffernblatt)
  
  ;Binär
  If StartDrawing(ImageOutput(#Binaer))
    Box(0,0,#winw,#winh,$ffffff)
    ;LineXY(#winw/2,0,#winw/2,#winh,0)
    a=16
    For c=0 To 4
      DrawingMode(#PB_2DDrawing_Default)
      Circle(110+c*20,40,6,$000085)
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(FontID(1))
      z=Str(a)
      DrawText((110+c*20)-TextWidth(z)/2,50,z,0)
      a/2
    Next
    a=32
    For c=0 To 5
      DrawingMode(#PB_2DDrawing_Default)
      Circle(100+c*20,100,6,$000085)
      Circle(100+c*20,160,6,$000085)
      DrawingMode(#PB_2DDrawing_Transparent)
      DrawingFont(FontID(1))
      z=Str(a)
      DrawText((100+c*20)-TextWidth(z)/2,110,z,0)
      DrawText((100+c*20)-TextWidth(z)/2,170,z,0)     
      a/2      
    Next   
    StopDrawing()
  EndIf
  
  ;Berliner Uhr
  If StartDrawing(ImageOutput(#BerlinUhr))
    Box(0,0,#winw,#winh,$ffffff)
    ;LineXY(#winw/2,0,#winw/2,#winh,0)
    DrawingMode(#PB_2DDrawing_Outlined)
    
    For c=0 To 3
      Box(c*67+20,20,60,40,0):FillArea(c*67+30,30,0,$000085)
      Box(c*67+20,70,60,40,0):FillArea(c*67+30,80,0,$000085)
      Box(c*67+20,170,60,40,0):FillArea(c*67+30,180,0,$0067A8)      
    Next
    For c=0 To 10
      Box(c*24+20,120,20,40,0):FillArea(c*24+30,130,0,$0067A8) 
    Next
    
    StopDrawing()
  EndIf
  
  If uhr=#Digital:ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,40):EndIf
  
EndProcedure

Procedure ZeigerZeichnen()    ;wird jede Sekunde aufgerufen
  Protected d=Date(),x
  Protected s=Second(d),ls=90 ;Länge Sekundenzeiger
  Protected m=Minute(d),lm=95 ;Länge Minutenzeiger
  Protected h=Hour(d),lh=60   ;Länge Stundenzeiger
  Protected lh24=80           ;Länge Stundenzeiger 24-Stunden Uhr
  Protected.f xs,ys,rs,xm,ym,rm,xh,yh,rh,x24,y24,r24
  Protected.s u=FormatDate("%hh:%ii:%ss   %dd.%mm.%yyyy",d),da=FormatDate("%dd.%mm.%yyyy",d),z
  
  If Alarm\Ein=#True
    If h=Alarm\Stunde And m=Alarm\Minute
      PlaySound(Alarm\Ton)
      Alarm\Ein=#False
      ;SetMenuItemState(0,4,alarm)
      SetWindowTitle(1,#WinTitle)
    EndIf
  EndIf
  
  ;Zeiger berechnen für #Arabisch1 und #RoemischI
  ;Sekundenzeiger
  rs=Radian((s-15)*6)
  xs=ls*Cos(rs)+mx
  ys=ls*Sin(rs)+my 
  ;Minutenzeiger
  rm=Radian((m-15)*6+s/10)
  xm=lm*Cos(rm)+mx
  ym=lm*Sin(rm)+my  
  ;Stundenzeiger
  rh=Radian((h-3)*30+(m/2))
  xh=lh*Cos(rh)+mx
  yh=lh*Sin(rh)+my
  
  Select uhr
    Case #Arabisch1
      If StartDrawing(CanvasOutput(#Canvas))
        DrawImage(ImageID(#Arabisch1),0,0)
        LineXY(mx,my,xs,ys,$111111)
        LineXY(mx,my,xm,ym,$111111)
        LineXY(mx,my,xh,yh,$111111)
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawingFont(FontID(2))
        DrawText((#winw-TextWidth(da))/2,0,da,$111111)    
        StopDrawing()
      EndIf
    Case #RoemischI
      If StartDrawing(CanvasOutput(#Canvas))
        DrawImage(ImageID(#RoemischI),0,0)
        LineXY(mx,my,xs,ys,$111111)
        LineXY(mx,my,xm,ym,$111111)
        LineXY(mx,my,xh,yh,$111111) 
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawingFont(FontID(2))
        DrawText((#winw-TextWidth(da))/2,0,da,$111111)           
        StopDrawing()
      EndIf
    Case #Digital
      If StartDrawing(CanvasOutput(#Canvas))
        Box(0,0,#winw,#winh,$ffffff)
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawingFont(FontID(2))
        DrawText((#winw-TextWidth(u))/2,0,u,$111111)
        StopDrawing()
      EndIf  
    Case #VierundzwanzigStunden
      r24=Radian((h-6)*15+m/4)
      x24=lh24*Cos(r24)+mx
      y24=lh24*Sin(r24)+my
      If StartDrawing(CanvasOutput(#Canvas))
        DrawImage(ImageID(#VierundzwanzigStunden),0,0)
        LineXY(mx,my,x24,y24,$111111) 
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawingFont(FontID(2))
        DrawText((#winw-TextWidth(da))/2,0,da,$111111)           
        StopDrawing()
      EndIf 
    Case #Binaer
      If StartDrawing(CanvasOutput(#Canvas))
        DrawImage(ImageID(#Binaer),0,0)
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawingFont(FontID(2))
        DrawText((#winw-TextWidth(da))/2,0,da,$111111)
        ;Zeit in Klartext anzeigen
        DrawText(#winw-80,160,RSet(Str(s),2,"0"),0)
        DrawText(#winw-80,100,RSet(Str(m),2,"0"),0)
        DrawText(#winw-80,40,RSet(Str(h),2,"0"),0) 
        
        DrawingMode(#PB_2DDrawing_Default)
        
        z=RSet(Bin(h),5,"0")  ;Stunde
        For x=0 To 4
          If Mid(z,x+1,1)="1"
            Circle(110+x*20,40,6,$0000E0)
          EndIf
        Next                    
        z=RSet(Bin(m),6,"0")  ;Minute
        For x=0 To 5
          If Mid(z,x+1,1)="1"
            Circle(100+x*20,100,6,$0000E0)
          EndIf
        Next              
        z=RSet(Bin(s),6,"0")  ;Sekunde
        For x=0 To 5
          If Mid(z,x+1,1)="1"
            Circle(100+x*20,160,6,$0000E0)
          EndIf
        Next        
        StopDrawing()
      EndIf
    Case #BerlinUhr
      If StartDrawing(CanvasOutput(#Canvas))
        DrawImage(ImageID(#BerlinUhr),0,0)
        DrawingMode(#PB_2DDrawing_Transparent)
        DrawingFont(FontID(2))
        DrawText((#winw-TextWidth(u))/2,0,u,$111111)
        
        x=h/5                                         ;5 Stunden
        While x
          FillArea((x-1)*67+30,30,0,$0000E0)  
          x-1
        Wend       
        x=h%5                                         ;Stunden
        While x
          FillArea((x-1)*67+30,80,0,$0000E0)  
          x-1
        Wend
        x=m/5                                        ;5 Minuten
        While x
          FillArea((x-1)*24+30,130,0,$1CF3F3)
          If x%3=0:FillArea((x-1)*24+30,130,0,$0000E0):EndIf
          x-1
        Wend       
        x=m%5                                         ;Minuten
        While x
          FillArea((x-1)*67+30,180,0,$1CF3F3)  
          x-1
        Wend
        StopDrawing()
      EndIf     
  EndSelect
  
EndProcedure

Procedure AlarmEingeben2()
  Protected event,AlarmWindow,OKGadget,AbbruchGadget,TextGadget1,TextGadget2,StundeGadget,MinuteGadget,RelativGadget
  Protected Relativ=#PB_Checkbox_Unchecked 
  Protected Titel.s="Alarm eingeben"
  
  AlarmWindow=OpenWindow(#PB_Any,#PB_Ignore,#PB_Ignore,280,120,Titel,#PB_Window_Tool|#PB_Window_ScreenCentered,WindowID(1))
  
  If AlarmWindow
    If Alarm\Stunde<0
      Alarm\Minute=Minute(Date()):Alarm\Stunde=Hour(Date())
      If Alarm\Minute<30:Alarm\Minute=30:Else:Alarm\Minute=0:Alarm\Stunde+1:EndIf 
      If Alarm\Stunde>=24:Alarm\Stunde-24:EndIf
    EndIf 
    StickyWindow(AlarmWindow,#True)
    StickyWindow(1,#True)
    SetGadgetFont(#PB_Default,FontID(3))
    TextGadget1=TextGadget(#PB_Any,10,10,60,24,"Stunde:",#PB_Text_Center)
    TextGadget2=TextGadget(#PB_Any,100,10,60,24,"Minute:",#PB_Text_Center)
    StundeGadget=SpinGadget(#PB_Any,10,36,60,24,0,23):SetGadgetText(StundeGadget,Str(Alarm\Stunde))
    MinuteGadget=SpinGadget(#PB_Any,100,36,60,24,0,59):SetGadgetText(MinuteGadget,Right("0"+Str(Alarm\Minute),2))
    RelativGadget=CheckBoxGadget(#PB_Any,180,40,120,24,"Relativ"):SetGadgetState(RelativGadget,Relativ)
    OKGadget=ButtonGadget(#PB_Any,10,80,110,24,"OK")
    AbbruchGadget=ButtonGadget(#PB_Any,140,80,110,24,"Abbrechen")
    ;SetActiveGadget(StundeGadget)
    AddKeyboardShortcut(AlarmWindow,#PB_Shortcut_Return,20)
    
    Repeat
      event=WaitWindowEvent()
      If event=#PB_Event_Menu
        If EventMenu()=20     ;Return oder Enter gedrückt
          If Relativ=#PB_Checkbox_Checked
            Alarm\Minute+Minute(Date())
            Alarm\Stunde+Hour(Date())
            If Alarm\Minute>=60:Alarm\Minute-60:Alarm\Stunde+1:EndIf 
            If Alarm\Stunde>=24:Alarm\Stunde-24:EndIf 
          EndIf
          CloseWindow(AlarmWindow)
          StickyWindow(1,sticky)
          ProcedureReturn #True
        EndIf    
      EndIf
      If event=#PB_Event_Gadget
        Select EventGadget()
          Case OKGadget
            If Relativ=#PB_Checkbox_Checked
              Alarm\Minute+Minute(Date())
              Alarm\Stunde+Hour(Date())
              If Alarm\Minute>=60:Alarm\Minute-60:Alarm\Stunde+1:EndIf 
            EndIf
            CloseWindow(AlarmWindow)
            StickyWindow(1,sticky)
            ProcedureReturn #True
          Case AbbruchGadget
            CloseWindow(AlarmWindow)
            StickyWindow(1,sticky)           
            ProcedureReturn #False
          Case StundeGadget
            Select EventType()
              Case #PB_EventType_Up
                Alarm\Stunde+1
                If Alarm\Stunde=24:Alarm\Stunde=0:EndIf
                SetGadgetText(StundeGadget,Str(Alarm\Stunde))
              Case #PB_EventType_Down
                Alarm\Stunde-1
                If Alarm\Stunde=-1:Alarm\Stunde=23:EndIf
                SetGadgetText(StundeGadget,Str(Alarm\Stunde))
              Case #PB_EventType_Change
                Alarm\Stunde=Val(GetGadgetText(StundeGadget))
                If Alarm\Stunde<0:Alarm\Stunde=0:EndIf
                If Alarm\Stunde>=23:Alarm\Stunde=23:EndIf 
            EndSelect           
          Case MinuteGadget
            Select EventType()
              Case #PB_EventType_Up
                Alarm\Minute+1
                If Alarm\Minute=60
                  Alarm\Minute=0
                  Alarm\Stunde+1
                  If Alarm\Stunde=24:Alarm\Stunde=0:EndIf
                  SetGadgetText(StundeGadget,Str(Alarm\Stunde))               
                EndIf
                SetGadgetText(MinuteGadget,Right("0"+Str(Alarm\Minute),2))
              Case #PB_EventType_Down
                Alarm\Minute-1
                If Alarm\Minute=-1
                  Alarm\Minute=59
                  Alarm\Stunde-1
                  If Alarm\Stunde=-1:Alarm\Stunde=23:EndIf
                  SetGadgetText(StundeGadget,Str(Alarm\Stunde))              
                EndIf
                SetGadgetText(MinuteGadget,Right("0"+Str(Alarm\Minute),2))
              Case #PB_EventType_Change
                Alarm\Minute=Val(GetGadgetText(MinuteGadget))
                If Alarm\Minute<0:Alarm\Minute=0:EndIf
                While Alarm\Minute>=60
                  Alarm\Minute-60
                  Alarm\Stunde+1
                Wend
            EndSelect
          Case RelativGadget
            Relativ=GetGadgetState(RelativGadget)
            If Relativ=#PB_Checkbox_Checked
              Alarm\Stunde=0
              Alarm\Minute=30
            EndIf
            If Relativ=#PB_Checkbox_Unchecked
              Alarm\Minute=Minute(Date()):Alarm\Stunde=Hour(Date())
              If Alarm\Minute<30:Alarm\Minute=30:Else:Alarm\Minute=0:Alarm\Stunde+1:EndIf 
              If Alarm\Stunde>=24:Alarm\Stunde-24:EndIf           
            EndIf          
            SetGadgetText(StundeGadget,Str(Alarm\Stunde))
            SetGadgetText(MinuteGadget,Right("0"+Str(Alarm\Minute),2))          
        EndSelect
      EndIf
    ForEver
  EndIf 
  ProcedureReturn #False
EndProcedure

;-Main
InitGui()
UhrZeichnen()
ZeigerZeichnen()

BindEvent(#PB_Event_Timer,@ZeigerZeichnen(),1)

Alarm\Ein=#False
Alarm\Stunde=-1

Repeat
  event=WaitWindowEvent()
  
  If event=#PB_Event_Menu
    Select EventMenu()
      Case 1
        uhr=#Arabisch1
        SetMenuItemState(0,1,1)
        SetMenuItemState(0,2,0)
        SetMenuItemState(0,3,0)
        SetMenuItemState(0,4,0)
        SetMenuItemState(0,5,0)
        SetMenuItemState(0,6,0)
        ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,#winh)
        ZeigerZeichnen()
      Case 2
        uhr=#RoemischI
        SetMenuItemState(0,1,0)
        SetMenuItemState(0,2,1)
        SetMenuItemState(0,3,0)
        SetMenuItemState(0,4,0)
        SetMenuItemState(0,5,0)
        SetMenuItemState(0,6,0)      
        ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,#winh)
        ZeigerZeichnen()
      Case 3
        uhr=#Digital
        SetMenuItemState(0,1,0)
        SetMenuItemState(0,2,0)
        SetMenuItemState(0,3,1)
        SetMenuItemState(0,4,0)
        SetMenuItemState(0,5,0)
        SetMenuItemState(0,6,0)
        ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,40)
        ZeigerZeichnen()
      Case 4
        uhr=#VierundzwanzigStunden
        SetMenuItemState(0,1,0)
        SetMenuItemState(0,2,0)
        SetMenuItemState(0,3,0)
        SetMenuItemState(0,4,1)
        SetMenuItemState(0,5,0)
        SetMenuItemState(0,6,0)
        ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,#winh) 
        ZeigerZeichnen()
      Case 5
        uhr=#Binaer
        SetMenuItemState(0,1,0)
        SetMenuItemState(0,2,0)
        SetMenuItemState(0,3,0)
        SetMenuItemState(0,4,0)
        SetMenuItemState(0,5,1)
        SetMenuItemState(0,6,0)
        ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,#winh) 
        ZeigerZeichnen()
      Case 6
        uhr=#BerlinUhr
        SetMenuItemState(0,1,0)
        SetMenuItemState(0,2,0)
        SetMenuItemState(0,3,0)
        SetMenuItemState(0,4,0)
        SetMenuItemState(0,5,0)
        SetMenuItemState(0,6,1)
        ResizeWindow(1,#PB_Ignore,#PB_Ignore,#PB_Ignore,#winh) 
        ZeigerZeichnen()
        
        ;       Case 5
        ;         alarm=1-alarm
        ;         If alarm=#True
        ;           alarm=AlarmEingeben2()
        ;           If alarm=#True
        ;             SetWindowTitle(1,"Alarm um "+Str(AlarmStunde)+":"+Right("0"+Str(AlarmMinute),2)+" Uhr")
        ;           EndIf          
        ;         EndIf
        ;         SetMenuItemState(0,5,alarm)
        ;         If alarm=#False:SetWindowTitle(1,#WinTitle):EndIf
      Case 16
        sticky=1-sticky
        StickyWindow(1,sticky)
        SetMenuItemState(0,16,sticky)
      Case 17
        Break  
      Case 18
        If Alarm\Ton=0:AlarmtonEinstellen():EndIf 
        If Alarm\Ton
          If AlarmEingeben2()
            Alarm\Ein=#True
            SetWindowTitle(1,"Alarm um "+Str(Alarm\Stunde)+":"+Right("0"+Str(Alarm\Minute),2)+" Uhr")
          EndIf
        EndIf       
      Case 19
        Alarm\Ein=#False
        SetWindowTitle(1,#WinTitle)
      Case 20
        AlarmtonEinstellen()       
    EndSelect
  EndIf 
Until event=#PB_Event_CloseWindow

OpenPreferences(prefs)
WritePreferenceInteger("Xpos",WindowX(1))
WritePreferenceInteger("Ypos",WindowY(1))
WritePreferenceInteger("Uhr",uhr)
WritePreferenceInteger("Sticky",sticky)
WritePreferenceString("Alarmtonname",Alarm\Name)
ClosePreferences()

End

;-Data
DataSection
  Data.s "I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII"
EndDataSection
formerly known as bizzl