1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Niccoo

Beiträge von Niccoo

  • ini read schleife wie?

    • Niccoo
    • 7. Mai 2012 um 16:50

    Oder du schreibst es in ein .txt datei & lässt dir die dan mit FileRead() ausgeben.

  • If-Schleife

    • Niccoo
    • 4. Mai 2012 um 17:02

    Fail gefunden ;D lag an copy paste ;)

  • If-Schleife

    • Niccoo
    • 4. Mai 2012 um 16:55

    Hey, ich versuche einen zeit überprüfer zu bauen, doch irgendwie
    funktioniert die if-schleife nicht richtig. Ich habe bereits alles in zahlen gemacht (int). Doch theoretisch gesehen müsste alles so klappen wie es soll :/

    Spoiler anzeigen
    [autoit]

    $Zeit = IniRead($Pfad,"Dauer","Zeit" & $u,"00:00:00")
    $Datum = IniRead($Pfad,"Dauer","Datum" & $u,"01.01.2999")
    $Zeit = StringSplit($Zeit,":")
    $Datum = StringSplit($Datum,".")
    $Zeit[1] = Int($Zeit[1])
    $Zeit[2] = Int($Zeit[2])
    $Zeit[3] = Int($Zeit[3])
    $Datum[1] = Int($Datum[1])
    $Datum[2] = Int($Datum[2])
    $Datum[3] = Int($Datum[3])
    $Hour = Int(@MDAY)
    $Min = Int(@MDAY)
    $Sec = Int(@MDAY)
    $Mday = Int(@MDAY)
    $Mon = Int(@MON)
    $Year = Int(@YEAR)

    [/autoit] [autoit][/autoit] [autoit]

    If $Zeit[1] <= $Hour and $Zeit[2] <= $Min and $Zeit[3] <= $Sec and $Datum[1] <= $Mday and $Datum[2] <= $Mon and $Datum[3] <= $Year Then
    MsgBox(0,"1",$u)
    ElseIf $Zeit[1] < $Hour and $Datum[1] <= $Mday and $Datum[2] <= $Mon and $Datum[3] <= $Year Then
    MsgBox(0,"2",$u)
    ElseIf $Datum[1] < $Mday and $Datum[2] <= $Mon and $Datum[3] <= $Year Then
    MsgBox(0,"3",$u)
    ElseIf $Datum[2] < $Mon and $Datum[3] <= $Year Then
    MsgBox(0,"4",$u)
    ElseIf $Datum[3] < $Year Then
    MsgBox(0,"5",$u)
    EndIf
    $u += 1

    [/autoit]

    Ein eintrag in der konfi sieht so aus:

    Spoiler anzeigen

    Zeit1=0:29:5216:30
    Datum1=4.0416:30
    Zeit2=17:41:23
    Datum2=4.05.2012
    Zeit3=22:53:4
    Datum3=4.05.2012

    Ja ich weiß, die erste zeit ist unrealistisch, doch leider wird sie auch durch dem programm festgelegt & dort klapt die schleife auch nicht :/

  • Clock timer

    • Niccoo
    • 1. Mai 2012 um 19:11

    soo... habe mir mit RedHead jz was überlegt, es dürfte eig. doch jz kein fehler mehr drinne sein (wurde noch nicht getestet) das $Now... wird durch @Hour etc ersetzt & fertig...

    [autoit]

    If $Hour <= $NowHour and $Min <= $NowMin and $Sec <= $NowSec and $Monat <= $NowMonat and $Day <= $NowDay and $year <= $NowYear Then
    Funktion!
    ElseIf $Hour < $NowHour and $Monat <= $NowMonat and $Day <= $NowDay and $year <= $NowYear Then
    Funktion!
    ElseIf $Day < $NowDay and $Monat <= $NowMonat and $year <= $NowYear Then
    Funktion!
    ElseIf $Monat < $NowMonat and $year <= $NowYear Then
    Funktion!
    ElseIf $year < $NowYear Then
    Funktion!
    EndIf

    [/autoit]

    Esseiden jemand findet da so auf anhieb jz noch ein denk fehler oder sowas ;)

    Ansonsten teste ich das jz & dan mal schauen :)

  • Clock timer

    • Niccoo
    • 1. Mai 2012 um 15:52

    Oke, war doch zu doof gestellt :D ich habe es ja bereits mehrfach versucht. zumbeispiel so:

    Spoiler anzeigen
    [autoit]

    $b = 1
    While Sleep(20)
    _Check()
    $b += 1
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Check()
    $Time = IniRead(@ScriptDir & "\hallo.ini","Zeit","6","00:00:00")
    $Date = IniRead(@ScriptDir & "\hallo.ini","Date","6","01.01.2012")
    $Time = StringSplit($Time,":")
    $Date = StringSplit($Date,".")
    $NTime = StringSplit(_NowTime(),":")
    For $i = 1 To 3
    $Time[$i] = Int($Time[$i])
    $NTime[$i] = Int($nTime[$i])
    Next
    If $Time[1] <= $NTime[1] And $Time[2] <= $NTime[2] And $Time[3] <= $NTime[3] Then
    MsgBox(0,"",$Time)
    Else
    For $i = 1 To 3
    MsgBox(0,"","Klappts? " & $NTime[$i])
    Next
    EndIf
    EndFunc

    [/autoit]

    Das sind einfach nur schnelle skripts, um zu schauen, wie es wie funktionieren kann/könnte :/

    Ich hatte es auch so versucht, aber so klappte es nur ohne datum und es gab schwirigkeiten bei der "Zeitüberschreitung" von 23:59 auf 00:01

    [autoit]

    $sTime = StringRight("0" & $H, 2) & ":" & StringRight("0" & $M, 2) & ":" & StringRight("0" & $S, 2)
    If $sTime <= _NowTime() Then

    [/autoit]

    Jedes skript hat irgendwo vorteile aber irgendwo klappts dan auch doch nicht ;D

  • Clock timer

    • Niccoo
    • 1. Mai 2012 um 15:18

    Heyho liebe com :)

    Ich versuche schon seid etwas längerem einen timer zu bauen. Er soll eine Zeit aus meiner Ini datei auslesen (die der benutzer vorher angegeben hat) z.B. 6=14:45:31. Das Programm soll jz in der hauptschleife immer die Ini datei durch gehen und überprüfen, ob einer der Zeiten ÄLTER als die aktuelle ist (also ob die zeit bereits rum ist ^^)

    Das würde dan irgendwie so aussehen:

    14:45:31 ist größer als aktuelle zeit. daher soll er jz das machen.


    Noch eine erweiterung, ich möchte das es auch mit tagen gehen. Also weil es kann ja passieren, das eine zeit wie 01:12:34 aber am 02.05.2012 so das er das auch erkennt. Das ist irgendwie voll zu erklären ^^ wenn es immer noch sehr unverständlich ist, einfach nochmal nachfragen. Dann kan ich vll. noch schnell ein fail skript von mir dazu stecken :P

    Ach und eins noch, er soll auf die eingespeicherte zeit vll. ab und zu mal was draufrechen. Wie zumbeispeil einfach mal 5min dazu oder so oder die zeit *2 das dan aus 14:45:31 - 05:31:02 wird.

  • 2 Skripts verbinden

    • Niccoo
    • 15. April 2012 um 10:41

    Ich kenne mich damit aber wie gesagt nicht aus :/ ich kan mir da irgendwie auch nicht vorstellen wie man sowas machen kann. Allerhöchstens mit WinHttp auf die seite navigieren & dann den quellcode auslesen...

  • 2 Skripts verbinden

    • Niccoo
    • 14. April 2012 um 16:48

    Also mit WinHttp kenne ich mich aus *sehr gut woher nur?* aber was das andere ist. KEINE AHNUNG! :D aber ich denke mal das ist son server im netz oder soo... Aber das spiel ist eig. nur ein Schulprojekt. Ich soll in info ein referat halten & ich will mein lehrer schocken ;pp sollte eig. Die geschichte des Computers vorstellen :O *LAANGWEILIG!* hatte da kein bock druf und mache jz das :D aber das login system über der Ini ist naja nicht gewollt, aber ich will/kann es nicht übers internet laufen lassen. Da ALLE seiten gespert sind solange sie nicht vorher EXTRA MANUELL freigegeben werden.

    & das soll auch ein spiel werden, was man mal spielen kan wenn man mal kein bock auf Unterricht hat ;pp

  • 2 Skripts verbinden

    • Niccoo
    • 14. April 2012 um 11:22

    Ja das muss ich auch noch irgendwie machen. Aber das mit dem töte so & so viele gegner um eine Welle aufzusteigen habe ich auch. Wenn du es geschaft hast kommt man zurück zum Titelbild & kan sich die upgrades kaufen. Wie gesagt, muss alles noch verfeinert werden ist ist gerade mal im aufbau... Aber ich will mein Login system da irgendwie noch einbauen, und in den einzelnden Ini`s werden dan die daten alle gespeichert. Wie Wave, upgrades etc etc.

  • 2 Skripts verbinden

    • Niccoo
    • 14. April 2012 um 10:47

    Hehe das ist mitlerweile nicht mal mehr die aktuellste version vom spiel :D ich bin eig. tag täglich am Skrippen & verbessern. Habe das jz mit upgrades und waves gemacht. Das muss aber noch verfeinert werden

  • 2 Skripts verbinden

    • Niccoo
    • 14. April 2012 um 00:21

    Naja, soooooo schlecht bin ich dan doch nicht ;D ich habe den Login einfach nur super krass umstendlich geskrippt ;oo ist auch bereits veraltet, habe den einfacher gemacht. Hinzugefügt habe ich den noch nicht. Aber das titelbild zu meinem Spiel B-) aber das hätte ich hofe Marsi und developer nie fertig bekommen. Aber sie haben die ruhe behalten und mir geholfen ^^ achja und die version vom spiel, die ich immer hochlade ist ohne grafiken, da ich die nicht über GDIPlus mache sonder als jpg/gif dazulade & ich will nicht immer alles hochladen ^^

  • 2 Skripts verbinden

    • Niccoo
    • 13. April 2012 um 23:44

    Aber wenn ich am anfang vom Spiel #incluod 'blabla.au3' mache & das spiel als exe mache, und auf dem rechner wo es ausgeführt wird kein Autoit drauf ist, könnten sie es dan dennoch starten?

  • 2 Skripts verbinden

    • Niccoo
    • 13. April 2012 um 23:05

    Oder ich verbinde sie einfach in ein Skript, aber das wird megaaa schwer :D da ich MustDeklarVariablen habe & ich eig. noch ein noob bin :pp aber das wird schon ;)) esseiden es gibt eine richtige lösung... irgendwie mit #incloud oder soo

  • 2 Skripts verbinden

    • Niccoo
    • 13. April 2012 um 22:08

    Habe es einfach mal verbessert, habe es schnell geschrieben, da ich weiter kommen möchte :D

  • 2 Skripts verbinden

    • Niccoo
    • 13. April 2012 um 18:42

    Hey,

    Ich möchte gerne 2 Skripts miteinander verbinden, die am besten auch Kommunizieren können. Das erste Skript ist ein login, das auch überprüft ob daten vorhanden sind und soo... Das zweite Skript ist das spiel, an ihm soll der ID weitergegeben werden, damit man eine "Speicher" funktion hat.

    Beispiel: Ich habe auf dem Desktop den Login. Starte ihn, & logge mich ein. Wenn der Login erfolgreich war, sollen ein paar parameter übergeben werden ($ID & $NR das sind jeweils der Speicherort & der Name womit eingeloggt wird) danach soll (wenns geht) das gesamte Login Skript geschlossen werden. Er soll einfach mit dem Spiel fortfahren.

    Ich weiß nicht obs von nöten ist, aber ich poste dazu mal beide (fürs erste nur 2) Skripts die verbunden werden sollen.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <string.au3>
    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Login", 300, 134)
    $LogID = GUICtrlCreateInput("", 24, 24, 121, 21)
    $LogNR = GUICtrlCreateInput("", 24, 56, 121, 21)
    $Label1 = GUICtrlCreateLabel("Name", 168, 24, 32, 17)
    $bLogin = GUICtrlCreateButton("Login", 24, 88, 75, 25, 0)
    GUICtrlSetOnEvent(-1,"_Login")
    $bPw = GUICtrlCreateButton("Pw?", 112, 88, 43, 25, 0)
    GUICtrlSetOnEvent(-1,"_Passwort_Vergessen")
    $bNeuAcc = GUICtrlCreateButton("Neu Registrieren", 160, 88, 115, 25, 0)
    GUICtrlSetOnEvent(-1,"_NeuAccGUI")
    $Label2 = GUICtrlCreateLabel("Registrierungsnummer", 168, 56, 108, 17)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Neu", 199, 349)
    $iName = GUICtrlCreateInput("", 24, 48, 153, 21)
    $iAntwort = GUICtrlCreateInput("", 24, 128, 153, 21)
    $iNummer = GUICtrlCreateInput("", 24, 184, 121, 21)
    $iNachname = GUICtrlCreateInput("", 24, 248, 121, 21)
    $Label1 = GUICtrlCreateLabel("Name für Highscore/Login", 24, 24, 129, 17)
    $Label2 = GUICtrlCreateLabel("Geheimwort, wenn du dein"& @CRLF &"PW vergessen solltest", 24, 80, 238, 41)
    $Button1 = GUICtrlCreateButton("Bestätigen", 24, 280, 155, 65, 0)
    GUICtrlSetOnEvent(-1,"_NeuAccBestaetigen")
    $Label3 = GUICtrlCreateLabel("Rechnernummer", 24, 160, 82, 17)
    $Label4 = GUICtrlCreateLabel("Nachname, zur Identifikation", 24, 216, 139, 17)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close2")
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form3 = GUICreate("Passwort Vergessen", 246, 142)
    $PWVergessenName = GUICtrlCreateInput("", 24, 16, 121, 21)
    $Label15 = GUICtrlCreateLabel("Name", 160, 16, 32, 17)
    $PWVergessenWort = GUICtrlCreateInput("", 24, 48, 121, 21)
    $Label25 = GUICtrlCreateLabel("Geheimwort", 160, 48, 60, 17)
    $GETPW = GUICtrlCreateButton("Passwortanfrage", 24, 80, 195, 41, 0)
    GUICtrlSetOnEvent(-1,"_Get_PW")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close3")
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _Login()
    Local $ID,$PW, $NR, $i, $g , $maxConfigs = 1, $maxCheck = False
    $ID = GUICtrlRead($LogID)
    $NR = GUICtrlRead($LogNR)
    GUICtrlSetData($LogID,"")
    GUICtrlSetData($LogNR,"")
    $PW = InputBox("Passwort","Gib hier dein Passwort ein","","*")

    [/autoit] [autoit][/autoit] [autoit]

    While $maxCheck = False
    if FileExists("C:\Users\Nico\Desktop\Schule\" & $NR & "\config" & $maxConfigs & ".ini") Then
    $maxConfigs += 1
    Else
    $maxCheck = True
    $maxConfigs -= 1
    If $maxConfigs = 0 Then $maxConfigs = 1
    EndIf
    WEnd
    MsgBox(0,"",$maxConfigs)
    For $g = 1 To $maxConfigs
    $Name = IniRead("C:\Users\Nico\Desktop\Schule\" & $NR & "\config" & $g & ".ini","Name","Name",0)
    $Passwort = IniRead("C:\Users\Nico\Desktop\Schule\" & $NR & "\config" & $g & ".ini","Passwort","Passwort",0)
    If $Name = $ID and $Passwort = $PW Then
    MsgBox(64,"Login","Login Erfolgt...",2000)
    ; #include 'Defender.au3'
    ExitLoop
    EndIf
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Get_PW()
    Local $PWN, $PWW, $i, $j, $h, $maxConfigs = 1,$maxCheck = False,$PassWort,$RechnerNr,$LoginPW
    $PWN = GUICtrlRead($PWVergessenName)
    $PWW = GUICtrlRead($PWVergessenWort)
    GUICtrlSetData($PWVergessenName,"")
    GUICtrlSetData($PWVergessenWort,"")

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 10
    For $j = 1 To 10
    if FileExists("C:\Users\Nico\Desktop\Schule\" & $i & "\config" & $maxConfigs & ".ini") Then
    $maxConfigs += 1
    Else
    $maxCheck = True
    $maxConfigs -= 1
    If $maxConfigs = 0 Then $maxConfigs = 1
    EndIf
    Next
    For $g = 1 To $maxConfigs
    $Name = IniRead("C:\Users\Nico\Desktop\Schule\" & $i & "\config" & $g & ".ini","Name","Name",0)
    $PassWort = IniRead("C:\Users\Nico\Desktop\Schule\" & $i & "\config" & $g & ".ini","Wort","Wort",0)
    If $Name = $PWN and $PassWort = $PWW Then
    $RechnerNr = IniRead("C:\Users\Nico\Desktop\Schule\" & $i & "\config" & $g & ".ini","Rechner","Nummer",0)
    $LoginPW = IniRead("C:\Users\Nico\Desktop\Schule\" & $i & "\config" & $g & ".ini","Passwort","Passwort",0)
    MsgBox(64,"Daten","Name: "& $Name & @CRLF & "Passwort: "& $LoginPW & @CRLF & "Rechner Nr.: " & $RechnerNr)
    _Close3()
    ExitLoop
    EndIf
    Next
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Passwort_Vergessen()
    GUISetState(@SW_SHOW,$Form3)
    GUISetState(@SW_HIDE,$Form1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _NeuAccBestaetigen()
    Global $sName = GUICtrlRead($iName)
    Global $sAntwort = GUICtrlRead($iAntwort)
    Global $intNummer = Int(GUICtrlRead($iNummer))
    Global $sNachname = GUICtrlRead($iNachname)
    Local $check = False
    Local $k = 0
    Local $n = 1
    Local $pw
    Global $newAcc = True

    [/autoit] [autoit][/autoit] [autoit]

    _AccVergleich()

    [/autoit] [autoit][/autoit] [autoit]

    If $newAcc = True Then
    $pw = InputBox("Passwort","Bitte gib dein Passwort ein, es wird keine 2 abfrage kommen!","","*")
    While $check = False
    $k += 1
    if not FileExists("C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $k & ".ini") Then
    $check = True
    EndIf
    WEnd
    IniWrite("C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $k & ".ini","Name","Name",$sName)
    IniWrite("C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $k & ".ini","Name","Nachname",$sNachname)
    IniWrite("C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $k & ".ini","Rechner","Nummer",$intNummer)
    IniWrite("C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $k & ".ini","Wort","Wort",$sAntwort)
    IniWrite("C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $k & ".ini","Passwort","Passwort",$pw)
    $k = 0
    If Not @error Then
    MsgBox(64,"Erfolg","Account erfolgreich angelegt!")
    GUICtrlSetData($iName,"")
    GUICtrlSetData($iAntwort,"")
    GUICtrlSetData($iNummer,"")
    GUICtrlSetData($iNachname,"")
    _Close2()
    Else
    MsgBox(64,"Error","Es gab folgende Error meldung: " & @error)
    EndIf
    EndIf
    $newAcc = False
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _AccVergleich()
    Local $i, $g ,$Name, $Nachname, $j
    Local $maxConfigs = 1
    Local $maxCheck = False

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To 10
    For $j = 1 To 10
    if FileExists("C:\Users\Nico\Desktop\Schule\" & $i & "\config" & $maxConfigs & ".ini") Then
    $maxConfigs += 1
    Else
    $maxCheck = True
    $maxConfigs -= 1
    If $maxConfigs = 0 Then $maxConfigs = 1
    EndIf
    Next
    For $g = 1 To $maxConfigs
    $Name = IniRead("C:\Users\Nico\Desktop\Schule\" & $i & "\config" & $g & ".ini","Name","Name",0)
    $Nachname = IniRead("C:\Users\Nico\Desktop\Schule\" & $i & "\config" & $g & ".ini","Name","Nachname",0)
    If $Name = $sName and $Nachname = $sNachname Then
    MsgBox(64,"Error","Du hast bereits einen Account")
    $newAcc = False
    ExitLoop
    EndIf
    Next
    Next
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Close3()
    GUISetState(@SW_SHOW, $Form1)
    GUISetState(@SW_HIDE, $Form3)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _NeuAccGUI()
    GUISetState(@SW_SHOW, $Form2)
    GUISetState(@SW_HIDE, $Form1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Close2()
    GUISetState(@SW_SHOW, $Form1)
    GUISetState(@SW_HIDE, $Form2)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Ich weiß, der loginner ist nicht sauber geskript, man könnte ihn bestimmt verbessern. Aber viele sachen müssen sogar soo umstendlich sein, da es eine Speicher funktion für unsere Schule werden soll.

    hier das Spiele Skript(ein dank an Marsi& developer):

    [autoit]

    #include <GUIConstants.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt('GUICloseOnESC', 0) ; Beenden mit Esc ?
    Opt('GUIOnEventMode', 1) ; Event Mode
    Opt('MustDeclareVars', 1) ; Variablen müssen deklariert werden. (sauberes Programmieren nötig)
    Opt('MouseCoordMode', 2) ; Mauskoordinaten relativ zum Fenster

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $iBreite = 800, $iHoehe = 400, $iReihen = 10, $iDiagonale = Sqrt($iBreite^2+$iHoehe^2)

    [/autoit] [autoit][/autoit] [autoit]

    ; Bei 10 Reihen ist oben und unten jeweils eine halbe Reihe Luft. Daher sind nur 9 verfügbar. (Reihe 1 bis 9)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI, $hGFX, $hBMP, $hBUF, $hBrush[8], $hPen[1], $aPos[2]

    [/autoit] [autoit][/autoit] [autoit]

    Global $Gegner[1][4]
    ; 0 = X - Koordinate
    ; 1 = Y - Koordinate
    ; 2 = Farbe (eine Zahl für die Brush)
    ; 4 = Zustand (True=Lebend oder False=Tod). Ist der Gegner Tod wird er nicht mehr gezeichnet und nach maximal einem Frame gelöscht !

    [/autoit] [autoit][/autoit] [autoit]

    Global $Pfeile[1][6]
    ;~ für erste dimension wert 1, da noch kein pfeil existiert und 1 der minimalwert ist
    ;~ [x][0] = X Koordinate
    ;~ [x][1] = Y Koordinate
    ;~ [x][2] = Vx ( Vektor in X Richtung )
    ;~ [x][3] = Vy ( Vektor in Y Richtung )
    ;~ [x][4] = Pfeilgeschwindigkeit in Px/Frame
    ;~ [x][5] = Anzahl zurückgelegte Pixel auf dem Spielfeld z.B. wird er nach 1000 Pixeln nicht mehr auf dem Feld sein. Das Spaart die Kollisionskontrolle mit dem Pfeil und dem Spielfeld !

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Defender", $iBreite, $iHoehe)
    $hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hBMP = _GDIPlus_BitmapCreateFromGraphics($iBreite, $iHoehe, $hGFX)
    $hBUF = _GDIPlus_ImageGetGraphicsContext($hBMP)

    [/autoit] [autoit][/autoit] [autoit]

    $hBrush[0] = _GDIPlus_BrushCreateSolid(0xFF00592A) ; Weiss
    $hBrush[1] = _GDIPlus_BrushCreateSolid(0xFF91AAB9) ; Armbrust
    $hBrush[2] = _GDIPlus_BrushCreateSolid(0xFF630304) ; Gegner 1
    $hBrush[3] = _GDIPlus_BrushCreateSolid(0xFF2E5B92) ; Gegner 2
    $hBrush[4] = _GDIPlus_BrushCreateSolid(0xFFFDD00A) ; Gegner 3
    $hBrush[5] = _GDIPlus_BrushCreateSolid(0xFF65583A) ; Gegner 4
    $hBrush[6] = _GDIPlus_BrushCreateSolid(0xFF000000) ; Gegner 5
    $hBrush[7] = _GDIPlus_BrushCreateSolid(0xFF540072) ; Schuss der Armbrust

    [/autoit] [autoit][/autoit] [autoit]

    $hPen[0] = _GDIPlus_PenCreate(0xFF91AAB9, 4)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsSetSmoothingMode($hBUF, 4)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent(-3, '___Exit', $hGUI) ; Exit
    OnAutoItExitRegister('_Freigeben') ; Beim Beenden auch alle Ressourcen freigeben.
    GUIRegisterMsg(0xF, 'WM_PAINT') ; Neu Zeichnen, wenn Windows das gerne so hätte...
    GUISetState(@SW_SHOW)

    [/autoit] [autoit][/autoit] [autoit]

    _AddPfeil() ; Den Timer starten, damit der erste Schuss früher geht.

    [/autoit] [autoit][/autoit] [autoit]

    While Sleep(20) ; Bessere Variante, als das Sleep unten hin zu schreiben. Ein Sleep kann nur 10, 20, 30 usw sein. Alle anderen Werte funktionieren nicht richtig... (Eigentheit von AutoIt)

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsClear($hBUF, 0xFF00592A)

    [/autoit] [autoit][/autoit] [autoit]

    $aPos = MouseGetPos() ; Mausposition bei jedem Schleifendurchlauf nur ein Mal holen reicht aus.

    [/autoit] [autoit][/autoit] [autoit]

    _AddPfeil() ; Man drückt die Linke Maustaste ? --> Feuer ! If _IsPressed('01') Then

    [/autoit] [autoit][/autoit] [autoit]

    _ZeichnePfeile()
    _ZeichneGegner()
    _ZeichneArmbrust()

    [/autoit] [autoit][/autoit] [autoit]

    If UBound($Gegner) < 15 And Not Random(0, 30, 1) Then _AddGegner(Random(1, 9, 1))

    [/autoit] [autoit][/autoit] [autoit]

    ; ToolTip('Anzahl Gegner: ' & UBound($Gegner) - 1 & @CRLF & 'Anzahl Pfeile: ' & UBound($Pfeile) - 1)

    [/autoit] [autoit][/autoit] [autoit]

    WM_PAINT()

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _ZeichneArmbrust()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsFillEllipse($hBUF, -25, $iHoehe / 2 - 25, 50, 50, $hBrush[1])

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_ZeichneArmbrust

    [/autoit] [autoit][/autoit] [autoit]

    Func _ZeichneGegner()

    [/autoit] [autoit][/autoit] [autoit]

    Local $iUbound = UBound($Gegner) ; So viele gegner gibt es !
    Local $aKlon[$iUbound] ; Klon Array.

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $iUbound - 1 Step 1 ; Im 0ten Array steht nix. Daher wird bei 1 begonnen.

    [/autoit] [autoit][/autoit] [autoit]

    If $Gegner[$i][3] = False Then
    $aKlon[$i] = 1 ; Toten Gegner löschen
    ContinueLoop ; Wenn der Gegner Tod ist wird sein Schleifendurchlauf übersprungen.
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $Gegner[$i][0] -= 2 ; Bewegen in X Richtung

    [/autoit] [autoit][/autoit] [autoit]

    If $Gegner[$i][0] <= - 50 Then $aKlon[$i] = 1 ; Wenn der Gegner hinten ist, wird er gelöscht.
    ; Später kommt hier hin, dass der Gegner von einem Pfeil getroffen wird oder sowas.
    ; Verschoben. Die Abfrage kommt zu den Pfeilen. Das ist aber reine Geschmackssache...

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsFillEllipse($hBUF, $Gegner[$i][0]-25, $Gegner[$i][1]-25, 50, 50, $hBrush[$Gegner[$i][2]])

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    _DelGegner($aKlon)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _ZeichnePfeile()

    [/autoit] [autoit][/autoit] [autoit]

    Local $iUbound = UBound($Pfeile) ; so viele Pfeile gib es
    Local $iUbound_Gegner ; und so viele Gegner. Muss hier noch nicht bestimmt werden.
    Local $aKlon[$iUbound] ; Klon

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To $iUbound - 1 Step 1

    [/autoit] [autoit][/autoit] [autoit]

    $Pfeile[$i][0] += $Pfeile[$i][2] * $Pfeile[$i][4]
    $Pfeile[$i][1] += $Pfeile[$i][3] * $Pfeile[$i][4]

    [/autoit] [autoit][/autoit] [autoit]

    $Pfeile[$i][5] += $Pfeile[$i][4] ; Zurückgelegte Strecke in Pixeln.

    [/autoit] [autoit][/autoit] [autoit]

    If $Pfeile[$i][5] > $iDiagonale Then ; Der Pfeil ist weiter geflogen als die Diagonale des Fensters --> Er ist Weg...
    $aKlon[$i] = 1
    ContinueLoop
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $iUbound_Gegner = UBound($Gegner)

    [/autoit] [autoit][/autoit] [autoit]

    For $o = 1 To $iUbound_Gegner - 1 Step 1
    If _Kollision_Kreis_Kreis($Gegner[$o][0], $Gegner[$o][1], $Pfeile[$i][0], $Pfeile[$i][1], 50,10) Then
    $aKlon[$i] = 1 ; Pfeil Löschen
    $Gegner[$o][3] = False ; Gegner lebt nicht mehr...
    ExitLoop ; Der Pfeil ist weg --> Er kann auch keinen weiteren Gegner treffen --> Der "Gegner Treff Loop" kann beendet werden.
    ; Entfernt man diese Zeile können zwei dicht zusammenstehende Gegner von einem einzigen Pfeil getroffen werden.
    EndIf
    Next

    [/autoit] [autoit][/autoit] [autoit]

    If $aKlon[$i] = 0 Then ; Nur zeichnen, wenn der Pfeil noch keinen Gegner getroffen hat.
    _GDIPlus_GraphicsFillEllipse($hBUF, $Pfeile[$i][0]-5, $Pfeile[$i][1] - 5, 10, 10, $hBrush[7])
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next

    [/autoit] [autoit][/autoit] [autoit]

    _DelPfeil($aKlon)

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_ZeichnePfeil

    [/autoit] [autoit][/autoit] [autoit]

    Func _AddGegner($Reihe)

    [/autoit] [autoit][/autoit] [autoit]

    Local $iUbound = UBound($Gegner) ; Wie viele Gegner gibt es ?
    ReDim $Gegner[$iUbound + 1][UBound($Gegner, 2)] ; Jetzt gibt es einen Mehr !

    [/autoit] [autoit][/autoit] [autoit]

    $Gegner[$iUbound][0] = $iBreite + 50 ; x
    $Gegner[$iUbound][1] = Int(($iHoehe / $iReihen) * $Reihe) ; y
    $Gegner[$iUbound][2] = Random(2, 6, 1) ; Farbe
    $Gegner[$iUbound][3] = True ; Zu Beginn lebt der Gegner logischerweise.

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_AddGegner

    [/autoit] [autoit][/autoit] [autoit]

    Func _AddPfeil()

    [/autoit] [autoit][/autoit] [autoit]

    Local Static $iTimer = TimerInit() ; Static Variablen behalten ihren Wert. d.h. Der Timer braucht nicht Global zu sein.

    [/autoit] [autoit][/autoit] [autoit]

    If TimerDiff($iTimer) > 750 Then ; 750ms für den Anfang sind OK. Später kann man den Wert noch skillen um schneller zu schießen.
    $iTimer = TimerInit()

    [/autoit] [autoit][/autoit] [autoit]

    Local $iUbound = UBound($Pfeile) ; Hinter den Timer. Dann wird das nur Ausgeführt, wenn es sein muss. -> Programm läuft ein gaaaaanz kleines etwas schneller, aber Kleinvieh macht auch Mist :)
    ReDim $Pfeile[$iUbound + 1][UBound($Pfeile, 2)]

    [/autoit] [autoit][/autoit] [autoit]

    Local $aVektor[2] = [$aPos[0],$aPos[1]-$iHoehe/2]
    _EinheitsVektor($aVektor) ;

    [/autoit] [autoit][/autoit] [autoit]

    $Pfeile[$iUbound][0] = 0
    $Pfeile[$iUbound][1] = $iHoehe/2
    $Pfeile[$iUbound][2] = $aVektor[0]
    $Pfeile[$iUbound][3] = $aVektor[1]
    $Pfeile[$iUbound][4] = 7 ; Geschwindigkeit des Pfeils in px/Frame

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_AddPfeil

    [/autoit] [autoit][/autoit] [autoit]

    Func _EinheitsVektor(ByRef $a) ; Ein beliebig "langer" Vektor (z.B. ( 1000 | 1000 )) wird zu einem Einheitsvektor der Länge 1 $a muss 2Dimensional sein ! $a[2]
    Local $b = ($a[0]^2+$a[1]^2)^0.5
    $a[0] = $a[0]/$b
    $a[1] = $a[1]/$b
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _DelGegner($aKlon) ; Es können ja auch mal 2 Gegner gleichzeitig sterben. Daher wird ein Klonarray eingeführt, welches aber nur nullen enthält.
    For $i = UBound($aKlon) - 1 To 1 Step -1 ; Ist ein Gegner Tot wird dieser Wert auf 1 gesetzt.
    If $aKlon[$i] = 1 Then _ArrayDelete($Gegner, $i)
    Next
    EndFunc ;==>_DeleteGegner

    [/autoit] [autoit][/autoit] [autoit]

    Func _DelPfeil(ByRef $aKlon)
    For $i = UBound($aKlon) - 1 To 1 Step -1 ; Genau gleich wie _DelGegner
    If $aKlon[$i] = 1 Then _ArrayDelete($Pfeile, $i)
    Next
    EndFunc ;==>_DelPfeil

    [/autoit] [autoit][/autoit] [autoit]

    Func _Kollision_Kreis_Kreis($x1, $y1, $kx, $ky, $d, $d2) ; Kollisionsberechnung von 2 Kreisen. (aus dem Forum kopiert. Die Funktion hab ich iwann mal entworfen und kürzlich auch im Forum gepostet)
    Return (($x1 - $kx) ^ 2 + ($y1 - $ky) ^ 2) ^ 0.5 < ($d / 2 + $d2 / 2)
    EndFunc ;==>_Kollision_Kreis_Kreis

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_PAINT()
    _GDIPlus_GraphicsDrawImage($hGFX, $hBMP, 0, 0)
    EndFunc ;==>WM_PAINT

    [/autoit] [autoit][/autoit] [autoit]

    Func _Freigeben()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDispose($hBUF)
    _GDIPlus_BitmapDispose($hBMP)
    _GDIPlus_GraphicsDispose($hGFX)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($hBrush) - 1 Step 1
    _GDIPlus_BrushDispose($hBrush[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To UBound($hPen) - 1 Step 1
    _GDIPlus_PenDispose($hPen[$i])
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc ;==>_Freigeben

    [/autoit] [autoit][/autoit] [autoit]

    Func ___Exit()
    Exit
    EndFunc ;==>___Exit

    [/autoit]

    Ich hoffe mal ihr versteht wie ich es meine & ihr wisste wie man es lösen kan ^^

    MfG Nico

  • LoginGUI

    • Niccoo
    • 13. April 2012 um 14:35

    Ich möchte gerne ein Login/Registrierer für unsere Schule machen. Da es
    dort mehrere Rechner gibt, die auf der Festplatte alle einen Einzelnden
    ordner haben (z.B. Rechner 1 hat odrdner "1" Rechner 2 hat "2" usw.) um
    das zu simulieren habe ich bei mir ein ordner mit 10 weiteren ordnern
    drinne gemacht. Einfach zum testen. Ich möchte jz. erstmal den
    Registrierer machen. Er soll die Angegebene Rechner nummer erkennen (sie werden durch den User angegebn)
    & dan alle config`s die vll. bereits in dem ordner sind durch gehen.
    Sobald es die config nicht mehr gibt, soll er sie erstellen mit den
    angegebenen Daten. Zum Beispeil:

    Ordner 5 -> in dem sind mehrere config.ini`s (config1.ini, config2.ini, config3.ini usw.) oder aber auch nicht.
    Sobald es eine config ini nicht mehr gibt. zum beispiel gib es config5.ini nicht, aber 4 schon so soll er die 5te erstellen.


    Aber bei mir vertauscht der die If schleife, wenn die bedingung FALSCH ist, macht er was in der If schleife ist & sobald die aussage WAHR ist macht er mit else weiter, aber beim 2ten durchlauf, macht er das was er machen soll wenn es WAHR ist.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <string.au3>
    #include <Date.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Opt("GUIOnEventMode", 1)

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Login", 300, 134)
    $Input1 = GUICtrlCreateInput("", 24, 24, 121, 21)
    $Input2 = GUICtrlCreateInput("", 24, 56, 121, 21)
    $Label1 = GUICtrlCreateLabel("Name", 168, 24, 32, 17)
    $bLogin = GUICtrlCreateButton("Login", 24, 88, 75, 25, 0)
    $bNeuAcc = GUICtrlCreateButton("Neu Registrieren", 160, 88, 115, 25, 0)
    GUICtrlSetOnEvent(-1,"_NeuAccGUI")
    $Label2 = GUICtrlCreateLabel("Registrierungsnummer", 168, 56, 108, 17)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    #Region ### START Koda GUI section ### Form=
    $Form2 = GUICreate("Neu", 199, 349)
    $iName = GUICtrlCreateInput("", 24, 48, 153, 21)
    $iAntwort = GUICtrlCreateInput("", 24, 128, 153, 21)
    $Label1 = GUICtrlCreateLabel("Name für Highscore/Login", 24, 24, 129, 17)
    $Label2 = GUICtrlCreateLabel("Geheimwort, wenn du dein"& @CRLF &"PW vergessen solltest", 24, 80, 238, 41)
    $Button1 = GUICtrlCreateButton("Bestätigen", 24, 280, 155, 65, 0)
    GUICtrlSetOnEvent(-1,"_NeuAccBestaetigen")
    $Label3 = GUICtrlCreateLabel("Rechnernummer", 24, 160, 82, 17)
    $iNummer = GUICtrlCreateInput("", 24, 184, 121, 21)
    $Label4 = GUICtrlCreateLabel("Nachname, zur Identifikation", 24, 216, 139, 17)
    $iNachname = GUICtrlCreateInput("", 24, 248, 121, 21)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close2")
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    Sleep(50)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _NeuAccBestaetigen()
    Local $sName = GUICtrlRead($iName)
    Local $sAntwort = GUICtrlRead($iAntwort)
    Local $intNummer = Int(GUICtrlRead($iNummer))
    Local $sNachname = GUICtrlRead($iNachname)
    Local $check = False
    Local $k = 0
    Local $n = 1

    [/autoit] [autoit][/autoit] [autoit]

    While $check = False
    $k += 1
    MsgBox(0,"","C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $k & ".ini")
    $config = IniRead("C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $k & ".ini","Name","Name",0)
    if not FileExists($config) Then
    MsgBox(0,"",$k)
    $n = $k - 1
    $check = True
    If $n <= 0 Then $n = 1
    Else
    MsgBox(0,"","Gibs nicht")
    EndIf
    WEnd
    $k = 0
    IniWrite("C:\Users\Nico\Desktop\Schule\" & $intNummer & "\config" & $n & ".ini","Name","Name",$sName)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _NeuAccGUI()
    GUISetState(@SW_SHOW, $Form2)
    GUISetState(@SW_HIDE, $Form1)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Close2()
    GUISetState(@SW_SHOW, $Form1)
    GUISetState(@SW_HIDE, $Form2)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Exit()
    Exit
    EndFunc

    [/autoit]

    Hoffe um hilfe MfG Nico

    Hat sich bereits geklärt ;)

  • Titelüberischt

    • Niccoo
    • 13. April 2012 um 14:10

    Ok :) danke jz funkts

  • Titelüberischt

    • Niccoo
    • 13. April 2012 um 12:02

    Mhm... ich habe eig. alles so umgebaut, wie es bei dir war. Rausgekommen ist etwas sehr unübersichtliches und etwas was nicht funktioniert...

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiConstantsEx.au3>
    #include <Misc.au3>
    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt('GUICloseOnESC', 1) ; Beenden mit Esc ?
    ;Opt('GUIOnEventMode', 1) ; Event Mode
    ;Opt('MustDeclareVars', 1) ; Variablen müssen deklariert werden. (sauberes Programmieren nötig)
    ;Opt('MouseCoordMode', 2) ; Mauskoordinaten relativ zum Fenster

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $iBreite = 800, $iHoehe = 400

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI, $hGFX, $hBMP, $hBUF, $hMap
    Global $iX_Start = 400, $iY_Start = 150, $iX_Optionen = 400, $iY_Optionen = 200, $iX_Beenden = 400, $iY_Beenden = 250, $sFont = "Arial", $iFontSize = 20, $sStart = "Start", $sOption = "Optionen", $sBeenden = "Beenden"

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hGUI = GUICreate("Defender", $iBreite, $iHoehe)
    $hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI)
    $hMap = _GDIPlus_ImageLoadFromFile(@ScriptDir & "\StartBild1.jpg")
    _GDIPlus_GraphicsSetSmoothingMode($hGFX, 2)

    [/autoit] [autoit][/autoit] [autoit]

    Global $hStringFormat = _GDIPlus_StringFormatCreate()
    Global $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    Global $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize)
    Global $tLayout_Start = _GDIPlus_RectFCreate($iX_Start, $iY_Start)
    Global $tLayout_Optionen = _GDIPlus_RectFCreate($iX_Optionen, $iY_Optionen)
    Global $tLayout_Beenden = _GDIPlus_RectFCreate($iX_Beenden, $iY_Beenden)
    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFFDCBA78)

    [/autoit] [autoit][/autoit] [autoit]

    Global $aInfo = _GDIPlus_GraphicsMeasureString($hGFX, $sStart, $hFont, $tLayout_Start, $hStringFormat)
    Global $iWidth_Start = DllStructGetData($aInfo[0], "Width") ;Breite
    Global $iHeight_Start = DllStructGetData($aInfo[0], "Height") ;Höhe
    Global $aInfo = _GDIPlus_GraphicsMeasureString($hGFX, $sOption, $hFont, $tLayout_Optionen, $hStringFormat)
    Global $iWidth_Optionen = DllStructGetData($aInfo[0], "Width") ;Breite
    Global $iHeight_Optionen = DllStructGetData($aInfo[0], "Height") ;Höhe
    Global $aInfo = _GDIPlus_GraphicsMeasureString($hGFX, $sBeenden, $hFont, $tLayout_Beenden, $hStringFormat)
    Global $iWidth_Beenden = DllStructGetData($aInfo[0], "Width") ;Breite
    Global $iHeight_Beenden = DllStructGetData($aInfo[0], "Height") ;Höhe

    [/autoit] [autoit][/autoit] [autoit]

    Global $tRect_Beenden,$tRect_Optionen,$tRect_Start
    $tRect_Start = DllStructCreate($tagRECT)
    DllStructSetData($tRect_Start, "Left", $iX_Start) ;Linke Kante des Rechtecks
    DllStructSetData($tRect_Start, "Top", $iY_Start) ;Obere Kante des Rechtecks
    DllStructSetData($tRect_Start, "Right", $iX_Start + $iWidth_Start) ;Rechte Kante des Rechtecks
    DllStructSetData($tRect_Start, "Bottom", $iY_Start + $iHeight_Start) ;Untere Kante des Rechteck

    [/autoit] [autoit][/autoit] [autoit]

    $tRect_Optionen = DllStructCreate($tagRECT)
    DllStructSetData($tRect_Optionen, "Left", $iX_Optionen) ;Linke Kante des Rechtecks
    DllStructSetData($tRect_Optionen, "Top", $iY_Optionen) ;Obere Kante des Rechtecks
    DllStructSetData($tRect_Optionen, "Right", $iX_Optionen + $iWidth_Optionen) ;Rechte Kante des Rechtecks
    DllStructSetData($tRect_Optionen, "Bottom", $iY_Optionen + $iHeight_Optionen) ;Untere Kante des Rechteck
    $tRect_Beenden = DllStructCreate($tagRECT)
    DllStructSetData($tRect_Beenden, "Left", $iX_Beenden) ;Linke Kante des Rechtecks
    DllStructSetData($tRect_Beenden, "Top", $iY_Beenden) ;Obere Kante des Rechtecks
    DllStructSetData($tRect_Beenden, "Right", $iX_Beenden + $iWidth_Beenden) ;Rechte Kante des Rechtecks
    DllStructSetData($tRect_Beenden, "Bottom", $iY_Beenden + $iHeight_Beenden) ;Untere Kante des Rechteck

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    GUISetOnEvent(-3,'___Exit', $hGUI) ; Exit
    OnAutoItExitRegister('_Freigeben') ; Beim Beenden auch alle Ressourcen freigeben.
    GUIRegisterMsg($WM_PAINT, "_Paint")
    GUISetState(@SW_SHOW)
    _Paint()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    While True
    Local $tPoint_MousePos
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $GUI_EVENT_PRIMARYDOWN ;Sobald die linke Maustaste innerhalb der Clientarea des Fensters geklickt wird, wird diese Nachricht gesendet. Diese Case wird ausgeführt wenn ein Linksklick auf das Fenster ausgeführt wird...
    $tPoint_MousePos = _WinAPI_GetMousePos(True, $hGUI);Mausposition wird in einem DLLStruct zurückgegeben. Die Parameter geben an, dass die Koordinaten rel. zum Fenster sein sollen.

    [/autoit] [autoit][/autoit] [autoit]

    Switch True ;Da nur jeweils einer von beiden Fällen eintreten kann, ist hier eine Switch Abfrage sinnvoller.
    Case _WinAPI_PtInRect($tRect_Start, $tPoint_MousePos)
    MsgBox(64, "Event", "Mausklick auf 'AutoIt' registriert.")
    Case _WinAPI_PtInRect($tRect_Optionen, $tPoint_MousePos)
    MsgBox(64, "Event", "Mausklick auf 'Niccoo' registriert.")
    EndSwitch
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Paint()
    _GDIPlus_GraphicsDrawImageRect($hGFX, $hMap, 0, 0, 800, 400)
    _GDIPlus_GraphicsDrawStringEx($hGFX, $sStart, $sFont, $tLayout_Start, $hStringFormat, $hBrush) ;String zeichnen
    _GDIPlus_GraphicsDrawStringEx($hGFX, $sOption, $sFont, $tLayout_Optionen, $hStringFormat, $hBrush) ;String zeichnen
    _GDIPlus_GraphicsDrawStringEx($hGFX, $sBeenden, $sFont, $tLayout_Beenden, $hStringFormat, $hBrush) ;String zeichnen
    MsgBox(0,"",$hBUF & " String" & $sBeenden & " Font " & $sFont & " Layout " & $tLayout_Beenden & "hString " & $hStringFormat & "Brsh " & $hBrush)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _Freigeben()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_GraphicsDispose($hBUF)
    _GDIPlus_BitmapDispose($hBMP)
    _GDIPlus_GraphicsDispose($hGFX)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDispose($hMap)
    _GDIPlus_StringFormatDispose($hStringFormat)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_Shutdown()

    [/autoit] [autoit][/autoit] [autoit]

    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func ___Exit()
    Exit
    EndFunc

    [/autoit]

    Ich weiß, das der Fehler irgendwo bei StringEx liegt, allerdings habe ich alle variablen richtig zugeordnet...

    Spoiler anzeigen
    [autoit]

    _GDIPlus_GraphicsDrawStringEx($hGFX, $sStart, $sFont, $tLayout_Start, $hStringFormat, $hBrush) ;String zeichnen

    [/autoit] [autoit]

    $hGUI = GUICreate("Defender", $iBreite, $iHoehe)
    $hGFX = _GDIPlus_GraphicsCreateFromHWND($hGUI)

    [/autoit] [autoit]

    $sStart = "Start"

    [/autoit] [autoit]

    $sFont = "Arial"

    [/autoit] [autoit]

    Global $tLayout_Start = _GDIPlus_RectFCreate($iX_Start, $iY_Start)
    $iX_Start = 400, $iY_Start = 150

    [/autoit] [autoit]

    Global $hStringFormat = _GDIPlus_StringFormatCreate()

    [/autoit] [autoit]

    Global $hBrush = _GDIPlus_BrushCreateSolid(0xFFDCBA78)

    [/autoit]

    Ich meine, alles richtig gemacht zu haben :/

  • Titelüberischt

    • Niccoo
    • 13. April 2012 um 10:32

    Richtig gut! Richtig fettes DANKE!!!!!!!

    Ja werde ich machen, jz da wo ich weiß wie es geht, werde ich mal ein wenig mit rumspielen und schauen wie ich es kürzer bekomme ;)

  • Titelüberischt

    • Niccoo
    • 12. April 2012 um 23:30

    Hey, ich möchte gerne für mein Defender spiel (wobei ich auch noch hilfe benötige, (gibs auch ein Thred hier im forum) da es irgendwie laggt) ein Titelbildschirm machen.

    Ich habe mir bereits ein Hintergrund in GIMP gemacht, & wollte jz mit _GDIPlus_GraphicsDrawStringEx die anderen String erstellen. Sie sollen den Titel :"Start" & "Optionen" & "Beenden" haben. Doch leider kenne ich mich damit auch noch nicht so gut aus :D ich habe bereits von name22 ein schönes beispiel Skript bekommen. Damit habe ich wenigstens die ansätze verstanden. Doch leider schaffe ich es nicht bei 2 (oder mehr) Strings die Aktionen zu Registrieren. (Ich habe die Variablen ebend flott hinzugefügt, wollte jz keine Arrys dafür erstellen (weiß nicht ob die da sogar besser wären))

    Ich glaube mein Problem liegt einfach nur an der Case & If abfrage, da er auch 2 mal die MsgBox aufruft wenn ich den 2ten String anklicke. Doch ich weiß leider nichtmal was $GUI_EVENT_PRIMARYDOWN ist :D

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <GUIConstants.au3>
    #include <WindowsConstants.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;- Author: name22 (http://www.autoit.de)

    [/autoit] [autoit][/autoit] [autoit]

    $iX = 50
    $iY = 30
    $XX = 150
    $YY = 30
    $sFont = "Arial"
    $iFontSize = 20
    $sString = "AutoIt"

    [/autoit] [autoit][/autoit] [autoit]

    $hWnd = GUICreate("Beispiel", 500, 100)
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    _GDIPlus_Startup()

    [/autoit] [autoit][/autoit] [autoit]

    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    _GDIPlus_GraphicsSetSmoothingMode($hGraphics, 2)

    [/autoit] [autoit][/autoit] [autoit]

    $hBrush = _GDIPlus_BrushCreateSolid(0xFFF4567F)
    $hBrush1 = _GDIPlus_BrushCreateSolid(0xFF0000FF)

    [/autoit] [autoit][/autoit] [autoit]

    $hStringFormat = _GDIPlus_StringFormatCreate()
    $hFamily = _GDIPlus_FontFamilyCreate($sFont)
    $hFont = _GDIPlus_FontCreate($hFamily, $iFontSize)
    $tLayout = _GDIPlus_RectFCreate($iX, $iY) ;X und Y Koordinaten angeben, Breite und Höhe ist irrelevant und kann 0 bleiben
    $tLayout1 = _GDIPlus_RectFCreate($XX, $YY) ;X und Y Koordinaten angeben, Breite und Höhe ist irrelevant und kann 0 bleiben

    [/autoit] [autoit][/autoit] [autoit]

    $aInfo = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout, $hStringFormat) ;Misst die Breite/Höhe des angegebenen Strings mit der Schrift in $hFont
    $aInfo1 = _GDIPlus_GraphicsMeasureString($hGraphics, $sString, $hFont, $tLayout1, $hStringFormat) ;Misst die Breite/Höhe des angegebenen Strings mit der Schrift in $hFont
    ;Die gewollten Daten stecken in einem DLLStruct in $aInfo[0] die anderen Array Elemente enthalten weitere Daten die hier nicht benötigt werden.
    ;Wie das Struct aufgebaut ist, steht in der Hilfe zu $tagGDIPRECTF
    $iWidth = DllStructGetData($aInfo[0], "Width") ;Breite
    $iHeight = DllStructGetData($aInfo[0], "Height") ;Höhe
    $XWidth = DllStructGetData($aInfo1[0], "Width") ;Breite
    $YHeight = DllStructGetData($aInfo1[0], "Height") ;Höhe

    [/autoit] [autoit][/autoit] [autoit]

    ;Hier wird das DLLStruct für PtInRect erstellt
    $tRect_AutoIt = DllStructCreate($tagRECT)
    DllStructSetData($tRect_AutoIt, "Left", $iX) ;Linke Kante des Rechtecks
    DllStructSetData($tRect_AutoIt, "Top", $iY) ;Obere Kante des Rechtecks
    DllStructSetData($tRect_AutoIt, "Right", $iX + $iWidth) ;Rechte Kante des Rechtecks
    DllStructSetData($tRect_AutoIt, "Bottom", $iY + $iHeight) ;Untere Kante des Rechtecks
    DllStructSetData($tRect_AutoIt, "Left", $XX) ;Linke Kante des Rechtecks
    DllStructSetData($tRect_AutoIt, "Top", $YY) ;Obere Kante des Rechtecks
    DllStructSetData($tRect_AutoIt, "Right", $XX + $XWidth) ;Rechte Kante des Rechtecks
    DllStructSetData($tRect_AutoIt, "Bottom", $YY + $YHeight) ;Untere Kante des Rechtecks

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    _Paint()
    GUIRegisterMsg($WM_PAINT, "_Paint") ;Neuzeichnen, falls Fenster verdeckt wurde.

    [/autoit] [autoit][/autoit] [autoit]

    While True
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    ExitLoop
    Case $GUI_EVENT_PRIMARYDOWN ;Sobald die linke Maustaste innerhalb der Clientarea des Fensters geklickt wird, wird diese Nachricht gesendet.
    $tPoint_MousePos = _WinAPI_GetMousePos(True, $hWnd);Mausposition wird in einem DLLStruct zurückgegeben. Die Parameter geben an, dass die Koordinaten rel. zum Fenster sein sollen.
    If _WinAPI_PtInRect($tRect_AutoIt, $tPoint_MousePos) Then MsgBox(64, "Event", "Mausklick auf 'AutoIt' registriert.")
    If _WinAPI_PtInRect($tRect_AutoIt, $tPoint_MousePos) Then MsgBox(64, "Event", "Mausklick auf 'AutoIt' registriert.")

    [/autoit] [autoit][/autoit] [autoit]

    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _Paint()
    _GDIPlus_GraphicsClear($hGraphics, 0xFFFFFFFF)
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $tLayout, $hStringFormat, $hBrush) ;String zeichnen
    _GDIPlus_GraphicsDrawStringEx($hGraphics, $sString, $hFont, $tLayout1, $hStringFormat, $hBrush1) ;String zeichnen
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    ;Aufräumen - Wichtig!
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_StringFormatDispose($hStringFormat)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_FontDispose($hFont)
    _GDIPlus_Shutdown()

    [/autoit]

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™