Problem mit Types: "Object does not exist"

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

schalli

Betreff: Problem mit Types: "Object does not exist"

BeitragSo, Jan 31, 2010 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
In folgendem Code liegt das Problem:
BlitzBasic: [AUSKLAPPEN]
Type TGadget
Field art,var$
Field txt$,x,y,w,h,parent$,style
End Type

Global Gadget.TGadget
Global desktop_width = ClientWidth(Desktop())
Global desktop_height = ClientHeight(Desktop())
Dim gadgetnames$(12),gadgetcount(12)
Restore gadgetnamen
For i = 0 To 12
Read gadgetnames$(i)
Next

win = CreateWindow("GUIvention 0.5",0,0,desktop_width,desktop_height-100,0,12)
MaximizeWindow win
menu = WindowMenu(win)
datei = CreateMenu("Datei",0,menu)
CreateMenu("Neu",1,datei)
CreateMenu("",0,datei)
CreateMenu("Öffnen",2,datei)
CreateMenu("",0,datei)
CreateMenu("Speichern",3,datei)
CreateMenu("Speichern unter",4,datei)
CreateMenu("",0,datei)
CreateMenu("Beenden",5,datei)
ansicht = CreateMenu("Ansicht",0,menu)
check1 = CreateMenu("Toolfenster",6,ansicht)
check2 = CreateMenu("Gadgetparameter",7,ansicht)
CheckMenu check1
CheckMenu check2
Global c1c=1,c2c=1

UpdateWindowMenu win

toolwin = CreateWindow("Tools",desktop_width - 610,30,600,200,win,33)
tbut1 = CreateButton("Button",0,0,200,40,toolwin)
tbut2 = CreateButton("Canvas",200,0,200,40,toolwin)
tbut3 = CreateButton("HTML-View",400,0,200,40,toolwin)
tbut4 = CreateButton("Liste",0,40,200,40,toolwin)
tbut5 = CreateButton("Combobox",200,40,200,40,toolwin)
tbut6 = CreateButton("Registerkarten",400,40,200,40,toolwin)
tbut7 = CreateButton("Menü",0,80,200,40,toolwin)
tbut8 = CreateButton("Panel",200,80,200,40,toolwin)
tbut9 = CreateButton("Progbar",400,80,200,40,toolwin)
tbutA = CreateButton("Slider",0,120,200,40,toolwin)
tbutB = CreateButton("Textarea",200,120,200,40,toolwin)
tbutC = CreateButton("Textfield",400,120,200,40,toolwin)
tbutD = CreateButton("Treeview",0,160,200,40,toolwin)

settwin = CreateWindow("Gadgetparameter",desktop_width - 610,268,600,desktop_height - 278,win,33)
CreateLabel("Variablenname:",5,5,100,20,settwin)
pvar = CreateTextField(110,5,250,20,settwin)
CreateLabel("Text:",5,30,100,20,settwin)
ptxt = CreateTextField(110,30,250,20,settwin)
CreateLabel("X:",5,55,100,20,settwin)
px = CreateTextField(110,55,250,20,settwin)
CreateLabel("Y:",5,80,100,20,settwin)
py = CreateTextField(110,80,250,20,settwin)
CreateLabel("Breite:",5,105,100,20,settwin)
pw = CreateTextField(110,105,250,20,settwin)
CreateLabel("Höhe:",5,130,100,20,settwin)
ph = CreateTextField(110,130,250,20,settwin)
CreateLabel("Parent:",5,155,100,20,settwin)
pparen = CreateTextField(110,155,250,20,settwin)
CreateLabel("Style:",5,180,100,20,settwin)
pstyle = CreateTextField(110,180,250,20,settwin)
acombo = CreateComboBox(5,205,355,20,settwin)

desiwin = CreateWindow("<Unbetitelt>",10,50,400,400,win,33)
desi_w = ClientWidth(desiwin)
desi_h = ClientHeight(desiwin)
desican = CreateCanvas(0,0,desi_w,desi_h,desiwin)
bgimg = CreateImage(desi_w,desi_h)

SetBuffer ImageBuffer(bgimg)
ClsColor 255,255,255
Cls
Color 150,150,150
For i = 0 To desi_w Step 5
Line i,0,i,desi_h
Next
For i = 0 To desi_h Step 5
Line 0,i,desi_w,i
Next

SetBuffer CanvasBuffer(desican)
ClsColor 255,255,255
Cls

FlipCanvas desican


Repeat
WaitEvent()
Select EventID()
Case $803 ;Fenster wird geschlossen
Select EventSource()
Case toolwin
HideGadget toolwin
UncheckMenu check1
c1c = 1 - c1c
Case settwin
HideGadget settwin
UncheckMenu check2
c2c = 1 - c2c
End Select
UpdateWindowMenu win

Case $801 ;Fenster wird bewegt
Select EventSource()
Case toolwin
SetGadgetShape toolwin,desktop_width - 610,30,600,200
Case settwin
SetGadgetShape settwin,desktop_width - 610,268,600,desktop_height - 278
Case desiwin
SetGadgetShape desiwin,10,50,desi_w,desi_h
End Select

Case $1001 ;Menü wird betätigt
Select EventData()
Case 5
End
Case 6
c1c = 1 - c1c
If c1c = 1 Then CheckMenu check1 : ShowGadget toolwin Else UncheckMenu check1 : HideGadget toolwin
Case 7
c2c = 1 - c2c
If c2c = 1 Then CheckMenu check2 : ShowGadget settwin Else UncheckMenu check2 : HideGadget settwin
End Select
UpdateWindowMenu win

Case $401 ;Gadget wird betätigt
Select EventSource()
Case tbut1
aktugadget = 1
Case tbut2
aktugadget = 2
Case tbut3
aktugadget = 3
Case tbut4
aktugadget = 4
Case tbut5
aktugadget = 5
Case tbut6
aktugadget = 6
Case tbut7
aktugadget = 7
Case tbut8
aktugadget = 8
Case tbut9
aktugadget = 9
Case tbutA
aktugadget = 10
Case tbutB
aktugadget = 11
Case tbutC
aktugadget = 12
Case tbutD
aktugadget = 13
Case acombo
cnt = 0
sgi = SelectedGadgetItem(acombo)
For Gadget.TGadget = Each TGadget
If cnt = sgi Then
SetGadgetText pvar,Gadget\var$
SetGadgetText ptxt,Gadget\txt$
SetGadgetText px,Gadget\x
SetGadgetText py,Gadget\y
SetGadgetText pw,Gadget\w
SetGadgetText ph,Gadget\h
SetGadgetText pparen,Gadget\parent$
SetGadgetText pstyle,Gadget\style
EndIf
cnt = cnt + 1
Next
Case pvar
Gadget\var$ = TextFieldText(pvar) ; Alle Stellen dieser Art funktionieren nicht
Case ptxt
Gadget\txt$ = TextFieldText(ptxt)
Case px
Gadget\x = Int(TextFieldText(px))
Case py
Gadget\y = Int(TextFieldText(py))
Case pw
Gadget\w = Int(TextFieldText(pw))
Case ph
Gadget\h = Int(TextFieldText(ph))
Case pparen
Gadget\parent$ = TextFieldText(pparen)
Case pstyle
Gadget\style = Int(TextFieldText(pstyle))
End Select

Case $201 ;Maus wird gedrückt
If mdown = 0 Then ampx = mpx : ampy = mpy
mdown = 1

Case $203 ;Maus wird bewegt
mx = EventX()
my = EventY()
mpx = Int(mx/5)*5
mpy = Int(my/5)*5
DrawImage bgimg,0,0
Color 255,0,0
Line mpx-2,mpy,mpx+2,mpy
Line mpx,mpy-2,mpx,mpy+2

For Gadget.TGadget = Each TGadget
Color 150,150,150
Rect Gadget\x,Gadget\y,Gadget\w,Gadget\h
Color 200,200,200
Rect Gadget\x,Gadget\y,Gadget\w,Gadget\h,0
Color 0,0,0
Text Gadget\x+3,Gadget\y+3,Gadget\var$
Next

Color 0,255,0
If mdown = 1 And aktugadget <> 0 Then
If mpx > ampx Then ax = ampx : aw = mpx-ampx+1 Else ax = mpx : aw = ampx-mpx+1
If mpy > ampy Then ay = ampy : ah = mpy-ampy+1 Else ay = mpy : ah = ampy-mpy+1
Rect ax,ay,aw,ah,0
EndIf

FlipCanvas desican
Default
If mdown = 1 And aktugadget <> 0 Then
gadgetcount(aktugadget-1) = gadgetcount(aktugadget-1) + 1
CreateGadget(aktugadget,gadgetnames$(aktugadget-1)+Str$(gadgetcount(aktugadget-1)),"",ax,ay,aw,ah,parent,style)
ClearGadgetItems(acombo)
For Gadget.TGadget = Each TGadget
AddGadgetItem acombo,Gadget\var$
Next
EndIf
mdown = 0
End Select
Forever

End

Function CreateGadget(gart,gvar$,gtxt$,gx,gy,gw,gh,gparent,gstyle)
Gadget.TGadget = New TGadget
Gadget\art = gart
Gadget\var$ = gvar$
Gadget\txt$ = gtxt$
Gadget\x = gx
Gadget\y = gy
Gadget\w = gw
Gadget\h = gh
Gadget\parent = gparent
Gadget\style = gstyle
End Function

.Gadgetnamen
Data "Button","Canvas","HTML-View","Liste","Combobox","Registerkarten"
Data "Menü","Panel","Progbar","Slider","Textarea","Textfield","Treeview"


Wenn die Stelle ausgeführt wird, wo "Alle Stellen dieser Art funktionieren nicht" steht (und auch bei den anderen), kommt oben genannte Fehlermeldung. Nur warum? Das Objekt Gadget existiert ja eigentlich.
Hat irgendjemand eine Ahnung, woran es liegen könnte?
Theovention - meine Homepage

Holzchopf

Meisterpacker

BeitragSo, Jan 31, 2010 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Hmm also irgendwie fehlt da die Erstellung von Gadget (du hast Gadget zwar als TGadget deklariert, aber irgendwie sehe ich nicht, wo dem mal ein "new TGadget" zugeteilt wird...), deshalb meckert er ja auch, weil Gadget null ist.

mfG
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm
 

schalli

BeitragSo, Jan 31, 2010 13:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, die Funktion CreateGadget (ganz unten).
Und ich hab auch geschrieben
Global Gadget.TGadget
Theovention - meine Homepage

Xeres

Moderator

BeitragSo, Jan 31, 2010 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
In der Hauptschleife führst du Die Variable am Schleifenkopf ein:
Code: [AUSKLAPPEN]
 For Gadget.TGadget = Each TGadget

Aber nach Next gibst du ihr keinen Wert! Wenn die For...Each Schleife durchlaufen wurde, zeigt Gadget auf NULL, nicht auf das letzte TGadget.

Edit:
Case übersehen... aber das Prinzip bleibt gleich: Nirgendwo ist Sichergestellt, das Gadget ein Objekt enthält. Stelle das sicher oder Prüfe auf Gadget <> Null.
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

schalli

BeitragDi, Feb 02, 2010 16:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Es war nur ein kleines, mieses Wörtchen.
@xeres: Danke, du hast mich darauf gebracht!
Das Wörtchen hieß "Exit". Die For-Each-Schleife sollte nämlich beim richtigen Eintrag unterbrochen werden. Das geht ohne Exit natürlich nicht.
Theovention - meine Homepage

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group