Hallo leute,
ich habe mal vor einiger Zeit ein Zahlensystem Umrechner gecodet und dachte ich stelle den mal vor ;D
er bietet die möglichkeit im Hauptfenster Binär, Dezimal, Oktal und Hexadezimal um zu wandeln
zudem zeigt er falls es auch als ASCII Zeichen dargestellt werden kann, dieses an.
Es gibt diverse Hotkey's
F1 = Fenster immer im Vordergrund
F2 = Leeren
F3 = Zeit zum rechnen anzeigen
F4 = Zahl drehen (dazu muss ein der eingabe Felder aktiv sein)
F5 = Eigene Basis umwandeln
ESC = Beenden
Pfeiltaste Hoch/Runter = wechseln zwischen den Eingabefeldern
Enter = Berechnen
Desweiteren lässt sich via Menü oder F5 ein zweites Fenster öffnen, wo man selbst die Basis (zwischen 2 und 36) auswählen kann und die Zielbasis.
Ich habe auch eine kleine Info über Zahlensysteme eingebaut.
Spoiler anzeigen
#NoTrayIcon
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Icon=Sonstiges\AU3_Programme\ICON\Binary.ico
#AutoIt3Wrapper_Outfile=Zahlensystem Umrechner.exe
#AutoIt3Wrapper_Res_Comment=keine Gewähr auf richtigkeit der Ergebnisse
#AutoIt3Wrapper_Res_Description=Zahlensystem Umrechner
#AutoIt3Wrapper_Res_Fileversion=0.3.0.0
#AutoIt3Wrapper_Res_FileVersion_AutoIncrement=y
#AutoIt3Wrapper_Res_LegalCopyright=Krabat (C) 2011
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <String.au3>
#include <GuiStatusBar.au3>
Opt("GUIOnEventMode", 1)
Global $version = "0.3.0.0"
Dim $global[9]
Global $global
Global $head = "Zahlensystem Umrechner"
Global $state = 0
Dim $OwnWin[5]
Global $OwnWin
$global[7] = 1
$global[8] = 0
$global[0] = GUICreate($head, 385, 185)
GUISetFont(9, 400, 0, "Arial", $global[0])
GUISetOnEvent($GUI_EVENT_CLOSE, "_exit")
GUISetBkColor(0xE0FFFF)
$MenuA = GUICtrlCreateMenu("&Datei")
$MenuA_1 = GUICtrlCreateMenuItem("Eigene Umwandlung" & @TAB & "F5", $MenuA)
GUICtrlSetOnEvent($MenuA_1, "_OwnGUI")
$MenuA_2 = GUICtrlCreateMenuItem("", $MenuA)
$MenuA_3 = GUICtrlCreateMenuItem("Zurücksetzen" & @TAB & "F2", $MenuA)
GUICtrlSetOnEvent($MenuA_3, "_Reset")
$MenuA_4 = GUICtrlCreateMenuItem("Zahl Drehen" & @TAB & "F4", $MenuA)
GUICtrlSetOnEvent($MenuA_4, "_Drehen")
$MenuA_5 = GUICtrlCreateMenuItem("", $MenuA)
$MenuA_6 = GUICtrlCreateMenuItem("Beenden" & @TAB & "ESC", $MenuA)
GUICtrlSetOnEvent($MenuA_6, "_exit")
$MenuC = GUICtrlCreateMenu("Einstellungen")
$MenuC_1 = GUICtrlCreateMenuItem("Im Vordergrund" & @TAB & "F1", $MenuC)
GUICtrlSetOnEvent($MenuC_1, "_OnTop")
$MenuC_2 = GUICtrlCreateMenuItem("Rechen Zeit" & @TAB & "F3", $MenuC)
GUICtrlSetOnEvent($MenuC_2, "_Timer")
$MenuD = GUICtrlCreateMenu("Hilfe")
$MenuD_1 = GUICtrlCreateMenuItem("Zahlensysteme und Basis", $MenuD)
GUICtrlSetOnEvent($MenuD_1, "_Help_ZahlenSys")
$MenuB = GUICtrlCreateMenu("?")
$MenuB_1 = GUICtrlCreateMenuItem("About...", $MenuB)
GUICtrlSetOnEvent($MenuB_1, "_About")
Dim $aParts[5] = [45, 150, 180, 305, -1]
Dim $aText[5] = ["Status: ", "Berreit", "Zeit:", "0 Sek.", "keine Gewähr!"]
$global[6] = _GUICtrlStatusBar_Create($global[0], $aParts, $aText)
GUICtrlSetState($MenuC_2, $GUI_CHECKED)
$Dummy1 = GUICtrlCreateDummy()
GUICtrlSetOnEvent($Dummy1, "_JetztRechnen")
$Dummy2 = GUICtrlCreateDummy()
GUICtrlSetOnEvent($Dummy2, "_Reset")
$Dummy3 = GUICtrlCreateDummy()
GUICtrlSetOnEvent($Dummy3, "_FocusHoch")
$Dummy4 = GUICtrlCreateDummy()
GUICtrlSetOnEvent($Dummy4, "_FocusRunter")
$Dummy5 = GUICtrlCreateDummy()
GUICtrlSetOnEvent($Dummy5, "_OnTop")
$Dummy6 = GUICtrlCreateDummy()
GUICtrlSetOnEvent($Dummy6, "_Timer")
$Dummy7 = GUICtrlCreateDummy()
GUICtrlSetOnEvent($Dummy7, "_Drehen")
$Dummy8 = GUICtrlCreateDummy()
GUICtrlSetOnEvent($Dummy8, "_OwnGUI")
Dim $AccelKeys[8][2] = [["{ENTER}", $Dummy1],["{F2}", $Dummy2],["{up}", $Dummy3],["{down}", $Dummy4],["{F1}", $Dummy5],["{F3}", $Dummy6],["{F4}", $Dummy7],["{F5}", $Dummy8]]
GUISetAccelerators($AccelKeys)
GUICtrlCreateLabel("Dezimal", 100, 5, 80, 15)
GUICtrlCreateLabel("Binär", 5, 5, 80, 15)
GUICtrlCreateLabel("Hexadezimal", 290, 5, 80, 15)
GUICtrlCreateLabel("Oktal", 195, 5, 80, 15)
GUICtrlCreateLabel("ASCII:", 5, 75, 100, 15)
GUICtrlCreateGroup("", 180, 82, 195, 50)
GUICtrlCreateLabel("© 2011 by Krabat" & @CRLF & "All rights reserved", 200, 95, 150, 30, 0x01)
GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
GUICtrlSetColor(-1, 0x708090)
$global[1] = GUICtrlCreateInput("", 100, 20, 90, 20) ; Dezimal
GUICtrlSetLimit(-1, 50)
GUICtrlCreateButton("Rechnen", 100, 45, 90, 20)
GUICtrlSetOnEvent(-1, "_RechnenEins")
$global[2] = GUICtrlCreateInput("", 5, 20, 90, 20) ; Binär
GUICtrlSetLimit(-1, 50)
GUICtrlCreateButton("Rechnen", 5, 45, 90, 20)
GUICtrlSetOnEvent(-1, "_RechnenZwei")
$global[4] = GUICtrlCreateInput("", 290, 20, 90, 20) ; Hexadezimal
GUICtrlSetLimit(-1, 50)
GUICtrlCreateButton("Rechnen", 290, 45, 90, 20)
GUICtrlSetOnEvent(-1, "_RechnenVier")
$global[5] = GUICtrlCreateInput("", 195, 20, 90, 20) ; Oktal
GUICtrlSetLimit(-1, 50)
GUICtrlCreateButton("Rechnen", 195, 45, 90, 20)
GUICtrlSetOnEvent(-1, "_RechnenFunf")
$global[3] = GUICtrlCreateInput("", 5, 90, 150, 20) ; ASCII
GUICtrlSetLimit(-1, 50)
GUICtrlCreateButton("ASCII umwandeln", 5, 115, 150, 20)
GUICtrlSetOnEvent(-1, "_RechnenDrei")
ControlFocus($head, "", $global[2])
GUISetState(@SW_SHOW, $global[0])
While 1
Sleep(5000)
WEnd
Func _RechnenEins() ; Dezimal
_StartMath()
$value2 = GUICtrlRead($global[1])
If $value2 = "" Or $value2 = "Fehler" Then
_Error()
Return -1
EndIf
GUICtrlSetData($global[2], _TranslateBase($value2, 10, 2))
GUICtrlSetData($global[4], _TranslateBase($value2, 10, 16))
GUICtrlSetData($global[5], _TranslateBase($value2, 10, 8))
_IsLike()
_EndMath()
EndFunc ;==>_RechnenEins
Func _RechnenZwei() ; Binär
_StartMath()
$value3 = GUICtrlRead($global[2])
If $value3 = "" Or $value3 = "Fehler" Then
_Error()
Return -1
EndIf
$check = StringSplit($value3, "")
For $i = 1 To $check[0] Step 1
If $check[$i] > 1 Or $check[$i] < 0 Then
_Error()
Return -2
EndIf
Next
GUICtrlSetData($global[1], _TranslateBase($value3, 2, 10))
GUICtrlSetData($global[4], _TranslateBase($value3, 2, 16))
GUICtrlSetData($global[5], _TranslateBase($value3, 2, 8))
_IsLike()
_EndMath()
EndFunc ;==>_RechnenZwei
Func _RechnenVier() ; Hexadezimal
_StartMath()
$value1 = GUICtrlRead($global[4])
If $value1 = "" Or $value1 = "Fehler" Then
_Error()
Return -1
EndIf
GUICtrlSetData($global[1], _TranslateBase($value1, 16, 10))
GUICtrlSetData($global[2], _TranslateBase($value1, 16, 2))
GUICtrlSetData($global[5], _TranslateBase($value1, 16, 8))
_IsLike()
_EndMath()
EndFunc ;==>_RechnenVier
Func _RechnenFunf() ; Oktal
_StartMath()
$value4 = GUICtrlRead($global[5])
If $value4 = "" Or $value4 = "Fehler" Then
_Error()
Return -1
EndIf
GUICtrlSetData($global[1], _TranslateBase($value4, 8, 10))
GUICtrlSetData($global[2], _TranslateBase($value4, 8, 2))
GUICtrlSetData($global[4], _TranslateBase($value4, 8, 16))
_IsLike()
_EndMath()
EndFunc ;==>_RechnenFunf
Func _RechnenDrei() ; ASCII
_StartMath()
$asc = Asc(GUICtrlRead($global[3]))
If $asc = "" Or $asc = "Fehler" Then
_Error()
Return -1
EndIf
GUICtrlSetData($global[1], $asc)
GUICtrlSetData($global[2], _TranslateBase($asc, 10, 2))
GUICtrlSetData($global[4], _TranslateBase($asc, 10, 16))
GUICtrlSetData($global[5], _TranslateBase($asc, 10, 8))
_IsLike()
_EndMath()
EndFunc ;==>_RechnenDrei
Func _Error()
GUICtrlSetData($global[1], "Fehler")
GUICtrlSetData($global[2], "Fehler")
GUICtrlSetData($global[3], "Fehler")
GUICtrlSetData($global[4], "Fehler")
GUICtrlSetData($global[5], "Fehler")
_FehlerMath()
EndFunc ;==>_Error
Func _IsLike()
$ascii = GUICtrlRead($global[1])
If $ascii = "Fehler" Then
GUICtrlSetData($global[3], "Fehler")
Return -1
EndIf
If $ascii <= 0 Or $ascii > 255 Then
GUICtrlSetData($global[3], "Kein ASCII Zeichen")
Return -2
EndIf
GUICtrlSetData($global[3], Chr($ascii))
Return 1
EndFunc ;==>_IsLike
Func _Reset()
GUICtrlSetData($global[1], "")
GUICtrlSetData($global[2], "")
GUICtrlSetData($global[3], "")
GUICtrlSetData($global[4], "")
GUICtrlSetData($global[5], "")
_ResetMath()
EndFunc ;==>_Reset
Func _JetztRechnen()
$focus = ControlGetFocus($head)
If $focus = "Edit2" Then _RechnenZwei() ; Binär
If $focus = "Edit1" Then _RechnenEins() ; Dezimal
If $focus = "Edit4" Then _RechnenFunf() ; Oktal
If $focus = "Edit3" Then _RechnenVier() ; Hexadezimal
If $focus = "Edit5" Then _RechnenDrei() ; ASCII
EndFunc ;==>_JetztRechnen
Func _FocusRunter()
$focus = ControlGetFocus($head)
If $focus = "Edit2" Then ControlFocus($head, "", $global[3])
If $focus = "Edit1" Then ControlFocus($head, "", $global[2])
If $focus = "Edit4" Then ControlFocus($head, "", $global[1])
If $focus = "Edit3" Then ControlFocus($head, "", $global[5])
If $focus = "Edit5" Then ControlFocus($head, "", $global[4])
EndFunc ;==>_FocusRunter
Func _FocusHoch()
$focus = ControlGetFocus($head)
If $focus = "Edit2" Then ControlFocus($head, "", $global[1])
If $focus = "Edit1" Then ControlFocus($head, "", $global[5])
If $focus = "Edit4" Then ControlFocus($head, "", $global[4])
If $focus = "Edit3" Then ControlFocus($head, "", $global[3])
If $focus = "Edit5" Then ControlFocus($head, "", $global[2])
EndFunc ;==>_FocusHoch
Func _TranslateBase($sNumber, $iOldBase = 10, $iNewBase = 2)
;by eukalyptus
If $iOldBase < 2 Or $iOldBase > 128 Or $iNewBase < 2 Or $iNewBase > 128 Then Return SetError(1, 1, False)
Local $iNum, $aRes, $tChr = DllStructCreate("char[64];")
If $iOldBase <> 10 Then
$aRes = DllCall("msvcrt.dll", "uint64:cdecl", "_strtoui64", "str", $sNumber, "ptr", 0, "int", $iOldBase)
If @error Then Return SetError(1, 2, False)
$iNum = $aRes[0]
Else
$iNum = Int($sNumber)
EndIf
$aRes = DllCall("msvcrt.dll", "ptr:cdecl", "_i64toa", "int64", $iNum, "ptr", DllStructGetPtr($tChr), "int", $iNewBase)
If @error Then Return SetError(1, 3, False)
Return DllStructGetData($tChr, 1)
EndFunc ;==>_TranslateBase
Func _StartMath()
If $global[7] = 1 Then $global[8] = TimerInit()
_GUICtrlStatusBar_SetText($global[6], "Rechnet...", 1)
EndFunc ;==>_StartMath
Func _EndMath()
_GUICtrlStatusBar_SetText($global[6], "Berreit", 1)
If $global[7] = 1 Then
_GUICtrlStatusBar_SetText($global[6], Round(TimerDiff($global[8]) / 1000, 10) & " Sek.", 3)
$global[8] = 0
EndIf
EndFunc ;==>_EndMath
Func _FehlerMath()
_GUICtrlStatusBar_SetText($global[6], "Ungültige Eingabe", 1)
EndFunc ;==>_FehlerMath
Func _ResetMath()
_GUICtrlStatusBar_SetText($global[6], "Zurückgesetzt", 1)
EndFunc ;==>_ResetMath
Func _about()
GUICreate("About", 250, 150, -1, -1, $WS_SYSMENU, -1, $global[0])
GUISetFont(9, 400, 0, "Arial")
GUISetOnEvent($GUI_EVENT_CLOSE, "_closeGUI")
GUISetBkColor(0xE0FFFF)
GUICtrlCreateLabel("Version " & $version & @CRLF & @CRLF & "© 2011 by Krabat" & @CRLF & "All rights reserved" & @CRLF & @CRLF & "keine Gewähr auf richtigkeit der Ergebnisse!", 0, 5, 250, 145, 0x01)
[/autoit] [autoit][/autoit] [autoit]GUISetState()
EndFunc ;==>_about
Func _closeGUI()
GUISetState(@SW_HIDE, @GUI_WinHandle)
GUIDelete(@GUI_WinHandle)
GUISwitch($global[0])
EndFunc ;==>_closeGUI
Func _OnTop()
If $state = 0 Then
WinSetOnTop($head, "", 1)
$state = 1
GUICtrlSetState($MenuC_1, $GUI_CHECKED)
Return 1
ElseIf $state = 1 Then
WinSetOnTop($head, "", 0)
$state = 0
GUICtrlSetState($MenuC_1, $GUI_UNCHECKED)
Return 0
EndIf
EndFunc ;==>_OnTop
Func _Timer()
If $global[7] = 0 Then
_GUICtrlStatusBar_SetText($global[6], "0 Sek.", 3)
_GUICtrlStatusBar_SetText($global[6], "Zeit:", 2)
GUICtrlSetState($MenuC_2, $GUI_CHECKED)
$global[7] = 1
Return 1
ElseIf $global[7] = 1 Then
_GUICtrlStatusBar_SetText($global[6], "", 2)
_GUICtrlStatusBar_SetText($global[6], "", 3)
GUICtrlSetState($MenuC_2, $GUI_UNCHECKED)
$global[7] = 0
Return 0
EndIf
EndFunc ;==>_Timer
Func _Drehen()
$focus = ControlGetFocus($head)
If $focus = "Edit2" Then GUICtrlSetData($global[2], _StringReverse(GUICtrlRead($global[2])))
If $focus = "Edit1" Then GUICtrlSetData($global[1], _StringReverse(GUICtrlRead($global[1])))
If $focus = "Edit4" Then GUICtrlSetData($global[5], _StringReverse(GUICtrlRead($global[5])))
If $focus = "Edit3" Then GUICtrlSetData($global[4], _StringReverse(GUICtrlRead($global[4])))
If $focus = "Edit5" Then GUICtrlSetData($global[3], _StringReverse(GUICtrlRead($global[3])))
EndFunc ;==>_Drehen
Func _OwnGUI()
GUICreate("Eigene Basis", 420, 200, @DesktopWidth / 2 - 194, @DesktopHeight / 2 + 94, -1, -1, $global[0])
GUISetFont(9, 400, 0, "Arial")
GUISetOnEvent($GUI_EVENT_CLOSE, "_closeGUI")
GUISetBkColor(0xE0FFFF)
GUICtrlCreateLabel("Mit diesem Tool kannst du Zahlen Umrechnen mit einer anderen Basis" & @CRLF & "Z.b.: von 10er-System zum 20er-System" & @CRLF & "Die Basis muss zwischen 2 (Binär) und 128 (Basis 128) liegen!", 5, 1, 420, 45)
[/autoit] [autoit][/autoit] [autoit]GUICtrlCreateLabel("Zahl", 5, 55, 100, 15)
GUICtrlCreateLabel("Basis", 260, 55, 50, 15)
$OwnWin[0] = GUICtrlCreateInput("", 5, 70, 250, 20)
$OwnWin[1] = GUICtrlCreateInput("", 260, 70, 50, 20)
GUICtrlCreateButton("Rechnen", 315, 70, 100, 20)
GUICtrlSetOnEvent(-1, "_MathOwnGUI")
GUICtrlCreateButton("Leeren", 5, 160, 100, 20)
GUICtrlSetOnEvent(-1, "_ClearOwnGUI")
GUICtrlCreateButton("Zahl Drehen", 110, 160, 100, 20)
GUICtrlSetOnEvent(-1, "_DrehenOwnGUI")
GUICtrlCreateButton("<< Austauschen >>", 68, 95, 120, 20, 0x1000)
GUICtrlSetOnEvent(-1, "_SwitchOwnGUI")
GUICtrlCreateLabel("Ergebniss", 5, 115, 100, 15)
GUICtrlCreateLabel("Basis", 260, 115, 50, 15)
GUICtrlCreateLabel("Basis angeben, die das Ergebniss haben soll!", 260, 150, 150, 30)
$OwnWin[4] = GUICtrlCreateLabel("Zeit: 0 Sek.", 5, 185, 150, 15)
[/autoit] [autoit][/autoit] [autoit]$OwnWin[2] = GUICtrlCreateInput("", 5, 130, 250, 20)
$OwnWin[3] = GUICtrlCreateInput("", 260, 130, 50, 20)
GUISetState()
EndFunc ;==>_OwnGUI
Func _SwitchOwnGUI()
$var1 = GUICtrlRead($OwnWin[2])
$var2 = GUICtrlRead($OwnWin[3])
GUICtrlSetData($OwnWin[2], GUICtrlRead($OwnWin[0]))
GUICtrlSetData($OwnWin[3], GUICtrlRead($OwnWin[1]))
GUICtrlSetData($OwnWin[0], $var1)
GUICtrlSetData($OwnWin[1], $var2)
EndFunc ;==>_SwitchOwnGUI
[/autoit] [autoit][/autoit] [autoit]Func _MathOwnGUI()
$timer = TimerInit()
$result = _TranslateBase(GUICtrlRead($OwnWin[0]), GUICtrlRead($OwnWin[1]), GUICtrlRead($OwnWin[3]))
If $result = False Then
GUICtrlSetData($OwnWin[2], "Fehler")
Return -1
EndIf
GUICtrlSetData($OwnWin[2], $result)
$needtime = Round(TimerDiff($timer) / 1000, 10)
GUICtrlSetData($OwnWin[4], "Zeit: " & $needtime & " Sek.")
EndFunc ;==>_MathOwnGUI
Func _ClearOwnGUI()
GUICtrlSetData($OwnWin[0], "")
GUICtrlSetData($OwnWin[1], "")
GUICtrlSetData($OwnWin[2], "")
GUICtrlSetData($OwnWin[3], "")
GUICtrlSetData($OwnWin[4], "Zeit: 0 Sek.")
EndFunc ;==>_ClearOwnGUI
Func _DrehenOwnGUI()
GUICtrlSetData($OwnWin[0], _StringReverse(GUICtrlRead($OwnWin[0])))
EndFunc ;==>_DrehenOwnGUI
Func _Help_ZahlenSys()
GUICreate("Hilfe - Zahlensysteme & Basis", 460, 250, 0, 0, $WS_SYSMENU, -1, $global[0])
GUISetFont(9, 400, 0, "Arial")
GUISetOnEvent($GUI_EVENT_CLOSE, "_closeGUI")
GUISetBkColor(0xE0FFFF)
GUICtrlCreateLabel("Alle Zahlensysteme besitzen eine Basis, die Basis gibt an wie viele Stellen das System hat, z.b. hat Binär die Basis 2, dass ermöglicht die Zahlen 0 und 1 unser Dezimalsystem hat Zahlen von 0-9 und besitzt die Basis 10. Die kleinste Basis ist 1 das System Unär hat nur die Zahl 1", 5, 5, 440, 60)
GUICtrlCreateLabel("Dieses Programm kann von der Basis 2 bis zur Basis 36 rechnen, das deckt alle wichtigen Systeme ab.", 5, 75, 440, 30)
GUICtrlCreateLabel("Es gibt folgende (kleine) Zahlensysteme >NAME (BASIS)<:" & @CRLF & "Unär (1), Binär (2), Ternär (3), Quaternär (4), Quinär (5), Senär (6), Septenär (7), Oktal (8), Nonär (9), Dezimal (10), Undezimal (11), Duodezimal (12), Hexadezimal (16), Vigesimal (20)", 5, 110, 440, 60)
GUICtrlCreateLabel("Die meisten anderen Systeme heißen so, wie die Basis ist" & @CRLF & "z.b.: Basis 62 (62)", 5, 175, 440, 30)
GUISetState()
EndFunc ;==>_Help_ZahlenSys
Func _exit()
Exit
EndFunc ;==>_exit
also wie gesagt, der code ist etwas älter sieht man bestimmt auch im programmierstyle
kommentare sind erwünscht
ich hoffe anfängern die das selbe vor haben kann das helfen
mfg Krabat