Binär Uhr

    • Release

    Es gibt 21 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

      █ █ █ Binär Uhr █ █ █


      FEATURES & BESCHREIBUNG

      Zeigt die Zeit an. (:)) (Es ist halt ne Uhr)

      Wie man die Uhr liest:
      Die Panels stehen für Zahlen (von unten nach oben: 1 2 4 8). Jede Spalte steht für eine Stelle der Zeit (H H M M). Um die Zeit zu erfahren, rechnet man in jeder Spalte die roten Panel zusammen. BSP mit dem Screenshot:
      Spalte 1: 1 = 1
      Spalte 2: 1+2+4 = 7
      Spalte 3: 1+2 = 3
      Spalte 4: 1+2 = 3
      Ergibt: 17:33


      SCREENSHOTS




      VORRAUSSETZUNGEN

      Windows VISTA, 7 oder 8
      .NET-Framework 4.5
      Systemuhrzeit


      DOWNLOAD

      Binär Uhr / BinaryClock (.zip | 12kb)

      Virustotal Scan


      TO-DO

      = Geplant = In Arbeit

      -Sekunden-Integration
      -Farbauswahl


      SONSTIGES & LIZENZ

      Dieses Programm ist noch Closed Source
      Decompilieren von mir aus ja - für alle die nicht warten können - (PS: Ihr kriegt mal guten Code ;))

      Bugs bitte Melden - Auch mir passieren Fehler :whistling:

      Erstellt mit Visual Studio 2013 Pro


      Viel Spaß

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „radio-ffk“ ()

      Ähm, na ja, ist halt die Frage wozu man ne binäre Uhr braucht.

      radio-ffk schrieb:

      (PS: Ihr kriegt mal guten Code )

      Also guter Code ist für mich definitiv was anderes... Kein GDI+ (mit dem hätte man das bestimmt gut hinbekommen), einen Timer für die Uhrzeitangabe (also Polling) und 44 Panel?!
      So wie ich das jetzt gesehen hab sind das so viele und da zeigst du das dann an, oder wie?

      Spoiler anzeigen

      VB.NET-Quellcode

      1. Select Case Me.hour1
      2. Case 0
      3. Me.P11.SetOff()
      4. Me.P12.SetOff()
      5. Me.P13.SetOff()
      6. Me.P14.SetOff()
      7. Case 1
      8. Me.P11.SetOff()
      9. Me.P12.SetOff()
      10. Me.P13.SetOff()
      11. Me.P14.SetOn()
      12. Case 2
      13. Me.P11.SetOff()
      14. Me.P12.SetOff()
      15. Me.P13.SetOn()
      16. Me.P14.SetOff()
      17. Case 3
      18. Me.P11.SetOff()
      19. Me.P12.SetOff()
      20. Me.P13.SetOn()
      21. Me.P14.SetOn()
      22. Case 4
      23. Me.P11.SetOff()
      24. Me.P12.SetOn()
      25. Me.P13.SetOff()
      26. Me.P14.SetOff()
      27. Case 5
      28. Me.P11.SetOff()
      29. Me.P12.SetOn()
      30. Me.P13.SetOff()
      31. Me.P14.SetOn()
      32. Case 6
      33. Me.P11.SetOff()
      34. Me.P12.SetOn()
      35. Me.P13.SetOn()
      36. Me.P14.SetOff()
      37. Case 7
      38. Me.P11.SetOff()
      39. Me.P12.SetOn()
      40. Me.P13.SetOn()
      41. Me.P14.SetOn()
      42. Case 8
      43. Me.P11.SetOn()
      44. Me.P12.SetOff()
      45. Me.P13.SetOff()
      46. Me.P14.SetOff()
      47. Case 9
      48. Me.P11.SetOn()
      49. Me.P12.SetOff()
      50. Me.P13.SetOff()
      51. Me.P14.SetOn()
      52. End Select
      53. Select Case Me.hour2
      54. Case 0
      55. Me.P21.SetOff()
      56. Me.P22.SetOff()
      57. Me.P23.SetOff()
      58. Me.P24.SetOff()
      59. Case 1
      60. Me.P21.SetOff()
      61. Me.P22.SetOff()
      62. Me.P23.SetOff()
      63. Me.P24.SetOn()
      64. Case 2
      65. Me.P21.SetOff()
      66. Me.P22.SetOff()
      67. Me.P23.SetOn()
      68. Me.P24.SetOff()
      69. Case 3
      70. Me.P21.SetOff()
      71. Me.P22.SetOff()
      72. Me.P23.SetOn()
      73. Me.P24.SetOn()
      74. Case 4
      75. Me.P21.SetOff()
      76. Me.P22.SetOn()
      77. Me.P23.SetOff()
      78. Me.P24.SetOff()
      79. Case 5
      80. Me.P21.SetOff()
      81. Me.P22.SetOn()
      82. Me.P23.SetOff()
      83. Me.P24.SetOn()
      84. Case 6
      85. Me.P21.SetOff()
      86. Me.P22.SetOn()
      87. Me.P23.SetOn()
      88. Me.P24.SetOff()
      89. Case 7
      90. Me.P21.SetOff()
      91. Me.P22.SetOn()
      92. Me.P23.SetOn()
      93. Me.P24.SetOn()
      94. Case 8
      95. Me.P21.SetOn()
      96. Me.P22.SetOff()
      97. Me.P23.SetOff()
      98. Me.P24.SetOff()
      99. Case 9
      100. Me.P21.SetOn()
      101. Me.P22.SetOff()
      102. Me.P23.SetOff()
      103. Me.P24.SetOn()
      104. End Select
      105. Select Case Me.min1
      106. Case 0
      107. Me.P31.SetOff()
      108. Me.P32.SetOff()
      109. Me.P33.SetOff()
      110. Me.P34.SetOff()
      111. Case 1
      112. Me.P31.SetOff()
      113. Me.P32.SetOff()
      114. Me.P33.SetOff()
      115. Me.P34.SetOn()
      116. Case 2
      117. Me.P31.SetOff()
      118. Me.P32.SetOff()
      119. Me.P33.SetOn()
      120. Me.P34.SetOff()
      121. Case 3
      122. Me.P31.SetOff()
      123. Me.P32.SetOff()
      124. Me.P33.SetOn()
      125. Me.P34.SetOn()
      126. Case 4
      127. Me.P31.SetOff()
      128. Me.P32.SetOn()
      129. Me.P33.SetOff()
      130. Me.P34.SetOff()
      131. Case 5
      132. Me.P31.SetOff()
      133. Me.P32.SetOn()
      134. Me.P33.SetOff()
      135. Me.P34.SetOn()
      136. Case 6
      137. Me.P31.SetOff()
      138. Me.P32.SetOn()
      139. Me.P33.SetOn()
      140. Me.P34.SetOff()
      141. Case 7
      142. Me.P31.SetOff()
      143. Me.P32.SetOn()
      144. Me.P33.SetOn()
      145. Me.P34.SetOn()
      146. Case 8
      147. Me.P31.SetOn()
      148. Me.P32.SetOff()
      149. Me.P33.SetOff()
      150. Me.P34.SetOff()
      151. Case 9
      152. Me.P31.SetOn()
      153. Me.P32.SetOff()
      154. Me.P33.SetOff()
      155. Me.P34.SetOn()
      156. End Select
      157. Select Case Me.min2
      158. Case 0
      159. Me.P41.SetOff()
      160. Me.P42.SetOff()
      161. Me.P43.SetOff()
      162. Me.P44.SetOff()
      163. Case 1
      164. Me.P41.SetOff()
      165. Me.P42.SetOff()
      166. Me.P43.SetOff()
      167. Me.P44.SetOn()
      168. Case 2
      169. Me.P41.SetOff()
      170. Me.P42.SetOff()
      171. Me.P43.SetOn()
      172. Me.P44.SetOff()
      173. Case 3
      174. Me.P41.SetOff()
      175. Me.P42.SetOff()
      176. Me.P43.SetOn()
      177. Me.P44.SetOn()
      178. Case 4
      179. Me.P41.SetOff()
      180. Me.P42.SetOn()
      181. Me.P43.SetOff()
      182. Me.P44.SetOff()
      183. Case 5
      184. Me.P41.SetOff()
      185. Me.P42.SetOn()
      186. Me.P43.SetOff()
      187. Me.P44.SetOn()
      188. Case 6
      189. Me.P41.SetOff()
      190. Me.P42.SetOn()
      191. Me.P43.SetOn()
      192. Me.P44.SetOff()
      193. Case 7
      194. Me.P41.SetOff()
      195. Me.P42.SetOn()
      196. Me.P43.SetOn()
      197. Me.P44.SetOn()
      198. Case 8
      199. Me.P41.SetOn()
      200. Me.P42.SetOff()
      201. Me.P43.SetOff()
      202. Me.P44.SetOff()
      203. Case 9
      204. Me.P41.SetOn()
      205. Me.P42.SetOff()
      206. Me.P43.SetOff()
      207. Me.P44.SetOn()
      208. End Select



      Das kannste so definitiv nicht bringen und das ist ein klarer Designfehler, sowohl beim GUI, als auch beim Code. Sehr unsauber programmiert. Die Architektur ist sehr schlecht bedacht, die Control sind nicht richtig benannt und vor allem ist das Ganze performancetechnisch nicht gerade das Beste (Punkte oben). Da wird dir bald der Überblick flöten gehen, besonders wenn du mal große Programme anfängst.

      Zudem: Alle Time-Variablen sind vom Typ String. Wieso? Mit denen kannst du nicht richtig arbeiten.

      Vorschläge:
      - GDI+ nutzen
      - Architektur überdenken (GUI-technisch und Controls richtig benennen)
      - Eventuell mehr mit für sowas vorgesehenen Mitteln arbeiten
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

      Es sind nicht alle Zeitangaben String sondern nur die allererste. Das mit gutem Code war ironisch gemeint. Die Panel sind nicht 44 (ich weiß nicht ob du nicht 4*4 rechen kannst aber bei mir ergibt das nur 16) und sie sind sinnvoll benannt (P(X-Koordinate)(Y-Koordinate)). GDI+ kann ich nicht und es ist ja auch nur im Kleinkram, ich hab halt nicht versucht mir großartig Mühe zu geben.

      radio-ffk schrieb:

      Die Panel sind nicht 44

      Ähm, das ist aber sehr merkwürdig, da muss ILSpy wohl falsch gerechnet haben, wenn da anfangs P1-P44 steht (deklariert als Panel).
      Zudem sind die ja inne Select-Case Abfrage drin.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      @Trade: Tja die sind halt besonders benannt. BSP: das 2-er-Feld für die 1 Stelle der Minuten heißt P33, weil es in Spalte 3 Zeile 3 ist.
      @Artentus: Wie würde man dann die freien Felder zeichnen? Und: hast du evtl. Ein gutes Tutorial für GDI+? (ja ich kenn die Suchfunktion aber so finde ich ja kein gutes wenn ich das nicht kann.)
      Aha, ok. Dann sind es 16, jedoch kann es wegen der Controlbenennung schon mal zu solchen Missverständnissen kommen, also änder das an der Architektur. Würde sich aber bestimmt trotzdem besser lösen lassen, eben mit GDI+ und ohne Select Case.
      #define for for(int z=0;z<2;++z)for // Have fun!
      Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

      Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
      Gut jetzt lerne ich GDI+ aber das benutze ich nicht für die Uhr, dafür ist es ja nur 'nen Kleinkram-Programm. Aber für zukünftige große Projekte werde ich mal meine Architektur überarbeiten und GDI+ u.ä. lernen. Bis dahin kommt dann erstmal so schnell nichts, dann hab ich mehr Zeit.

      Danke für all die Kritik, Hinweise und Verbesserungen. :)

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „radio-ffk“ ()

      die Idee der uhr ist an sich klasse...wenn man's schnell lesen kann macht diese auch irgendwo Sinn...(meine Armbanduhr ist ebenfalls ne binäruhr)...

      die Umsetzung allerdings nicht die beste...aber dazu sag ich nichts, da ich mich komplett am Anfang von VB sehe und daher einfach nicht genug recht habe deinen Code in der Luft zu "zerreißen"...

      lg, alex
      @oShortyo: Vielen Dank erstmal und ja die Umsetzung ist nicht die beste, aber da du das rausgekriegt hast, hast du meines Erachtens genug Recht um meinen Code zu zerreißen. Aber nach dem lesen des Tutorials und nachdem ich jetzt weiß wie leicht das wirklich ist - bau ich GDI+ doch noch ein. :thumbup:
      Ist zwar 17:33 aber :) Ansonsten hast du recht. Einziges Problem bei dem Wikipedia Bild, ist dass die Sekunden dabei sind und dass dort die überflüssigen Felder weggelassen wurden.
      Habs hier auch mal mit GDI umgesetzt:

      Spoiler anzeigen

      VB.NET-Quellcode

      1. Option Strict On
      2. Public Class Form1
      3. Public Sub New()
      4. ' Dieser Aufruf ist für den Designer erforderlich.
      5. InitializeComponent()
      6. ' Fügen Sie Initialisierungen nach dem InitializeComponent()-Aufruf hinzu.
      7. SetStyle(ControlStyles.AllPaintingInWmPaint Or ControlStyles.OptimizedDoubleBuffer Or ControlStyles.UserPaint Or ControlStyles.ResizeRedraw, True)
      8. UpdateStyles()
      9. InitialiseDict()
      10. doRefreshArray()
      11. End Sub
      12. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
      13. Timer1.Interval = 60000
      14. Timer1.Start()
      15. End Sub
      16. Private Sub InitialiseDict()
      17. constantValues.Add(0, 1)
      18. constantValues.Add(1, 2)
      19. constantValues.Add(2, 4)
      20. constantValues.Add(3, 8)
      21. constantYCoord.Add(1, 20)
      22. constantYCoord.Add(2, 80)
      23. constantYCoord.Add(4, 140)
      24. constantYCoord.Add(8, 200)
      25. End Sub
      26. Private Iterator Function getValue(ByVal ptime As Integer) As IEnumerable(Of Boolean)
      27. Dim timeNow As Date = Now
      28. Dim firstHour As Integer = ptime
      29. For timeVal = 3 To 0 Step -1
      30. If Math.Floor(firstHour / constantValues(timeVal)) >= 1 Then
      31. firstHour -= constantValues(timeVal)
      32. Yield True
      33. Else
      34. Yield False
      35. End If
      36. Next
      37. End Function
      38. Private time(3, 3) As Boolean
      39. Private constantValues As New Dictionary(Of Integer, Integer)
      40. Private constantYCoord As New Dictionary(Of Integer, Integer)
      41. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
      42. doRefreshArray()
      43. End Sub
      44. Private Sub doRefreshArray()
      45. Dim firstHour = getValue(Integer.Parse(Now.Hour.ToString().PadLeft(2, "0"c).Substring(0, 1)))
      46. Dim secondHour = getValue(Integer.Parse(Now.Hour.ToString().PadLeft(2, "0"c).Substring(1, 1)))
      47. Dim firstMinute = getValue(Integer.Parse(Now.Minute.ToString().PadLeft(2, "0"c).Substring(0, 1)))
      48. Dim secondMinute = getValue(Integer.Parse(Now.Minute.ToString().PadLeft(2, "0"c).Substring(1, 1)))
      49. For item = 3 To 0 Step -1
      50. time(0, item) = firstHour(item)
      51. time(1, item) = secondHour(item)
      52. time(2, item) = firstMinute(item)
      53. time(3, item) = secondMinute(item)
      54. Next
      55. Me.Invalidate()
      56. End Sub
      57. Private Sub Form1_Paint(sender As Object, e As PaintEventArgs) Handles Me.Paint
      58. With e.Graphics
      59. For timeLine = 3 To 0 Step -1
      60. Const X As Integer = 20
      61. .DrawString(constantValues(timeLine).ToString(), New Font(Font.FontFamily, 15), Brushes.Black, New PointF(X - 20, constantYCoord(constantValues(3 - timeLine))))
      62. If time(0, timeLine) Then
      63. .FillRectangle(Brushes.Red, New Rectangle(X + 40, constantYCoord(constantValues(timeLine)), 25, 25))
      64. End If
      65. If time(1, timeLine) Then
      66. .FillRectangle(Brushes.Red, New Rectangle(X + 80, constantYCoord(constantValues(timeLine)), 25, 25))
      67. End If
      68. If time(2, timeLine) Then
      69. .FillRectangle(Brushes.Red, New Rectangle(X + 120, constantYCoord(constantValues(timeLine)), 25, 25))
      70. End If
      71. If time(3, timeLine) Then
      72. .FillRectangle(Brushes.Red, New Rectangle(X + 160, constantYCoord(constantValues(timeLine)), 25, 25))
      73. End If
      74. Next
      75. End With
      76. End Sub
      77. End Class

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „RushDen“ ()