Create Frage in Autoit

06/12/2011 21:25 iJonas#1
Hallo Com
Ich hab da mal eine Frage,
Wie mache ich es, wenn ein Button gedrückt wurde, dass sich automatisch 5 neue Labels und 4 neue Buttons erstellen? Also es müsste so sein, dass sich die Buttons und Labels auf einer bestimmten Position erstellen, und dann 5 Bestimmte Inputboxen und 4 bestimme Buttons sich einige Picel nach unten verschieben, wäre so etwas möglich..?

Danke schonmal im Voraus.

Jonas
06/12/2011 22:55 Ludder231#2
Mach doch:

case $button1
guictrlcreate ;...
06/13/2011 00:21 iJonas#3
ja aber wie amche ich das, dass sich die createte gui dann zwiaschen die iputoxen undso bekomme?
06/13/2011 00:30 BlackHybrid#4
Könntest du die Frage vielleicht nochmal genauer und deutlich stellen?
06/13/2011 07:48 lolkop#5
Quote:
Originally Posted by iJonas View Post
ja aber wie amche ich das, dass sich die createte gui dann zwiaschen die iputoxen undso bekomme?
alte control-positionen auslesen und zum schluss jeweils die gewünschte position berechnen

das problem was hierbei auftreten könnte ist, das windows hierbei grafikfehler verursachen könnte...

beispiel:
Code:
Dim $label[1], $button[1], $control_y[1], $counter = 0
$gui = GUICreate('blubb', 300, 40)
$add = GUICtrlCreateButton('add stuff!', 10, 10, 280, 20)
GUISetState()

While 1
	$msg = GUIGetMsg()
	If $msg = -3 Then Exit
	If $msg = $add Then
		If $counter > 0 Then
			ReDim $label[$counter+1], $button[$counter+1], $control_y[$counter+1]
		EndIf
		$pos = WinGetPos($gui)
		For $i=0 To UBound($label)-1
			$control_pos = ControlGetPos($gui, '', $label[$i])
			$control_y[$i] = $control_pos[1]
		Next
		WinMove($gui, '', $pos[0], $pos[1], $pos[2], $pos[3]+30)
		ControlMove($gui, '', $add, 10, 10)
		$label[$counter] = GUICtrlCreateLabel('label '&$counter, 10, 40, 140, 20)
		$button[$counter] = GUICtrlCreateButton('button '&$counter, 150, 40, 140, 20)
		$counter +=1
		For $i=0 To UBound($label)-1
			ControlMove($gui, '', $label[$i], 10, $control_y[$i]+30)
			ControlMove($gui, '', $button[$i], 150, $control_y[$i]+30)
		Next
	EndIf
WEnd
06/13/2011 12:37 xShizoidx#6
Also wenn du willst, das sich neue Buttons und Labels erstellen, sobald du auf " Start " gedrückt hast, guck dir mal mein Beispielscript an, dann weisst du wie es geht.

Relative simpel. Aber was meinst du mit nach unten verschieben? Das sich dein alter Button nach unten verschiebt oder alles alte? Ist auch leichter möglich, als beim Script über mir ...

Beispiel :
HTML Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 461, 399, 192, 124)
$create = GUICtrlCreateButton("create", 184, 320, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $create
$Button1 = GUICtrlCreateButton("Button1", 48, 280, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Button2", 336, 288, 75, 25, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Button3", 72, 200, 75, 25, $WS_GROUP)
$Button4 = GUICtrlCreateButton("Button4", 336, 208, 75, 25, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("Label1", 64, 112, 36, 17)
$Label2 = GUICtrlCreateLabel("Label2", 120, 40, 36, 17)
$Label3 = GUICtrlCreateLabel("Label3", 232, 48, 36, 17)
$Label4 = GUICtrlCreateLabel("Label4", 208, 104, 36, 17)
$Label5 = GUICtrlCreateLabel("Label5", 360, 64, 36, 17)
	EndSwitch
WEnd
06/13/2011 12:46 lolkop#7
Quote:
Originally Posted by netterwurm8 View Post
Also wenn du willst, das sich neue Buttons und Labels erstellen, sobald du auf " Start " gedrückt hast, guck dir mal mein Beispielscript an, dann weisst du wie es geht.

Relative simpel. Aber was meinst du mit nach unten verschieben? Das sich dein alter Button nach unten verschiebt oder alles alte? Ist auch leichter möglich, als beim Script über mir ...

Beispiel :
HTML Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 461, 399, 192, 124)
$create = GUICtrlCreateButton("create", 184, 320, 75, 25, $WS_GROUP)
GUISetState(@SW_SHOW)


While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $create
$Button1 = GUICtrlCreateButton("Button1", 48, 280, 75, 25, $WS_GROUP)
$Button2 = GUICtrlCreateButton("Button2", 336, 288, 75, 25, $WS_GROUP)
$Button3 = GUICtrlCreateButton("Button3", 72, 200, 75, 25, $WS_GROUP)
$Button4 = GUICtrlCreateButton("Button4", 336, 208, 75, 25, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("Label1", 64, 112, 36, 17)
$Label2 = GUICtrlCreateLabel("Label2", 120, 40, 36, 17)
$Label3 = GUICtrlCreateLabel("Label3", 232, 48, 36, 17)
$Label4 = GUICtrlCreateLabel("Label4", 208, 104, 36, 17)
$Label5 = GUICtrlCreateLabel("Label5", 360, 64, 36, 17)
	EndSwitch
WEnd
letztendlich gesehen ist dieses script leider absolut unbrauchbar. sobald 2 mal der create button gedrückt wurde, erhält man unbrauchbare steuerelemente im gui, welche aufgrund einfach überschriebener handles nichteinmal mehr ansteuerbar sind. desweiteren ist der button im allgemeinen nur einmalig nutzbar.

da ich davon ausgehe, das der threadersteller beliebig oft neue gui elemente erstellen will, und hierbei alle einzeln ansprechbar halten will (leider schlecht ausgedrückt im erstpost), wird sich das ganze auch auf die gui größe auswirken.

ein ändern der gui größe führt dazu, das guielemente neu angeordnet werden, was zwangsweise die von mir angesprochenen grafikfehler verursacht.
06/13/2011 18:22 iJonas#8
Also ich stelle euch mal mein script hier rein, damit ihr wisst wa sich meine
PHP Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

$User_Name Inputbox ("Key Check","Bitte geben sie den Benutzernamen ein")
If 
$User_Name =("l"Then
$Password 
InputBox ("Key Check","Bitte geben sie das Passwort ein","","*")
If 
$Password = (""Then

$IE 
_IECreateEmbedded()

#Region ### START GUI section ### Form=
$Form1 GUICreate("Gilden Verwaltungs Tool"978551189121)
$Tab1 GUICtrlCreateTab(00977641)
GUICtrlSetResizing(-1$GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
$TabSheet1 GUICtrlCreateTabItem("Standart Informationen")
$TabSheet2 GUICtrlCreateTabItem("Gilden Liste")
$Label1 GUICtrlCreateLabel("Name"8409217)
$Label2 GUICtrlCreateLabel("Klasse"112409217)
$Label3 GUICtrlCreateLabel("Level"216403617)
$Label4 GUICtrlCreateLabel("Rang"264406017)
$Label5 GUICtrlCreateLabel("Titel"336406817)
$Label6 GUICtrlCreateLabel("Gilde verlassen"4164014517$WS_GROUP)
$Label7 GUICtrlCreateLabel("Gilde hinzufügen"5764014517$WS_GROUP)
$Label8 GUICtrlCreateLabel("Rang hinzufügen"7364011317$WS_GROUP)
$Label9 GUICtrlCreateLabel("Titel hinzufügen"8644010517$WS_GROUP)
$Label10 GUICtrlCreateLabel(""8649217)
$Label11 GUICtrlCreateLabel("Magier"112649217)
$Label12 GUICtrlCreateLabel("90"216643617)
$Label3 GUICtrlCreateLabel("Gildenleiter"264646017)
$Label14 GUICtrlCreateLabel("Fürst"336646817)
$Button1 GUICtrlCreateButton("Gilde verlassen"4166414517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button2 GUICtrlCreateButton("Gilde hinzufügen"5766414517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button3 GUICtrlCreateButton("Rang hinzufügen"7366411317$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button4 GUICtrlCreateButton("Titel hinzufügen"8646410517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Label15 GUICtrlCreateLabel(""8889217)
$Label16 GUICtrlCreateLabel("Priester"112889217)
$Label17 GUICtrlCreateLabel("90"216883417)
$Label18 GUICtrlCreateLabel("Stellvertreter"264886017)
$Label19 GUICtrlCreateLabel("Marquis"336886817)
$Button5 GUICtrlCreateButton("Gilde verlassen"4168814517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button6 GUICtrlCreateButton("Gilde hinzufügen"5768814517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button7 GUICtrlCreateButton("Rang hinzufügen"7368811317$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button8 GUICtrlCreateButton("Titel hinzufügen"8648810517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Label20 GUICtrlCreateLabel(""81129217)
$Label21 GUICtrlCreateLabel("Bogenschütze"1121129217)
$Label22 GUICtrlCreateLabel("90"2161123417)
$Label23 GUICtrlCreateLabel("Stellvertreter"2641126017)
$Label24 GUICtrlCreateLabel("Graf"3361126817)
$Button9 GUICtrlCreateButton("Gilde verlassen"41611214517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button10 GUICtrlCreateButton("Gilde hinzufügen"57611214517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button11 GUICtrlCreateButton("Rang hinzufügen"73611211317$WS_GROUP)
$Button12 GUICtrlCreateButton("Titel hinzuügen"86411210517$WS_GROUP)
$Input1 GUICtrlCreateInput(""81369221)
$Input2 GUICtrlCreateInput(""1121369221)
$Input3 GUICtrlCreateInput(""2161363421)
$Input4 GUICtrlCreateInput(""2641366021)
$Input5 GUICtrlCreateInput(""3361366821)
$Button17 GUICtrlCreateButton("Gilde verlassen"41613614517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button18 GUICtrlCreateButton("Gilde hinzufügen"57613614517$WS_GROUP)
$Button19 GUICtrlCreateButton("Rang hinzufügen"73613611317$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$Button20 GUICtrlCreateButton("Titel hinzufügen"86413610517$WS_GROUP)
GUICtrlSetState(-1$GUI_DISABLE)
$TabSheet3 GUICtrlCreateTabItem("Black List")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)
#EndRegion ### END GUI section ###

While 1
    $nMsg 
GUIGetMsg()
    Switch 
$nMsg
        
Case $GUI_EVENT_CLOSE
            
Exit
    EndSwitch
WEnd

Else
Exit
EndIf
Else
Exit
EndIf 

Ich meine, dass wenn man in die Input1-5 was eingibt und dann dann Button18 klickt, dass sich neue Labels bilden mit den sachen die in den inputboxen stehen und sich dann die input boxen in einem bestimmten abstand runter scheiben und sich die erstellten labels dazwischen schieben, so dass sie in den einzelnen spalten ( von den koordinaten her) gerade wie a´die anderen labels stehen.
06/13/2011 20:54 lolkop#9
würde dir empfehlen das ganze einfach über einige arrays laufen zu lassen.

willst du noch eine vernünftige gilde verlassen funktion hinzufügen, solltest du vielleicht noch alle daten durch ein data array im hinterkopf lagern, sodass man in dem falle einfach die gesamte liste neu anordnen könnte.

aber für deine aktuelle anforderung könnte das ganze zb so aussehen:
Code:
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <TabConstants.au3>
#include <WindowsConstants.au3>
#include <IE.au3>

Dim $label[20][5], $input[20][5], $button[20][4]

$IE = _IECreateEmbedded()

$gui = GUICreate("Gilden Verwaltungs Tool", 978, 551, 189, 121)
$Tab1 = GUICtrlCreateTab(0, 0, 977, 641)

GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)

$TabSheet1 = GUICtrlCreateTabItem("Standart Informationen")
$TabSheet2 = GUICtrlCreateTabItem("Gilden Liste")

GUICtrlCreateLabel("Name", 8, 40, 92, 17)
GUICtrlCreateLabel("Klasse", 112, 40, 92, 17)
GUICtrlCreateLabel("Level", 216, 40, 36, 17)
GUICtrlCreateLabel("Rang", 264, 40, 60, 17)
GUICtrlCreateLabel("Titel", 336, 40, 68, 17)
GUICtrlCreateLabel("Gilde verlassen", 416, 40, 145, 17)
GUICtrlCreateLabel("Gilde hinzufügen", 576, 40, 145, 17)
GUICtrlCreateLabel("Rang hinzufügen", 736, 40, 113, 17)
GUICtrlCreateLabel("Titel hinzufügen", 864, 40, 105, 17)

For $i=0 To 19
	$input[$i][0] = GUICtrlCreateInput("", 8, 64+$i*24, 92, 21)
	$input[$i][1] = GUICtrlCreateInput("", 112, 64+$i*24, 92, 21)
	$input[$i][2] = GUICtrlCreateInput("", 216, 64+$i*24, 34, 21)
	$input[$i][3] = GUICtrlCreateInput("", 264, 64+$i*24, 60, 21)
	$input[$i][4] = GUICtrlCreateInput("", 336, 64+$i*24, 68, 21)

	$label[$i][0] = GUICtrlCreateLabel('', 8, 64+$i*24, 92, 17)
	$label[$i][1] = GUICtrlCreateLabel('', 112, 64+$i*24, 92, 17)
	$label[$i][2] = GUICtrlCreateLabel('', 216, 64+$i*24, 36, 17)
	$label[$i][3] = GUICtrlCreateLabel('', 264, 64+$i*24, 60, 17)
	$label[$i][4] = GUICtrlCreateLabel('', 336, 64+$i*24, 68, 17)

	$button[$i][0] = GUICtrlCreateButton('Gilde verlassen', 416, 64+$i*24, 145, 17)
	$button[$i][1] = GUICtrlCreateButton('Gilde hinzufügen', 576, 64+$i*24, 145, 17)
	$button[$i][2] = GUICtrlCreateButton('Rang hinzufügen', 736, 64+$i*24, 113, 17)
	$button[$i][3] = GUICtrlCreateButton('Titel hinzufügen', 864, 64+$i*24, 105, 17)

	For $h=0 To 4

		GUICtrlSetState($input[$i][$h], $gui_hide)
		GUICtrlSetState($label[$i][$h], $gui_hide)
		If $h<4 Then GUICtrlSetState($button[$i][$h], $gui_hide)
	Next
Next

ActivateNewLine(0)

$TabSheet3 = GUICtrlCreateTabItem("Black List")
GUICtrlCreateTabItem("")
GUISetState(@SW_SHOW)

While 1
    $msg = GUIGetMsg()
	If $msg = -3 Then Exit
	For $i=0 To 19
		If $msg = $button[$i][1] Then
			AddStuffToLine($i)
		EndIf
	Next
WEnd

Func AddStuffToLine($row)
	If $row <= 19 Then
		Local $stuff[4]
		For $i=0 To 4
			GUICtrlSetData($label[$row][$i], GUICtrlRead($input[$row][$i]))
			GUICtrlSetState($label[$row][$i], $gui_show)
			GUICtrlSetState($input[$row][$i], $gui_hide)
		Next
		GUICtrlSetState($button[$row][0], $gui_enable)
		GUICtrlSetState($button[$row][1], $gui_disable)
		If $row < 19 Then ActivateNewLine($row+1)
	Else
		MsgBox(0, 'Info', 'The maximum number of lines have been reached')
	EndIf
EndFunc

Func ActivateNewLine($row)
	For $i=0 To 4
		GUICtrlSetState($label[$row][$i], $gui_hide)
		GUICtrlSetState($input[$row][$i], $gui_show)
		If $i<4 Then
			GUICtrlSetState($button[$row][$i], $gui_show)
			If $i<>1 Then GUICtrlSetState($button[$row][$i], $gui_disable)
		EndIf
	Next
EndFunc
06/13/2011 21:32 iJonas#10
Mh, Habs ausprobiert genaus stelle ich mir das vor, aber wie mache ich das, das er auch noch mehrere labels amcht ( das programm automatisch größer wird bzw. man scrollen kann) & das beim gilde verlassen die jeweilige reihe gelöscht wird. ich kann die liste auch einfach saven, das beim ausmachen der forschritt gespeiercht wird udn beim nächsten mal wieder drinen ist, oder mit ner Dll Injektion, das die liste als dll gespeichert wird und man sie laden kann oder so.
06/13/2011 21:39 lolkop#11
ich hab dir das als beispiel gegeben damit du weist wie ich mir das mit arrays vorgestellt hatte.

willst du eine löschfunktion, hinzufügen, musst due wie bereits erwähnt die daten immer in einem data array im speicher haben, sodass beim löschen einer zeile erst alle zeilen gelöscht werden können, und dann die restlichen wieder hergestellt werden.

die fragen welche du hier stellst wirken auf mich, als ob du nichteinmal versucht hast das script zu verstehen.
06/14/2011 09:11 iJonas#12
Doch, habe dabei aber ein paar Probleme, da ich noch nicht so gut in AutoIt coden kann.