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. TheLuBu

Beiträge von TheLuBu

  • Texturenpack Downloader

    • TheLuBu
    • 1. Dezember 2011 um 15:46

    Habe dir mal WM_Notify eingebaut, teste mal und achte auf den index, ich denke das sollte dir schonmal weiterhelfen

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>
    #include <GuiImageList.au3>
    #include <ListViewConstants.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $hListView, $Texturearray[2][5]
    $pingcheck = Ping("www.google.de")
    If @error Then
    MsgBox(0, "Internet", "Du hast keine verbindung zum Internet! Bitte verbinde dich mit dem Internet um dieses Tool zu benutzen!")
    Exit
    EndIf

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

    $Texturearray[0][0] = "Texturenpack1"
    $Texturearray[0][1] = "32x32"
    $Texturearray[0][2] = "20 MB"
    $Texturearray[0][3] = "LINK/Pfad ZUM BILD"
    $Texturearray[0][4] = "LINK ZUM DOWNLOAD"
    $Texturearray[1][0] = "Texturenpack2"
    $Texturearray[1][1] = "64x64"
    $Texturearray[1][2] = "20 MB"
    $Texturearray[1][3] = "LINK/Pfad ZUM BILD"
    $Texturearray[1][4] = "LINK ZUM DOWNLOAD"

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

    $GUI = GUICreate("Form1", 547, 513, 192, 117)
    $Button1 = GUICtrlCreateButton("Donate", 352, 464, 65, 25, $WS_GROUP)
    $Progress1 = GUICtrlCreateProgress(24, 392, 497, 25)
    $Group1 = GUICtrlCreateGroup("Vorschau", 24, 112, 497, 257)
    $Pic = GUICtrlCreatePic("", 24,112,497,257)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Button2 = GUICtrlCreateButton("Download", 24, 448, 97, 25, $WS_GROUP)
    $Label1 = GUICtrlCreateLabel("Texturenpack #", 24, 424, 80, 17)
    $Label2 = GUICtrlCreateLabel("Größe #", 120, 424, 43, 17)
    $Label3 = GUICtrlCreateLabel("# %", 256, 424, 30, 17)
    $hListView = _GUICtrlListView_Create($GUI, "", 24, 16, 497, 89)
    _GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
    _GUICtrlListView_InsertColumn($hListView, 0, "Name", 165)
    _GUICtrlListView_InsertColumn($hListView, 1, "Auflösung", 165)
    _GUICtrlListView_InsertColumn($hListView, 2, "Größe", 165)
    ; Fügt die Items hinzu
    _GUICtrlListView_AddItem($hListView, "Texturenpack1", 0)
    _GUICtrlListView_AddSubItem($hListView, 0, "32x32", 1)
    _GUICtrlListView_AddSubItem($hListView, 0, "20 MB", 2)
    _GUICtrlListView_AddItem($hListView, "Texturenpack2", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "64x64", 1)
    _GUICtrlListView_AddSubItem($hListView, 1, "20 MB", 2)
    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd
    Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
    #forceref $hWnd, $iMsg, $iwParam
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
    $hWndListView = $hListView
    If Not IsHWnd($hWndListView) Then $hWndListView = GUICtrlGetHandle($hListView)
    $tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    Switch $hWndFrom
    Case $hWndListView
    Switch $iCode
    Case $NM_DBLCLK ; Wird vom ListView gesendet, wenn der Benutzer ein Item mit der linken Maustaste doppelklickt
    $tInfo = DllStructCreate($tagNMITEMACTIVATE, $ilParam)
    _DebugPrint("$NM_DBLCLK" & @LF & "-->hWndFrom:" & @TAB & $hWndFrom & @LF & _
    "-->IDFrom:" & @TAB & $iIDFrom & @LF & _
    "-->Code:" & @TAB & $iCode & @LF & _
    "-->Index:" & @TAB & DllStructGetData($tInfo, "Index") & @LF & _
    "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @LF & _
    "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @LF & _
    "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @LF & _
    "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @LF & _
    "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @LF & _
    "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @LF & _
    "-->lParam:" & @TAB & DllStructGetData($tInfo, "lParam") & @LF & _
    "-->KeyFlags:" & @TAB & DllStructGetData($tInfo, "KeyFlags"))
    GUICtrlDelete($Pic)
    $Pic = GUICtrlCreatePic($Texturearray[DllStructGetData($tInfo, "Index")][3], 24,112,497,257)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Pic = ' & $Pic & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    EndSwitch
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_NOTIFY
    Func _DebugPrint($s_text, $line = @ScriptLineNumber)
    ConsoleWrite( _
    "!===========================================================" & @LF & _
    "+======================================================" & @LF & _
    "-->Zeile(" & StringFormat("%04d", $line) & "):" & @TAB & $s_text & @LF & _
    "+======================================================" & @LF)
    EndFunc ;==>_DebugPrint

    [/autoit]
  • Geschwindigkeitstest mit AutoIT

    • TheLuBu
    • 29. November 2011 um 15:27

    Wann alles fertig geladen ist kann ich leider nicht sagen, ich denke mal ich würde mit den Prozessen rumspielen, mir den raussuchen, der beim Start den meisten Speicher braucht und dann starten, wenn der unter einem gewissen wert ist.

    Einen Timer startest kannst du hiermit einsetzen.

    [autoit]

    $Timer = TimerInit()
    $Diff = Timerdiff($Timer)

    [/autoit]
  • Combobox Item nicht auswählbar setzen

    • TheLuBu
    • 29. November 2011 um 11:28

    Hallo ihr lieben,
    ich habe eine Combobox, die in mehrere Kategorien unterteilt ist.
    Die jeweiligen Kategorien selbst sollen aber nicht ausgewählt werden können, nur die Unterpunkte

    [autoit]

    #include <ComboConstants.au3>
    #include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    $hGui = GUICreate("Neuen Eintrag hinzufügen", Default, Default, -1, -1)
    $Combo = GUICtrlCreateCombo("", 1, 1, 150, 100, $CBS_DROPDOWNLIST)
    _GUICtrlComboBox_AddString($Combo, "------Kategorie1")
    _GUICtrlComboBox_AddString($Combo, "Eintrag 1")
    _GUICtrlComboBox_AddString($Combo, "Eintrag 2")
    _GUICtrlComboBox_AddString($Combo, "Eintrag 3")
    _GUICtrlComboBox_AddString($Combo, "Eintrag 4")
    _GUICtrlComboBox_AddString($Combo, "------Kategorie 2")
    _GUICtrlComboBox_AddString($Combo, "Eintrag 5")
    _GUICtrlComboBox_AddString($Combo, "Eintrag 6")
    _GUICtrlComboBox_AddString($Combo, "Eintrag 7")
    _GUICtrlComboBox_AddString($Combo, "Eintrag 8")
    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    Until $msg = $GUI_EVENT_CLOSE

    [/autoit]

    In diesem Fall eben Kategorie 1 und Kategorie 2 sollen nicht ausgewählt werden können.
    Ist das möglich?

  • RestrictControlRegExp-UDF - Fehleingaben direkt verhindern, Eingabentypen festlegen

    • TheLuBu
    • 29. November 2011 um 11:14

    Ich weiß, das dieser Beitrag relativ alt ist, aber ich hatte ein Problem damit, vielleicht kann meine Lösung ja jemand gebrauchen

    Ich habe 2 GUIs, das eine konnte aus dem anderen erstellt werdden.
    Darin waren 2 Felder, welche mit der UDF kontrolliert wurden.
    Da ich nur die 2 Felder habe, habe ich mit

    [autoit]

    _RegEx_RestrictControl_setup(2)

    [/autoit]


    auch nur 2 Controls erstellt.

    Wenn die 2GUI jetzt aber mehr als einmal geöffnet wurde, bekam ich einen Out of Bound Error, da er versuchte, 2 weitere Felder hinzuzufügen, das Array war aber nicht groß genug.
    Daher habe ich eine Delete Funktion für die Fenster gebastelt.
    Vielleicht kann die ja jemand brauchen oder peethebee setzt die Funktion noch in die UDF ein ;)

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ;
    ; Function Name: _RegEx_RestrictControl_delete
    ; Description: Deletes an monitored control
    ; Parameter(s): $_re_rc_ctrlid
    ; ID of the control to be deleted
    ; Requirement(s): This UDF included
    ; Return Value(s): None.
    ; Author(s): TheLuBu
    ;
    ;===============================================================================
    Func _RegEx_RestrictControl_delete($_re_rc_ctrlid)
    Local $reset = 0, $tmparray [UBound($array__RegEx_RestrictControl)][UBound($array__RegEx_RestrictControl, 2)]
    For $i = 0 To UBound($array__RegEx_RestrictControl) - 1
    If $array__RegEx_RestrictControl[$i][0] = $_re_rc_ctrlid Then
    $reset = 1
    ContinueLoop
    EndIf
    $tmparray[$i - $reset][0] = $array__RegEx_RestrictControl[$i][0]
    $tmparray[$i - $reset][1] = $array__RegEx_RestrictControl[$i][1]
    $tmparray[$i - $reset][2] = $array__RegEx_RestrictControl[$i][2]
    $tmparray[$i - $reset][3] = $array__RegEx_RestrictControl[$i][3]
    Next
    $array__RegEx_RestrictControl = $tmparray
    $array__RegEx_RestrictControl_id_count -= 1
    EndFunc ;==>_RegEx_RestrictControl_add

    [/autoit]
  • [Fraktal] Mandelbrot-Menge

    • TheLuBu
    • 27. November 2011 um 01:37

    sehr schönes Projekt, habe es jetzt auch mal Versucht und mit einem eigenen Algorithmus durchlaufen lassen.

    Hier der Quellcode:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Array.au3>
    #include <WindowsConstants.au3>
    #include <GUIConstantsEx.au3>
    Global $hPen, $GUI, $hGraphic, $hGraphicBuff
    Global $width = 7680, $height = 4320, $Itterations = 2000
    Mandelbrotmenge()
    Func Mandelbrotmenge()
    _GDIPlus_Startup()
    $hPen = _GDIPlus_PenCreate(0xFF000000, 1, 2)
    $GUI = GUICreate("Apfel", $width, $height)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND($GUI)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics($width, $height, $hGraphic)
    $hGraphicBuff = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    renderImage()
    $s = _GDIPlus_ImageSaveToFile($hBitmap, @DesktopDir & "\7680x4320.bmp")
    GUIDelete()
    _GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_PenDispose($hPen)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_Shutdown()
    EndFunc ;==>Mandelbrotmenge
    Func renderImage()
    Local $w = $width, $h = $height
    For $i = 0 To $h
    $b = $i * 3 / $h - 1.5
    For $j = 0 To $w
    $a = $j * 3 / $w - 2
    $n = isElement($a, $b)
    If $n = -1 Then
    _GDIPlus_GraphicsDrawRect($hGraphicBuff, $j, $i, 1, 1)
    Else
    $hexstep = Hex($n, 6)
    _GDIPlus_PenSetColor($hPen, "0xFF" & $hexstep)
    _GDIPlus_GraphicsDrawRect($hGraphicBuff, $j, $i, 1, 1, $hPen)
    EndIf
    Next
    Next
    EndFunc ;==>renderImage
    Func isElement(ByRef $a, ByRef $b)
    Local $x = 0, $x2, $y = 0, $n
    For $n = 0 To $Itterations
    $x2 = $x * $x - $y * $y + $a
    $y = 2 * $x * $y + $b
    $x = $x2
    if ($x * $x + $y * $y) > 4 Then
    Return $n
    EndIf
    Next
    Return -1
    EndFunc ;==>isElement

    [/autoit]

    Wie ihr sehen könnt, relativ groß ^^, die BMP Datei ist 126 MB groß, habe sie hier mal gezipt hochgeladen.

    Hier noch der Auszug aus Scite:

    [autoit]

    +>16:07:13 AU3Check ended.rc:0
    >Running:(3.3.6.1):C:\Program Files (x86)\AutoIt3\autoit3_x64.exe "C:\Dropbox\Mandelbrotmenge.au3"
    +>00:56:05 AutoIT3.exe ended.rc:0
    >Exit code: 0 Time: 31733.303

    [/autoit]


    Vielleicht geht es ja noch was schneller als 9 Stunden ;)

    Hier noch das Bild bei RapidShare, da es hier für den Dateianhang zu groß ist:
    https://rapidshare.com/files/3872488076/7680x4320.rar

    Ich lasse es demnächst mal in einer noch höheren Auflösung durchlaufen, vielleicht 30k *30k, falls jemand Interesse hat.

  • ISN AutoIt Studio

    • TheLuBu
    • 25. November 2011 um 16:54

    Habe noch einen relativ großen Bug entdeckt,

    Die ModernMenuRaw.au3 funktioniert nicht mit Windows 7 64 Bit, alle Menüitems sind nicht sichtbar, wenn man aber die Stelle kennt und klickt, passiert auch das erwartete, also der "Link" steht aber es wird nichts angezeigt

    --EDIT--

    Hab im englischen Forum die Lösung gefunden.

    In der ModernMenuRaw.au3 die Zeile

    [autoit]

    Local $stDrawItem = DllStructCreate("uint;uint;uint;uint;uint;dword;dword;int[4];dword", $lParam)

    [/autoit]


    Durch das hier ersetzen:

    [autoit]

    If @OSArch = "X64" Then
    Local $stDrawItem = DllStructCreate("uint;uint;uint;uint;uint;hwnd;hwnd;int[4];dword", $lParam)
    Else
    Local $stDrawItem = DllStructCreate("uint;uint;uint;uint;uint;dword;dword;int[4];dword", $lParam)
    EndIf

    [/autoit]
  • Combobox mit Icons

    • TheLuBu
    • 25. November 2011 um 09:06

    So habe den Fehler gefunden.

    WM_Notify erkennt den ausgewählten Status nicht, wenn man als Stil bei den Comboboxen $CBS_DROPDOWNLIST auswählt.
    Ich kann auch mit den Standardwerten leben, also das wäre erstmal gelöst.

    Wie kann ich aber trotzdem den Status einer Combobox ändern?

    [autoit]

    GUICtrlSetState($Combo, $GUI_DISABLE)

    [/autoit]


    funktioniert z.B. trotzdem nicht

  • Combobox mit Icons

    • TheLuBu
    • 24. November 2011 um 16:01

    Hallo liebe Community,

    Ich bräuchte noch einmal Hilfe mit einer GUI.

    Ich habe mit

    [autoit]

    $Combo= _GUICtrlComboBoxEx_Create($hGui, "Text", 2, 2, 250, 100, $CBS_DROPDOWNLIST)

    [/autoit]

    eine Combobox erstell, da ich Icons in der Box haben möchte.

    Jetzt kann ich aber keine Events mehr abfragen,

    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Combo
    ExitLoop
    EndSwitch
    WEnd

    [/autoit]


    wird niemals aufgerufen.
    Gibt es eine möglichkeit, auf den Inhalt zu reagieren? Bzw. auch den State der Combobox zu verändern?

    [autoit]

    GUICtrlSetState($Combo, $GUI_DISABLE)

    [/autoit]

    klappt nämlich auch nicht.

    Vielen Dank im Vorraus

  • Listview Kleine Icons Transparent

    • TheLuBu
    • 24. November 2011 um 11:42

    hier nochmal mit Nachweis, wenn ich die Icons einfach nur auf die GUI platziere, ist es mit Transparenz, die selben Icons

    --EDIT--
    Leider ist das keine Option für mich, einen Screenshot zu machen und das damit dann zu überlagern, da in der Listview sehr viel gescrollt und gearbeitet werden soll, und jedesmal das neu einzulesen bzw. auch für jedes Item ein anderes Icon anzupassen? Ne das muss doch auch anders gehen ^^

    Dateien

    Z 56,45 kB – 331 Downloads
  • Listview Kleine Icons Transparent

    • TheLuBu
    • 24. November 2011 um 10:39

    Also ich habe das Problem mit einer Listview.
    ich möchte in den Subitems Icons anzeigen (klappt soweit).

    Die jeweilige Zeile ist immer anders gefärbt, aber die Icons sind nicht transparent.

    Ich habe schon das Forum durchsucht, aber alle tipps, die ich dazu gefunden habe, wollten nicht funktionieren.

    Die Binärdaten im Anhang erstellen die DLL mit den Bildern.

    Über Hilfe würde ich mich sehr freuen

    Dateien

    Z 56,28 kB – 322 Downloads
  • Abfrageergebnis (SQLSERVER) auf einmal in SQLite-Tabelle transferieren

    • TheLuBu
    • 22. November 2011 um 15:37

    Den ersten Beitrag editieren. Zu deiner Frage:
    Du kannst aus der bestehenden Datenbank ja einfach eine Abfrage machen (Select * From Datenbank;) Das ganze kommt wird in einem Array gespeichert.
    Die Abfrage Dann in einer Schleife in einen String schreiben:

    [autoit]

    Local $aSql = 'Begin Transaction ;' & @CRLF
    For $i = 1 To $AnzahlanDatensätzen
    $aSql &= "INSERT INTO tabelle VALUES ('" & $Kararray[$i][0] & "',('" & $Kararray[$i][1] & "',('" & $Kararray[$i][2] & "',('" & $Kararray[$i][N] & "');" & @CRLF
    Next
    _SQLite_Exec(-1, $aSql)

    [/autoit]

    Das ganze sollte dann nicht all zu lange dauern

  • SQLite Datumsfunktionen

    • TheLuBu
    • 22. November 2011 um 15:27

    Hallöchen ihr lieben,
    ich habe eine Frage zur SQLite Syntax.
    Ich habe in einer Datenbank ein Datum im Format YYYY-MM-DD, jetzt möchte ich nur die Datensätze auswählen, die weniger als oder genau 30 Tage alt sind (von heute aus).
    bei MySQL bzw. MSSQL wäre es mit der WHERE bedingen

    Code
    Select * From table WHERE (CURRENT_DATE - Datum) <= 30;


    Für SQLite kriege ich es aber nicht hin.
    Kann mir jemand schnell ein Beispiel posten?

    Vielen Dank

    --EDIT-- Warum finde ich die Lösung eigentlich immer kurz nachdem ich hier gepostet habe?

    Code
    Select * From table WHERE (julianday(Date('now')) - julianday(Datum)) < 30;
  • ISN AutoIt Studio

    • TheLuBu
    • 22. November 2011 um 14:59

    Kleinen Bug entdeckt, wenn man Scite und ISN offen hat kann man Scite keine befehle mehr senden (z.B. NUMBLOCK -).
    ISN nutzt den Hotkey, auch wenn es nicht das aktive Fenster ist.
    Habe die anderen Htkeys jetzt noch nicht getestet, aber bei dem ist es auf jeden Fall so ;)

  • ISN AutoIt Studio

    • TheLuBu
    • 16. November 2011 um 16:50

    Zwei Sachen fände ich noch super

    Zum einen den Quellcode :D, um Addons/Plugins schreiben zu können bzw. evtl. Fehler selbst ausbessern zu können, wäre schön wenns OpenSource wäre.
    Zum anderen fände ich eine AutoUpdate Funktion Klasse, die auf eine neue Version hinweist

  • gültige Kombination finden

    • TheLuBu
    • 16. November 2011 um 16:01

    Leider bleibt der auch bei mir in ner Endlosschleife

  • Aus Exceltabelle Daten kopieren, in I-Seite suchen und Preise in Excel zurückscheiben

    • TheLuBu
    • 15. November 2011 um 15:57

    Aus der AutoIt Hilfe

    Spoiler anzeigen
    [autoit]

    Der URL Parameter sollte in dieser Form sein "http://www.irgendeineseite.com/pfad/Datei.html" - so wie eine Adresse die in einen Browser eingegeben wird.
    Um einen Benutzernamen und ein Passwort zu verwenden werden diese im Format "benutzername:passwort@" vor den Servernamen geschrieben. Beispiel "http://meinbenutzername:meinpasswort@http://www.irgendeineseite.com"

    [/autoit]
  • gültige Kombination finden

    • TheLuBu
    • 15. November 2011 um 15:53

    hab dran gearbeitet, lasse grade durchlaufen und schaue ob es diesmal klappt ( die große Datei)

  • gültige Kombination finden

    • TheLuBu
    • 14. November 2011 um 15:59

    Habe durch AspirinJunkie grade gemerkt, das ein Fehler bei der SQL Variante ist, deine Beispielwerte funktionieren doch, suche grade den Fehler

  • Text aus Ausgabefeld in Zwischenablage kopieren

    • TheLuBu
    • 14. November 2011 um 15:29
    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>

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

    $Form1 = GUICreate("Form1", 399, 243, 192, 124)
    $List1 = GUICtrlCreateList("", 120, 80, 220, 25)
    $Button1 = GUICtrlCreateButton("Start", 120, 120, 75, 25)
    $Button2 = GUICtrlCreateButton("Beenden", 120, 160, 75, 25)
    GUISetState(@SW_SHOW)

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

    $Text = "Dieser Text soll in die Zwischenablage"

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    GUICtrlSetData($List1, $Text)
    Case $Button2
    Exit
    Case $List1
    ClipPut (' ')
    ClipPut( Guictrlread($List1))
    EndSwitch
    WEnd

    [/autoit]

    Benutz bitte den Autoit Tag, damit es direkt formatiert wird ;)

  • gültige Kombination finden

    • TheLuBu
    • 14. November 2011 um 13:58
    Spoiler anzeigen
    [autoit]

    ´#include <Array.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    Global $aResult, $iRows, $iColumns, $tmpResult, $tmpiColumns, $tmpiRows
    Global $limits[7][3], $verb[8][4]
    _SQLite_Startup()
    _SQLite_Open()
    _SQLite_Exec(-1, "CREATE TABLE LIMITS (ID INTEGER PRIMARY KEY AUTOINCREMENT, Nutzer VARCHAR(50), Maxlimit VARCHAR(3), Done Varchar(3), Lastchanged VARCHAR(10));")
    _SQLite_Exec(-1, "CREATE TABLE Verbindungen (ID INTEGER PRIMARY KEY AUTOINCREMENT, Nutzer_1 VARCHAR(50),Nutzer_2 VARCHAR(50), ChosenUser VARCHAR(50));")

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

    Testdatacreate()
    Eindeutig()
    While True
    $s = NachEindeutig()
    If IsArray($s) Then
    MsgBox(0, "FEHLER", "Die gegebenen Werte führen zu keiner Lösung.")
    _ArrayDisplay($s)
    ;~ _SQLite_GetTable2d(-1, "SELECT * From LIMITS;", $aResult, $iRows, $iColumns)
    ;~ _ArrayDisplay($aResult)
    ;~ _SQLite_GetTable2d(-1, "SELECT * From Verbindungen;", $aResult, $iRows, $iColumns)
    ;~ _ArrayDisplay($aResult)
    Exit
    ElseIf @error = 2 Then
    MsgBox(0, "FEHLER", "Es gab keinen Startwert, über den geprüft werden konnte.")
    Exit
    ElseIf $s = 2 Then
    MsgBox(0, "ERFOLG", "alles erledigt")
    _SQLite_GetTable2d(-1, "SELECT * From Verbindungen;", $aResult, $iRows, $iColumns)
    _ArrayDisplay($aResult)
    _SQLite_GetTable2d(-1, "SELECT * From LIMITS;", $aResult, $iRows, $iColumns)
    _ArrayDisplay($aResult)
    Exit
    EndIf
    WEnd
    Func Testdatacreate()
    Local $aSql = 'Begin Transaction ;' & @CRLF
    $limits[1][0] = "A"
    $limits[1][1] = "1"
    $limits[2][0] = "B"
    $limits[2][1] = "3"
    $limits[3][0] = "C"
    $limits[3][1] = "1"
    $limits[4][0] = "D"
    $limits[4][1] = "2"
    $limits[5][0] = "E"
    $limits[5][1] = "0"
    $limits[6][0] = "F"
    $limits[6][1] = "0"
    For $i = 1 To 6
    $aSql &= "INSERT INTO LIMITS (Nutzer,Maxlimit,Done,Lastchanged) VALUES ('" & $limits[$i][0] & "', '" & $limits[$i][1] & "', '0', '-1');" & @CRLF
    Next
    $verb[1][0] = "A"
    $verb[1][1] = "B" ;B
    $verb[2][0] = "A"
    $verb[2][1] = "D" ;D
    $verb[3][0] = "A"
    $verb[3][1] = "C" ;C
    $verb[4][0] = "A"
    $verb[4][1] = "F" ;A
    $verb[5][0] = "B"
    $verb[5][1] = "D" ;D
    $verb[6][0] = "B"
    $verb[6][1] = "C" ;B
    $verb[7][0] = "E"
    $verb[7][1] = "D" ;D
    For $i = 1 To 7
    $aSql &= "INSERT INTO Verbindungen (Nutzer_1,Nutzer_2,ChosenUser) VALUES ('" & $verb[$i][0] & "', '" & $verb[$i][1] & "', '');" & @CRLF
    Next
    $aSql &= 'Commit Transaction ;' & @CRLF
    _SQLite_Exec(-1, $aSql)
    EndFunc ;==>Testdatacreate
    Func Eindeutig()
    For $i = 1 To UBound($verb) - 1
    $iRval = _SQLite_GetTable(-1, "SELECT Maxlimit,Done FROM LIMITS WHERE Nutzer = '" & $verb[$i][0] & "';", $aResult, $iRows, $iColumns)
    If $aResult[3] = 0 Or $aResult[3] = $aResult[4] Then
    _SQLite_Exec(-1, "UPDATE Verbindungen SET ChosenUser = '" & $verb[$i][1] & "' WHERE Nutzer_1 = '" & $verb[$i][0] & "' AND Nutzer_2 = '" & $verb[$i][1] & "';")
    _SQLite_Exec(-1, "UPDATE LIMITS SET Done = Done + 1 WHERE Nutzer = '" & $verb[$i][1] & "';")
    EndIf
    $iRval = _SQLite_GetTable(-1, "SELECT Maxlimit,Done FROM LIMITS WHERE Nutzer = '" & $verb[$i][1] & "';", $aResult, $iRows, $iColumns)
    If $aResult[3] = 0 Or $aResult[3] = $aResult[4] Then
    _SQLite_Exec(-1, "UPDATE Verbindungen SET ChosenUser = '" & $verb[$i][0] & "' WHERE Nutzer_1 = '" & $verb[$i][0] & "' AND Nutzer_2 = '" & $verb[$i][1] & "';")
    _SQLite_Exec(-1, "UPDATE LIMITS SET Done = Done + 1 WHERE Nutzer = '" & $verb[$i][0] & "';")
    EndIf
    Next
    EndFunc ;==>Eindeutig
    Func NachEindeutig()
    _SQLite_GetTable(-1, "SELECT ID FROM LIMITS WHERE Done > Maxlimit;", $aResult, $iRows, $iColumns)
    If $iRows > 0 Then
    _SQLite_GetTable2d(-1, "SELECT DISTINCT ChosenUser,Done,Maxlimit FROM Verbindungen INNER JOIN LIMITS ON Verbindungen.ChosenUser = LIMITS.Nutzer WHERE LIMITS.Done > LIMITS.Maxlimit;", $aResult, $iRows, $iColumns)
    Return $aResult
    EndIf
    _SQLite_GetTable(-1, "SELECT ID FROM LIMITS WHERE Done <> Maxlimit;", $aResult, $iRows, $iColumns)
    If $iRows = 0 Then Return 2
    Local $Who
    _SQLite_GetTable(-1, "SELECT Nutzer FROM LIMITS WHERE Maxlimit = Done AND Done != '0'", $aResult, $iRows, $iColumns)
    $Users = $aResult
    If UBound($Users) - 1 < 2 Then Return SetError(2, 0, 0)
    For $k = 2 To UBound($Users) - 1
    _SQLite_GetTable2d(-1, "SELECT Nutzer_1,Nutzer_2,ChosenUser FROM Verbindungen WHERE Nutzer_1 IN (SELECT Nutzer FROM LIMITS WHERE Maxlimit = Done AND Done != '0') AND ChosenUser = '';", $aResult, $iRows, $iColumns)
    $lastarray = $aResult
    For $i = 1 To UBound($lastarray) - 1
    If $lastarray[$i][0] = $Users[$k] Then
    $Who = 1
    Else
    $Who = 0
    EndIf
    _SQLite_Exec(-1, "UPDATE Verbindungen SET ChosenUser = '" & $lastarray[$i][$Who] & "' WHERE Nutzer_1 = '" & $lastarray[$i][0] & "' AND Nutzer_2 = '" & $lastarray[$i][1] & "';")
    _SQLite_Exec(-1, "UPDATE LIMITS SET Done = Done + 1 WHERE Nutzer = '" & $lastarray[$i][$Who] & "';")
    Next
    _SQLite_GetTable2d(-1, "SELECT Nutzer_1,Nutzer_2,ChosenUser FROM Verbindungen WHERE Nutzer_2 IN (SELECT Nutzer FROM LIMITS WHERE Maxlimit = Done AND Done != '0') AND ChosenUser = '';", $aResult, $iRows, $iColumns)
    $lastarray = $aResult
    For $i = 1 To UBound($lastarray) - 1
    If $lastarray[$i][0] = $Users[$k] Then
    $Who = 1
    Else
    $Who = 0
    EndIf
    _SQLite_Exec(-1, "UPDATE Verbindungen SET ChosenUser = '" & $lastarray[$i][$Who] & "' WHERE Nutzer_1 = '" & $lastarray[$i][0] & "' AND Nutzer_2 = '" & $lastarray[$i][1] & "';")
    _SQLite_Exec(-1, "UPDATE LIMITS SET Done = Done + 1 WHERE Nutzer = '" & $lastarray[$i][$Who] & "';")
    Next
    Next
    Return 1
    EndFunc ;==>NachEindeutig

    [/autoit]

    Habe es mit SQLite versucht zu lösen, aber deine Beispielwerte können zu keiner Lösung führen.
    habe die Werte dann etwas angepasst (B-Limit = 3, D-Limit = 2) und so läuft es durch.

    Du musst nur schauen, das deine Daten im selben Format wie bei mir eingelesen werden, dann sollte es klappen

    --EDIT-- Dieser Weg funktioniert nur, wenn mindestens 1 Person Limit = 0 hat und dadurch das Limit eines anderen erreicht wird.

    --EDIT-- Eine Variable ($aSQL) hatte sich verabschiedet, habe die oben jetzt wieder eingefügt

    --EDIT-- Sollte es Probleme beim einelesen in das Format geben oder bei den SQL Befehelen, schreib mich ruhig an ;)

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™