Beiträge von f705185@rppkn.com

    Das ist für mich extrem unintuitiv. Warum muss ich das angeben, was ich nicht matchen will ("alles, was kein Wort trennt")?

    Nach meinem Verständnis von RegEx sollte man explizit angeben, was man matcht und nicht, was man nicht matcht. Will sagen: Was ich in meinem Pattern nicht angebe, soll auch nicht da sein. \b vor und nach jedes Zeichen (bzw. in meinem Fall zu machtende Wort) zu setzen macht den Code extrem unleserlich und ich kann beim besten Willen nicht verstehen, was sich ein Sprachdesigner dabei gedacht hat. Schließlich ist es StringRegEx und nicht SubStringRegEx.

    Immerhin geht "\A(a|b|c)\Z". Ist zwar hässlich und wird mich irgendwann zwingen \A und \Z nachzuschlagen, wenn ich den Code überarbeite, aber scheinbar muss das in Autoit dann so. Danke.

    Wie gesagt, ich matche a, nicht .*a.* - offenbar ergänzt Autoit .* auf beiden Seiten Seite automatisch bzw. interpretiert die RegEx als Substring, weil auf "dabc" ebenso die Regex "a" matcht


    Was ich erwarte und warum habe ich doch schon beschrieben - mir ist nicht klar, wie ich es anders formulieren soll. Ich versuche es dennoch nochmal

    Code
    StringRegExp("abc", "a")

    sollte False/0 sein

    Code
    StringRegExp("abc", "a.*")

    sollte True/1 sein

    Es war viel einfacher als ich dachte. Ich muss einfach jedesmal ein neues Objekt erstellen. Hier der Code:


    Dim $var1=ObjCreate("Scripting.Dictionary")
    Dim $var2=ObjCreate("Scripting.Dictionary")


    $var1.add("farbe","grün")
    $var1.add("eigenschaft","fest")
    $var2.add(1,$var1)


    ;$var1.RemoveAll alter Code


    $var1=ObjCreate("Scripting.Dictionary") ;neu
    $var1.add("farbe","gelb")
    $var1.add("eigenschaft","flüssig")
    $var2.add(2,$var1)


    Dim $var3=ObjCreate("Scripting.Dictionary")
    Dim $var3 = $var2.Item(1)
    msgbox(48,"Eigenschaft",$var3.Item("eigenschaft"));

    Danke schonmal für die prompte und ausführliche Antwort. Call by Value und Call by Reference sind mir von C geläufig. Ich hatte vermutet, dass es damit zusammenhängt.

    Zitat

    Das heißt du musst also immer ein neues Dictionary erstellen anstatt immer wieder auf das selbe zu verweisen.

    Ich schildere mal mein Problem etwas abstrakt. Ich habe mehrere Autos. Die Eigenschaften eines Autos lege ich in ein Dictionary. Meine gesamten Autos möchte ich nun in einem weiteren Dictionary als Fuhrpark zusammenfassen. Diesen Fuhrpark möchte ich nun an eine Funktion übergeben, die z.B. den Fuhrpark einfach nur ausgibt. Die einzelnen Autos zu übergeben macht da also wenig Sinn.
    Wie löse ich diese Aufgabe am besten?

    Hier mein Skript


    Erwartet wird, dass in der Messagebox "fest" steht, stattdessen erscheint "flüssig". Was mache ich falsch? Wie kann ich es besser lösen? Danke für die Hilfe im Voraus.

    Hi,


    wenn ich das mache, bekomme ich

    Code
    king_be	localhost


    Mein Script:


    $binary = "0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD"


    $string = BinaryToString ( $binary )


    MsgBox ( 0, "", $string )


    Das was rauskommt:

    Bilder

    • #.png

    Zu StringToBinary gibt es noch BinaryToString.
    Binary = 0xHEX, String = 'Hallo'.
    Um aus 0xABC also 'Hallo' zu machen nutzt du BinaryToString


    lg
    Mars

    Wenn ich "0x024A0007006B0069006E0067005F006200650009006C006F00630061006C0068006F00730074000063DD" von Binär zu String mache
    kommt "J" raus. :S

    Ich baue gerade einen Minecraft Server nach und habe folgendes Problem.
    Das bisherige Script:


    Wenn der Server das erste Paket erhält vom Client.
    Sieht bei mir so aus:


    Wie kriege ich das in eine lesbare Form. Bei StringToBinary kommt auch nur das Gleiche raus.
    Das Protokoll sollte eigentlich nicht verschlüsselt sein.

    so habe jetzt eine Lösung für mein Problem gefunden: hab es durch 2 GUIS gelöst
    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>


    $start=0
    $antwort=0
    Opt("GUIOnEventMode", 1) ; Wechsle in den OnEvent Modus



    $mainwindow = GUICreate("Angriffswarner", 200, 100)
    $Startbutton = GUICtrlCreateButton("start", 70, 50, 60)
    GUISetState(@SW_SHOW, $mainwindow)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked", $mainwindow)
    GUICtrlSetOnEvent($Startbutton, "StartButton")



    $window2 = GUICreate("blabla", 200, 100)
    $bestaetigungbutton = GUICtrlCreateButton("bestätigen", 70, 50, 60)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked", $window2)
    GUISetState(@SW_HIDE, $window2)
    GUICtrlSetOnEvent($bestaetigungbutton, "BestaetigungButton")


    while 1
    While $start=1 AND $antwort = 0
    SoundPlay("Windows Exclamation.wav", 1)
    WEnd
    WEnd


    Func StartButton()
    $start=1
    GUISetState(@SW_SHOW, $window2)
    EndFunc ;==>StatusButton


    Func bestaetigungbutton()
    $start=0
    $antwort = 1
    GUISetState(@SW_HIDE, $window2)


    EndFunc ;==>bestaetigungbutton


    Func CLOSEClicked()
    Switch @GUI_WinHandle ; See which GUI sent the CLOSE message
    Case $mainwindow
    Exit ; If it was this GUI - we exit <<<<<<<<<<<<<<<
    Case $window2
    $antwort = 1
    $start=0
    GUISetState(@SW_HIDE, $window2)
    EndSwitch



    EndFunc

    Vielen Dank schonmal für deine Hilfe.
    Leider gibt es wieder die selben Probleme wie bei der neuen Idee die ich gerade ausprobiert habe:



    ;~ AdlibRegister("Soundfunktion",2000)


    Func Alarm()
    If $antwort =0 Then
    SoundPlay ( "Windows Exclamation.wav" , 0 )
    EndIf
    EndFunc
    $antwort=0
    msgbox(0+64, "blablabla","test")
    $antwort=1



    while 1
    sleep(2000)
    WEnd



    Nach mehreren Tests bin ich jetzt zu der Auffassung gekommen dass MsgBox immer alle weiteren Befehle blockiert bis es geschlossen wurde.


    daher sehen jetzt meine weiteren Pläne so aus dass ich entweder den Inhalt des 2. FEnsters in das 1. integriere oder mir 2 GUIs aufbaue.
    Werde dich auf dem laufenden halten ;)

    kannst du mir ein bisschen dabei helfen? habe leider wenig erfahrung mit dem Aufbau einer GUI, den Quellcode des Fenters das ich momentan schon drin habe habe ich von einem Beispiel übernommen und nur ein wenig angepasst.
    Damit du einen kuzen Überblick über das Programm ahst hier mal die bisherige Struktur des Programmes:



    #Region GUI Aufbau
    Opt("GUIOnEventMode", 1)
    $mainwindow = GUICreate("Programmname", 200, 100)
    GUISetOnEvent($GUI_EVENT_CLOSE, "CLOSEClicked")
    GUICtrlCreateLabel("text...", 30, 10)
    $Statusbutton = GUICtrlCreateButton($status, 70, 50, 60)
    GUICtrlSetBkColor($statusbutton,0xFF0000)
    GUICtrlSetOnEvent($statusbutton, "StatusButton")
    GUISetState(@SW_SHOW)


    #Region Hauptroutine


    while 1
    ;[...]
    If <Bedingung erfüllt> Then
    ;hier soll das passieren was ich vorhin geschrieben habe.
    EndIf


    Wend



    #Region ButtonAktionen
    Func StatusButton()
    ;...
    EndFunc



    Die Bedingung wird in einer Endlosschleife immer wieder überprüft


    wo genau muss ich jetzt mit dem Aufbau dieses MessageBox Fenster beginnen?

    Wenn den Sound zuerst Starte dann wird die Meldung leider nicht angezeigt, da die Endloschleife ja nciht unterbrochen wird


    ebenso funktioniert nicht:

    $meldung=0
    While $antwort <> 0

    SoundPlay ( "Windows Exclamation.wav" , 1 )


    if $meldung=0 Then
    $antwort = msgbox(0+64, "Neues Fenster","blablabla")
    $meldung=1
    EndIf


    WEnd