Problem mit MaxGUI Befehl ModifyGadgetItem()

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

Arne

Betreff: Problem mit MaxGUI Befehl ModifyGadgetItem()

BeitragSo, Jul 22, 2007 10:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

ich hab ein kleines Problem mir der MaxGUI, bzw. verstehe ich nicht, warum das Programm so reagiert, wie es das tut...
Ich hätte gedacht, dass das der Text des ausgwählten Items in "Selected" umbenannt wird, tatsächlich wird aber das Item unter dem ausgewählten umbenannt.

Code: [AUSKLAPPEN]

SuperStrict

Local MyWindow:TGadget=CreateWindow("ListBox Example", 200,200,320,240)
Local ListBox:TGadget=CreateListBox(10,10,200,100,MyWindow)

For Local i:Int=1000 To 1050
  AddGadgetItem ListBox,i
Next

Repeat
  WaitEvent()
  Select EventID()
  Case EVENT_WINDOWCLOSE
     End
  Case EVENT_GADGETACTION
     ModifyGadgetItem ListBox, SelectedGadgetItem(ListBox), "Selected"
   End Select
Forever


Wenn ich nun stattdessen
Code: [AUSKLAPPEN]

    ModifyGadgetItem ListBox, SelectedGadgetItem(ListBox)-1, "Selected"

schreibe, reagiert das Programm so wie ich das will. Ich weiss nur nicht warum ^^

"SelectedGadgetItem()" gibt doch aus welches Item gerade ausgwählt ist und "ModifyGadgetItem ListBox" braucht das zu verändernde Item. Wenn ich also das aktuell ausgewählte angebe sollte es doch ohne die "-1" funktioniern!?

lg
 

ChristianK

BeitragSo, Jul 22, 2007 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Bei mir funktioniert es so, wie es soll. Ohne das "-1".
Haste mal gesyncmoddet? Sieht nämlich nach nem Bug in MaxGUI aus.
 

Arne

BeitragDi, Jul 24, 2007 23:56
Antworten mit Zitat
Benutzer-Profile anzeigen
danke, habs geschafft. Rolling Eyes

Aber jetzt hab ich ein anderes Problem. Diesmal aber wirklich weil ich zu blöd bin ^^
Wenn ich nen Radio Buttons erstelle kann ich ja immer nur einen auswählen. Ist soweit ja auch ganz gut, mein Probelm ist jetzt nur, dass ich zB. möchte, dass man aus 3 Antwortmöglichkeiten eine auswählen kann und dann zu einer anderen Frage wieder aus 3 Möglichkeiten eine auswählen kann. Kann ich buttons irgendwie zu Gruppen zusammenfassen, so dass dann immer aus einer Gruppe ein Button Button ausgewählt werden kann oder gibts da nen anderen "Trick"?

simi

BeitragMi, Jul 25, 2007 10:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, du hast für jede Auswahlgruppe einfach ein Panel. So kannst du das einfach realisieren....
 

Arne

BeitragDo, Jul 26, 2007 2:27
Antworten mit Zitat
Benutzer-Profile anzeigen
ok, danke, funzt.
Aber jetzt steht schon wieder das nächste Problem an Embarassed

Code: [AUSKLAPPEN]
Function tabelle(x%,y%,name$,Anzahl%,parent:TGadget)

Local I%
Local m:TGadget[Anzahl]

m[0]=createpanel(x,y,10,25,parent,PANEL_ACTIVE)
For I=1 To Anzahl-2
  m[I]=createpanel(I*10+x,y,10,25,parent,PANEL_ACTIVE)
  SetPanelpixmap m[I], tab_m, PANELPIXMAP_CENTER
Next
m[Anzahl-1]=createpanel(I*10+10+x,y,10,25,parent,PANEL_ACTIVE)

SetPanelpixmap m[0], tab_l, PANELPIXMAP_CENTER
SetPanelpixmap m[Anzahl-1], tab_r, PANELPIXMAP_CENTER

End Function


Ich möchte, dass ich den Namen des Arrays(m) frei bestimmen kann. Dafür war eigentlich name$ vorgesehen, aber ich bekomms ums verrecken nicht hin.
Anstatt Local m:TGadget[Anzahl] Local name:TGadget[Anzahl] funktioniert nicht...
Wäre nett wenn mir nochmal jemand helfen würde, lg
 

Dreamora

BeitragDo, Jul 26, 2007 9:06
Antworten mit Zitat
Benutzer-Profile anzeigen
einfach mal oben strict rein, der compiler wird dir sagen wo das problem ist.

Um genau zu sein: name ist bereits ein argument der funktion, du kannst es nicht nochmal für irgendwas anderes verwenden in der funktion!
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Arne

BeitragDo, Jul 26, 2007 12:02
Antworten mit Zitat
Benutzer-Profile anzeigen
wo das Problem liegt weiss ich ja, hab am Anfang SuperStrict stehen. Ich weiss nur nicht, wie es sonst klappen könnte. Theoretisch müsste ich ja nur wissen, wie ich den Namen eines Arrays des Typs TGadget ändere, bzw. durch einen in einem String gespeicherten Namen ersetzte. Dazu finde ich aber überhaupt nirgendwo auch nur irgendetwas.

simi

BeitragDo, Jul 26, 2007 12:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn ich dich richtig verstehe, möchtest du der Funktion als name zum Beispiel "blubb" übergeben. Und dann das Array antstatt mit m[xy] mit blubb[xy] ansprechen??

Wenn nicht, nicht weiterlesen....! Wink

Macht für mich eigentlich keinen Sinn das so zu machen, allerdings gäbe es eine Möglichkeit dies mit dem Type "TMap" zu lösen. Suche mal im Forum dananch, es gibt einen Thread dazu und sonst einfach mal in den Modulcode schauen, der ist ziemlich einfach zu verstehen.

Du kannst dann dein Array zu dieser Map hinzufügen und mit dem String, der in name steht, verbinden. Dann kannst du mit valueforkey(name) das Array wieder hervorrufen.....

BladeRunner

Moderator

BeitragDo, Jul 26, 2007 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest auch das Array schon an die Funktion übergeben und es später auch returnen, wenn es dir darum geht ein beliebiges TGadget-Array zu befüllen.

Also:
Code: [AUSKLAPPEN]

function blub:TGadget[](bla:Tgadget[],x:int,y:float,z:Tblub)
    'arbeiten mit bla und so .....
    return bla
end function
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Dreamora

BeitragDo, Jul 26, 2007 14:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Arne hat Folgendes geschrieben:
wo das Problem liegt weiss ich ja, hab am Anfang SuperStrict stehen. Ich weiss nur nicht, wie es sonst klappen könnte. Theoretisch müsste ich ja nur wissen, wie ich den Namen eines Arrays des Typs TGadget ändere, bzw. durch einen in einem String gespeicherten Namen ersetzte. Dazu finde ich aber überhaupt nirgendwo auch nur irgendetwas.


Einfach stringVariable = "neuer string"

Wenn du meinst Variablennamen in echtzeit ändern: Garnicht.
Denn nach dem kompilieren existieren Variablennamen garnimmer können also auch nicht mehr geändert werden.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Arne

BeitragDo, Jul 26, 2007 16:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit einer TMap hab ichs noch nicht versucht, aber ich schaffs irgendwie nicht der Funktion einen array zu übergeben.
Code: [AUSKLAPPEN]
Function tabelle(name:TGadget[],x%,y%,Anzahl%,parent:TGadget)

Local I%
For I=1 To Anzahl
  name[I]=createpanel(I*10+x,y,10,25,parent,PANEL_ACTIVE)
  SetPanelpixmap name[I], tab_m, PANELPIXMAP_CENTER
Next

End Function

geht nicht. Dachte es könnte vielleicht daran liegen, dass ich nicht angebe wieviele Dimensionen der Array hat und wie groß diese sind, aber Code: [AUSKLAPPEN]
Function tabelle(name:TGadget[Anzahl%],x%,y%,parent:TGadget)
geht auch nicht.

BladeRunner

Moderator

BeitragDo, Jul 26, 2007 16:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Welchen Fehler gibt er Dir denn aus ? Ich kann ohne Probleme die erste Variante benutzen.

Bsp:
Code: [AUSKLAPPEN]
function a:int[](x:int[])
    return x
end function

local b:int[10]
local c:int[20]
b[9] = 34
print c.length
c = a(b)
print c.length
print c[9]


EDIT: man beachte dass C auch die Dimension von b annimmt.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Dreamora

BeitragDo, Jul 26, 2007 17:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich seh das Problem.

Du arbeitest mit Steinzeit Blitz im Kopf.

BM ist jedoch wie C 0 basierend bei Arrays.

Das heisst ein Array mit Anzahl elemente hat effektiv die Indizes 0 bis Anzahl - 1
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Arne

BeitragDo, Jul 26, 2007 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
so, jetzt hab ichs ^^
Der Fehler war, dass ich Code: [AUSKLAPPEN]
tabelle(test:TGadget[6],10,10,6,window)
benutzt habe. Mit
Code: [AUSKLAPPEN]
Local test:TGadget[6]
tabelle(test,10,10,6,window)

funktionierts wunderbar.
@dreamora: Das ist mir eigentlich klar, hab den Code nur fürs Forum ein bisschen gekürzt. Eigentlich siehts so aus:Code: [AUSKLAPPEN]

Function tabelle:TGadget[](name:TGadget[],x%,y%,Anzahl%,parent:TGadget)

Local I%

name[0]=createpanel(x,y,10,25,parent,PANEL_ACTIVE)
For I=1 To Anzahl-2
  name[I]=createpanel(I*10+x,y,10,25,parent,PANEL_ACTIVE)
  SetPanelpixmap name[I], tab_m, PANELPIXMAP_CENTER
Print I
Next
name[Anzahl-1]=createpanel(I*10+x,y,10,25,parent,PANEL_ACTIVE)

SetPanelpixmap name[0], tab_l, PANELPIXMAP_CENTER
SetPanelpixmap name[Anzahl-1], tab_r, PANELPIXMAP_CENTER

End Function


dann danke ich noch allen die mir weitergeholfen haben
 

Arne

BeitragDo, Jul 26, 2007 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider war das doch noch nicht alles... Irgendwie komme ich mir so langsam ein bisschen blöde vor. Jetzt hab ich das mit den Panels geschafft und bekomme da keinen Text rein. Zumindest nicht so, dass es gut aussehen würde. Das Panel hat eine Hintergrundgrafik und über diese soll der Text (ich habs mit nem Label gemacht) geschrieben werden. Nur jetzt ist dort wo Text ist kein Bild mehr, was ziemlich bescheuert aussieht. Also in etwa so:
Code: [AUSKLAPPEN]
SuperStrict

Local window:TGadget = CreateWindow("Test", 50, 50, 400, 400)

Local panel:TGadget = CreatePanel(10, 10, 300, 300, window)
SetPanelColor(panel, 255, 255, 255)

Local label:TGadget = CreateLabel("Label", 50, 50, 100, 18, panel)

While True
   WaitEvent
   
   Select EventID()
      Case EVENT_WINDOWCLOSE
         End
   End Select
Wend

Kann man da wohl was machen?

edit: Sorry für den Doppelpost, aber sonst hätte wohl keiner bemerkt, dass ich noch was geschrieben habe.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group