Du hast doch ein Standard-Treeview-Control. Dann kannst du es doch mit der Treeview-UDF bedienen.
Hol dir das Handle des Treeview, mit _GUICtrlTreeView_GetSelection($hWnd) erhältst du das Handle des Item und kannst dann dieses für weitere Funktionen nutzen (z.B. ..._GetText).
Beiträge von BugFix
-
-
-
Okay habs, musste nur die Variable am Ende durch $GUI ersetzen.
Nein, das ist falsch. $ES_Center ist ein Style für das Label. Da muß nur das entsprechende Include eingebunden werden.
-
Ich habs dir mal auf die Schnelle gebastelt. Aber wenn du selbst mit Grundlagen-GUI Probleme hast, sehe ich schwarz für ein Spiel.
Spoiler anzeigen
[autoit]Global $aTeams[10] = ['Team A', 'Team B', 'Team C', 'Team D', 'Team E', 'Team F', 'Team G', 'Team H', 'Team I', 'Team J']
[/autoit] [autoit][/autoit] [autoit]
Global $aRandomIndex = _GetRandomOrder()Global $GUI, $aInTeam[10], $btNext, $iCounter = 0
[/autoit] [autoit][/autoit] [autoit]$GUI = GUICreate('Auslosung der Paarungen', 470, 200)
[/autoit] [autoit][/autoit] [autoit]
$aInTeam[0] = GUICtrlCreateInput('', 10, 20, 150, 20)
$aInTeam[1] = GUICtrlCreateInput('', 190, 20, 150, 20)
$aInTeam[2] = GUICtrlCreateInput('', 10, 50, 150, 20)
$aInTeam[3] = GUICtrlCreateInput('', 190, 50, 150, 20)
$aInTeam[4] = GUICtrlCreateInput('', 10, 80, 150, 20)
$aInTeam[5] = GUICtrlCreateInput('', 190, 80, 150, 20)
$aInTeam[6] = GUICtrlCreateInput('', 10, 110, 150, 20)
$aInTeam[7] = GUICtrlCreateInput('', 190, 110, 150, 20)
$aInTeam[8] = GUICtrlCreateInput('', 10, 140, 150, 20)
$aInTeam[9] = GUICtrlCreateInput('', 190, 140, 150, 20)
For $i = 0 To 4
GUICtrlCreateLabel('vs.', 160, ($i*30)+23, 30, 17, $ES_CENTER)
Next
$btNext = GUICtrlCreateButton('Nächstes Team', 360, 20, 100, 21)GUISetState()
[/autoit] [autoit][/autoit] [autoit]While True
[/autoit] [autoit][/autoit] [autoit]
Switch GUIGetMsg()
Case -3
Exit
Case $btNext
If $iCounter < 10 Then
GUICtrlSetData($aInTeam[$iCounter], $aTeams[$aRandomIndex[$iCounter]])
$iCounter += 1
EndIf
EndSwitch
WEndFunc _GetRandomOrder() ; == erstellt ein Array mit Index 0 bis 9 in zufälliger Reihenfolge
[/autoit]
Local $sOrder = '', $tmpRandom, $iCount = 0
Do
$tmpRandom = Random(0,9,1)
If Not StringInStr($sOrder, $tmpRandom) Then
$iCount += 1
$sOrder &= $tmpRandom & ' '
EndIf
Until $iCount = 10
Return StringSplit(StringTrimRight($sOrder,1), ' ', 2)
EndFunc -
Na klar. Brauchst doch nur die Konsolenausgabe in einer GUI ausgeben. Das zufällige Zusammenstellen muß doch nicht erst im Moment der GUI-Ausgabe erfolgen, das erledigst du vorher. Und dann zeigst du nur einen nach dem anderen in der zufälligen Folge in der GUI an.
-
Guckst du:
[autoit]Global $aTeams[10] = ['Team A', 'Team B', 'Team C', 'Team D', 'Team E', 'Team F', 'Team G', 'Team H', 'Team I', 'Team J']
[/autoit][autoit][/autoit][autoit]$aRandomIndex = _GetRandomOrder()
[/autoit][autoit][/autoit][autoit]
For $i = 0 To UBound($aRandomIndex) -1
ConsoleWrite($aTeams[$aRandomIndex[$i]] & @CRLF)
NextFunc _GetRandomOrder() ; == erstellt ein Array mit Index 0 bis 9 in zufälliger Reihenfolge
[/autoit]
Local $sOrder = '', $tmpRandom, $iCount = 0
Do
$tmpRandom = Random(0,9,1)
If Not StringInStr($sOrder, $tmpRandom) Then
$iCount += 1
$sOrder &= $tmpRandom & ' '
EndIf
Until $iCount = 10
Return StringSplit(StringTrimRight($sOrder,1), ' ', 2)
EndFunc -
also sobald ich das Programm öffne, werden die ganzen Paarungen angezeigt.
Das erste Ergebnis-Array zeigt dir alle Paarungen für alle Spieltage. Jeder spielt einmal gegen jeden. Dazu sind eine von der Gesamtzahl der Mannschaften abhängige Spieltage erforderlich. Deshalb auch die Anzeige: Spieltag | Paarung
Wenn ich es schkließe öffnet sich ein weiteres Fenster was mit von Team F alle Heimspiele anzeigt
Das ist nur ein Bsp.-Aufruf. Das kannst du für jede Mannschaft aufrufen. Denn sicher ist es in deinem Game erforderlich, dass du weißt, welchen Gegner an welchem Spieltag deine Mannschaft hat.
Beim erneuten schließen bekomme ich alle Spiele vom Spieltag 2 angezeigt.
Wiederum ein Bsp.-Aufruf. Diese Funktion ermöglicht dir alle Paarungen an einem bestimmten Spieltag abzurufen.
Was mir aber auffällt ist, dass er nicht die Paarungen jedes mal neu auslost, sondern immer das selbe angezeigt wird.
Also das die Paarungen jedesmal neu gemischt werden. Ansonsten weiß man ja jede Saison schon das der erste Spieltag Team A gg Team J antreten muss.
Das wäre ja katastrophal, wenn die Paarungen neu gemischt werden, obwohl der Ligaplan nicht ausgespielt wurde!
Am ersten Spieltag stehen alle Paarungen für die gesamte Saison fest. Da ändert sich bis Saisonende nichts mehr dran.
Für eine neue Saison kannst du dann ja die Mannschaften im Array zufällig umsortieren und dann einen neuen Spielplan generieren.
Das Skriptbsp. von mir ist übrigens, wie du vielleicht bemerkt hast, nur eine Halbsaison. Dieselben Paarungen (nur Heim/Auswärts wechselnd) hast du natürlich dann in der Rückrunde. Überleg dir einfach einen sinnvollen Algorithmus um diese Umverteilung vorzunehmen.
Ich habe auch nicht integriert, dass eine Mannschaft abwechselnd Heim und Auswärts spielt. Das solltest du natürlich in die Funktion _CreatePairs() mit einfließen lassen. Etwas Arbeit soll ja auch für dich bleiben.
Ich wollte dir nur den rechnerischen Anstoß geben, wie man die Kombinationen für beliebig viele (geradzahlige) Mannschaften bilden kann. -
Deklariere die Variablen in der Funktion als
[autoit]Local Static $Variable
[/autoit]Sie wird beim ersten Aufruf initialisiert (falls du einen Startwert zuweist, mit diesem) und behält auch nach Funktionsende den aktuellen Wert. Mit diesem wird dann beim nächsten Funktionsaufruf fortgesetzt.
-
-
Benutze mal die Forensuche, dazu wurden schon mehrere Lösungen gepostet.
-
Fein, ist gebookmarked.

-
Na dann wollen wir dir mal helfen

Edit: Ich habe es noch mal überarbeitet und etwas "professionalisiert"

Ich gehe mal von aus, dass immer eine geradzahlige Anzahl an Mannschaften vorhanden ist.Edit2: Ich habe mal noch 2 Funktionen zum Ermitteln der Spiele eines Teams (Hin- und/oder Rückspiele) bzw. der Paarungen eines bestimmten Spieltages hinzugefügt.
Spoiler anzeigen
[autoit]
[/autoit] [autoit][/autoit] [autoit]
#Include <Array.au3>
Global $a[10] = ['Team A','Team B','Team C','Team D','Team E','Team F','Team G','Team H','Team I','Team J']Global $iTeams = UBound($a)
[/autoit] [autoit][/autoit] [autoit]
Global $iMatchDays = $iTeams + Mod($iTeams, 2) -1
Global $iMatchesPerDay = ($iTeams - Mod($iTeams, 2))/2
Global $iMatches = $iMatchDays*$iMatchesPerDayGlobal $aPairs[$iMatches][3]
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To $iMatchDays
[/autoit] [autoit][/autoit] [autoit]
_CreatePairs($aPairs, $a, $i)
_MoveEntries($a)
Next_ArrayDisplay($aPairs, 'Paarungen je Spieltag')
[/autoit] [autoit][/autoit] [autoit];~ $aRet = _GetMatchesTeam($aPairs, 'Team F') ; == Heim + Auswärts
[/autoit] [autoit][/autoit] [autoit]
$aRet = _GetMatchesTeam($aPairs, 'Team F', 'H') ; == nur Heim
_ArrayDisplay($aRet, 'Spiele "Team F"')$aRet = _GetMatchesDay($aPairs, 2) ; == alle Paarungen eines bestimmten Spieltages
[/autoit] [autoit][/autoit] [autoit]
_ArrayDisplay($aRet, 'Spiele "Tag 2"')Func _MoveEntries(ByRef $_a)
[/autoit] [autoit][/autoit] [autoit]
Local $aTmp = $_a
For $i = 0 To UBound($aTmp) -3
$_a[$i+1] = $aTmp[$i]
Next
$_a[0] = $aTmp[UBound($aTmp)-2]
EndFuncFunc _CreatePairs(ByRef $_aP, $_a, $_n)
[/autoit] [autoit][/autoit] [autoit]
Local Static $indx = 0
Local $i = 0, $i1 = UBound($_a) -1
For $z = 1 To $iMatchesPerDay
$_aP[$indx][0] = $_n
$_aP[$indx][1] = $_a[$i]
$_aP[$indx][2] = $_a[$i1]
$i += 1
$i1 -=1
$indx += 1
Next
EndFuncFunc _GetMatchesTeam(ByRef $_aPairs, $_sTeam, $_sType='G')
[/autoit] [autoit][/autoit] [autoit]
Local $aOut[1][3] = [[0]] ; == [Spieltag,Typ(A/H),Gegner]
Local $sOpp, $iHome = 0, $aType[2] = ['A','H']
For $i = 0 To UBound($_aPairs) -1
If $_aPairs[$i][1] = $_sTeam Or $_aPairs[$i][2] = $_sTeam Then
$sOpp = $_aPairs[$i][1]
If $_aPairs[$i][1] = $_sTeam Then
$sOpp = $_aPairs[$i][2]
$iHome = 1
EndIf
Switch $_sType
Case 'G' ; == Gesamt (Heim + Auswärts)
__AddToList($aOut, $_aPairs[$i][0], $aType[$iHome], $sOpp)
Case 'H' ; == Heim
If $aType[$iHome] = 'H' Then __AddToList($aOut, $_aPairs[$i][0], 'H', $sOpp)
Case 'A' ; == Auswärts
If $aType[$iHome] = 'A' Then __AddToList($aOut, $_aPairs[$i][0], 'A', $sOpp)
EndSwitch
EndIf
Next
Return $aOut
EndFuncFunc _GetMatchesDay(ByRef $_aPairs, $_iDay)
[/autoit] [autoit][/autoit] [autoit]
Local $aOut[1][2] = [[0]]
For $i = 0 To UBound($_aPairs) -1
If $_aPairs[$i][0] = $_iDay Then
$aOut[0][0] += 1
ReDim $aOut[$aOut[0][0]+1][2]
$aOut[$aOut[0][0]][0] = $_aPairs[$i][1]
$aOut[$aOut[0][0]][1] = $_aPairs[$i][2]
EndIf
Next
Return $aOut
EndFuncFunc __AddToList(ByRef $_a, $_iDay, $_sType, $_sOpp)
[/autoit]
$_a[0][0] += 1
ReDim $_a[$_a[0][0]+1][3]
$_a[$_a[0][0]][0] = $_iDay
$_a[$_a[0][0]][1] = $_sType
$_a[$_a[0][0]][2] = $_sOpp
EndFunc -
In den Zeilen 25-28 dreht sich ja alles nur im Kreis, müßte da nicht etwas rein wie "DoEvents" aus VBA ?
Das wird mit: Opt("GUIOnEventMode", 1) erledigt. -
Verwende einfach die GuiMsg $GUI_EVENT_SECONDARYUP / $GUI_EVENT_SECONDARYDOWN und frage dann das Control mit GUIGetCursorInfo() ab.
-
Ich würde mit EN_FOCUS arbeiten.
- Fokus aktiv: Starte Überwachung
- solange Fokus: nichts ändern
- wenn Fokus nicht mehr aktiv: Änderungen auswerten -
Danke, damit komme ich schonmal weiter.
Ich habe jetzt angefangen mir eine API-Bibliothek für Lua zu erstellen.
Aber folgende Funktion bleibt erfolglos. Siehst du einen Fehler? Ich habe zwei Varianten probiert:PHP
Alles anzeigenlocal alien = require "alien" fAPI = {} fAPI.CreateDirectory = function(_sPath) local SECURITY_ATTRIBUTES = alien.defstruct { {'nLength', 'int'}, {'lpSecurityDescriptor', 'int'}, {'bInheritHandle', 'int'} } local CreateDirectory = assert(alien.kernel32.CreateDirectoryA) CreateDirectory:types{ret = 'int', abi = 'stdcall', 'string', 'pointer'} local security = SECURITY_ATTRIBUTES:new() local ret = CreateDirectory(_sPath..string.char(0), security()) return ret, security endund:
PHP
Alles anzeigenfAPI.CreateDirectory = function(_sPath) local PATH_NAME = alien.defstruct { {'lpPathName', 'string'} } local SECURITY_ATTRIBUTES = alien.defstruct { {'nLength', 'int'}, {'lpSecurityDescriptor', 'int'}, {'bInheritHandle', 'int'} } local CreateDirectory = assert(alien.kernel32.CreateDirectoryA) CreateDirectory:types{ret = 'int', abi = 'stdcall', 'pointer', 'pointer'} local path = PATH_NAME:new() path.lpPathName = _sPath..string.char(0) local security = SECURITY_ATTRIBUTES:new() local ret = CreateDirectory(path(), security()) return ret, security end -
Als erstes noch ein Hinweis zur Installation:
In der SciTEStartup.lua ist noch der Eintrag:
LoadLuaFile("alien.lua")
erforderlich.Ich habe jetzt mal ein wenig damit gespielt, komme aber nicht zum Erfolg.
Hier ein Bsp.PHP
Alles anzeigenlocal alien = require "alien" -- Struktur erstellen local POINTAPI = alien.defstruct { { 'X', 'int'}, { 'Y', 'int'} } -- Struktur anzeigen for key,val in pairs(POINTAPI) do if type(val) == 'table' then for key1,val1 in pairs(val) do print(key,key1,val1) end else print(key,val) end end --[[ Output: new function: 02DBF560 offsets Y 4 offsets X 0 byval function: 02A3B710 size 8 types Y int types X int names 1 X names 2 Y ]] -- Dll-Aufruf erstellen local GetCursorPos = assert(alien.user32.GetCursorPos) GetCursorPos:types{ret = 'int', abi = 'stdcall', "pointer"} --~ Zuerst habe ich versucht, ähnlich wie in deinem Bsp., die Funktion "new" anzuwenden. local pos = POINTAPI:new() -- ergibt aber nur ein leeres Table? --~ Das habe ich dann als Parameter für die Funktion verwendet. local ret = GetCursorPos(pos) print('Erfolg: '..tostring(ret)) -- Return ist = "0" --> also kein Erfolg --~ Ich habe nun die Struktur als Parameter übergeben: local ret = GetCursorPos(POINTAPI) print('Erfolg: '..tostring(ret)) -- Return ist = "0" --> also auch kein Erfolg --~ Falls der Aufruf erfolgreich ist (und was muß ich dazu tun) - wie komme ich dann an die Daten? --~ Ist dafür die Funktion "byval" zuständig? Mit welchen Parametern muß ich sie dann aufrufen -
-
$var: Er wollte ein 2D-Array für die Treffer

Ich hab dir mal eine recht flexible Lösung erstellt. Aber die Container müssen, nach deiner Vorgabe, immer '<div class="verbox">' heißen. Die Tags in den Containern müssen logischerweise auch identisch sein.
Was flexibel ist:
- es wird sowohl @CR als auch @CRLF als Zeilenumbruch erkannt
- der Einzug kann TAB und/oder Leerzeichen enthalten
- die Stringmarkierung erfasst einfache und doppelte AnführungszeichenAls Ergebnis erhältst du ein Array mit einer Zeile für jeden Container.
Spoiler anzeigen
[autoit]$s = _
[/autoit] [autoit][/autoit] [autoit]
'<div class="verbox">' & @CRLF & _
' <h3 class="ver">xxx</h3>' & @CRLF & _
' <h3 class="date">yyy</h3>' & @CRLF & _
" <div class='sec'>zzz</div>" & @CRLF & _
'</div>' & @CRLF & _
'<div class="verbox">' & @CRLF & _
' <h3 class="ver">aaa</h3>' & @CRLF & _
' <h3 class="date">bbb</h3>' & @CRLF & _
" <div class='sec'>ccc</div>" & @CRLF & _
'</div>' & @CRLF & _
'<div class="verbox">' & @CRLF & _
' <h3 class="ver">111</h3>' & @CRLF & _
' <h3 class="date">222</h3>' & @CRLF & _
" <div class='sec'>333</div>" & @CRLF & _
'</div>' & @CRLF & _
'<div class="verbox">' & @CRLF & _
' <h3 class="ver">444</h3>' & @CRLF & _
' <h3 class="date">555</h3>' & @CRLF & _
" <div class='sec'>666</div>" & @CRLF & _
'</div>' & @CRLF$pattern = '<div class=["|'&"'"&']verbox["|'&"'"&']>\r?\n[\t|\s]*<h3 class=["|'&"'"&']ver["|'&"'"&']>(.*)</h3>\r?\n[\t|\s]*<h3 class=["|'&"'"&']date["|'&"'"&']>(.*)</h3>\r?\n[\t|\s]*<div class=["|'&"'"&']sec["|'&"'"&']>(.*)</div>\r?\n</div>'
[/autoit] [autoit][/autoit] [autoit]$aRet = StringRegExp($s, $pattern, 3)
[/autoit] [autoit][/autoit] [autoit]
Local $aMatch[UBound($aRet)/3][3], $j = 0
For $i = 0 To UBound($aRet) -1 Step 3
$aMatch[$j][0] = $aRet[$i]
$aMatch[$j][1] = $aRet[$i +1]
$aMatch[$j][2] = $aRet[$i +2]
$j += 1
Next_ArrayDisplay($aMatch)
[/autoit] -
Ein bischen splitten, zählen und zusammenfügen
[autoit]
$Pfad = "E:\Musik_Dateien\Karl\Udo_Lindenberg_Unplugged_(Live_Aus_Dem_Hotel_Atlantic)\104 Gegen die Stroemung (feat. Jennifer weist of Jennifer Rostock)\WavFiles\1.wav"
[/autoit][autoit][/autoit][autoit]
$AusgabeText = _SplittPfad ( $Pfad , 35)
ConsoleWrite($AusgabeText & @crlf)Func _SplittPfad($_sPath, $_iLen)
[/autoit]
Local $aSplit = StringSplit($_sPath, '\'), $sOut = '', $sTmp = ''
For $i = 1 To $aSplit[0]
Switch $i
Case 1
$sTmp = $aSplit[$i] & '\'
Case $aSplit[0]
If (StringLen($sTmp) + StringLen($aSplit[$i])) >= $_iLen Then
$sOut &= $sTmp & @CRLF & $aSplit[$i] & @CRLF
Else
$sOut &= $sTmp & $aSplit[$i] & @CRLF
EndIf
Case Else
If (StringLen($sTmp) + StringLen($aSplit[$i]) +1) >= $_iLen Then
$sOut &= $sTmp & @CRLF
$sTmp = $aSplit[$i] & '\'
Else
$sTmp &= $aSplit[$i] & '\'
EndIf
EndSwitch
Next
Return $sOut
EndFunc