PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrfachaufruf



Zion
13.05.2010, 22:49
Guten Abend
heute Abend habe ich versucht mit nur einem Aufruf von der vgui.Create("DButton") Funktion nicht nur einen Knopf zu erstellen sondern mehrere Knöpfe an verschiedenen Stellen zu erstellen, dass hat auch ganz gut funktioniert. Leider nur in der Horizontalen.
Jetzt möchte ich das aber auch mehrfach in der Vertikalen machen.
Ohne mehrfach vgui.Create zu benutzen und ohne ewig viele if,else aufrufe.
for i = 1, 44 do
k = i *11

i = vgui.Create( "HButton" )--nicht wundern dies ist eine selbst erstellte Button Klasse
i:SetParent( mf )
i:SetText( " " )
i:SetPos( k-10,1)
i:SetSize( 10, 10 )
i.DoClick = function ()
Msg("works")
end
end

Pac_187
13.05.2010, 22:58
Die for Schleife ist doch da schon das einfachste.

Eine für Horizontal und eine für Vertikal.

und die Create Funktion ist ja dazu da einen neuen Button zu erzeugen,
würdest du nicht vgui.Create nutzen dann würde der Button einfach nur an eine andere Position verschoben.


Oder wie meinst du das?

Zion
13.05.2010, 23:02
Ich möchte ja nicht nur eine Reihe erstellen sondern ein quadratisches Feld mit Knöpfen versehen.

isch
13.05.2010, 23:02
Steht dich schon alles da!

Da steht "SetPos( k-10,1)". Wenn du jetzt "SetPos(k,k)" machst dann würde es Vertikal und Horizontal ändern.

Davon abgesehen wieso k-10? Beim ersten Durchlauf ist k ja 1. Das bedeutet das der Button auf der Position -9,1 platziert. wird.

Zion
13.05.2010, 23:08
Steht dich schon alles da!

Da steht "SetPos( k-10,1)". Wenn du jetzt "SetPos(k,k)" machst dann würde es Vertikal und Horizontal ändern.

Davon abgesehen wieso k-10? Beim ersten Durchlauf ist k ja 1. Das bedeutet das der Button auf der Position -9,1 platziert. wird.


Nein das hatte ich schon ausprobiert damit machst du nur eine Diagonale Reihe und das k-10 ist dafür da das nicht alle Knöpfe übereinander liegen.

isch
13.05.2010, 23:13
for v = 1, 44 do -- 1
for h = 1, 10 do -- 2
i = vgui.Create( "HButton" )
i:SetParent( mf )
i:SetText( " " )
i:SetPos( h,v)
i:SetSize( 10, 10 )
i.DoClick = function ()
Msg("works")
end
h = h + 13 -- 3
end
v = v + 13 -- 4
end



Erklärung:
1.)
Diese For-Schleife ist für die Vertikale Ausrichtung der Buttons zuständig.

2.)
Die For-Schleife wird 10 mal durchlaufen und ist für die Horizontale Ausrichtung des Buttons zuständig. Da sie 10 mal durchlaufen wird hast du 10 Buttons nebeneinander.

3.)
Zur Variable h wird 13 dazugezählt. Somit rutscht der Button immer 13 Pixel weiter nach rechts.

4.)
Wenn die For-Schleife für die Horizontale ausrichtung 10 Mal durchgelaufen ist wird zur Variable v 13 dazu gezählt.
Somit werden die nachfolgenden Buttons 13 Pixel weiter unten erstellt. Dann beginnt die For-Schleife (1) wieder neu und die nächste Reihe an Buttons wird erstellt.

Pac_187
13.05.2010, 23:20
Versuchs mal mit:

DPanelList

http://wiki.garrysmod.com/?title=DPanelList

Da brauchst dann nur noch den Button zur Liste hinzufügen und die werden von selbst geordnet ;)

Hier noch 'n Code Beispiel aus dem Spawnmenu:

http://luabin.foszor.com/code/gamemodes/sandbox/gamemode/spawnmenu/CreationMenu/Props/PropPanel.lua#10

Zion
13.05.2010, 23:24
Ja, dass wird aber optisch nicht passen ich will ein ganzes Feld mit Knöpfen die alle oben, unten, rechts, links ein Pixel zum nächsten Knopf entfernt sind.
isch Lösung passt nicht dadurch liegen alle Knöpfe übereinander.

Pac_187
13.05.2010, 23:26
Die Breite kannst du doch einstellen.

"DermaList:SetSpacing( 5 ) -- Spacing between items"


Augen auf ;)

Zion
13.05.2010, 23:33
Das ändert aber leider die größe meiner Knöpfe auf die länge des Panels ;)
Hier mal ein Beispiel wie es aussehen soll:

http://img46.imageshack.us/i/exampleoi.png
Beispiel (http://img46.imageshack.us/i/exampleoi.png/)

Zion
15.05.2010, 16:30
Kann mir da keiner weiter helfen?

WeltEnSTurm
15.05.2010, 17:27
for w=1, 44 do
for h=1, 10 do
i=vgui.Create("HButton")
i:SetParent(mf)
i:SetText(" ")
i:SetPos(w*13,h*13)
i:SetSize(10,10)
end
end


Davon abgesehen wieso k-10? Beim ersten Durchlauf ist k ja 1. Das bedeutet das der Button auf der Position -9,1 platziert. wird.

Beim ersten durchlauf ist i 1.
k ist i*11, also 11. 11-10=1

Zion
15.05.2010, 19:12
Danke so gehts.