nachdem ich mit Eurer Hilfe ja mein Programmgerüst erstellt habe und
auch ein altes Programm nach PB portieren konnte, kommt jetzt das nächste Problem.
Um den alten Thread nicht zu weit ausufern zu lassen habe ich einen Neuen aufgemacht.
Folgendes Problem: Das Programm Spacejump, welches ich im letzten Thread portiert habe,
benutzt als Grafikelemente einfache Boxen. Das ist ja recht schmucklos.
Darkbasic bietet beim Boxkommando an, die vier Ecken verschieden einzufärben und die Box dann
mit den Farbverläufen zwischen den Ecken zu füllen. Dadurch kann man schon coole Effekte
erzielen und die Box sieht nicht so langweilig aus.
PB bietet diese Möglichkeit nicht.
Also habe ich mich daran gegeben, eine Funktion zu schreiben, welche das bewerkstelligt.
Dazu habe ich einfach das Beispiel aus der Hilfe zum PB 2D-Drawing genommen und umgeschrieben.
Die zu erzielenden Effekte sind toll, wenn auch nicht die, die ich erwartet hatte.
Da müssen wir eventuell anschließend drüber diskutieren.
Problem: wenn ich eine Vatiable ändern wollte, musste ich das ganze Programm immer wieder neu
kompilieren.
Also wollte ich mir eine Benutzersteuerung basteln, in der ich die Werte während des Programmes
verändern kann und dann das Bild neu zeichnen lassen kann.
Dabei bin ich dann wieder über die Gadgets und deren Anwendung gestolpert, die ich bisher
so nicht kannte. Kann mir bitte jemand helfen, wie ich das String-Gadget ausgelesen bekomme.
Das Button-Gadget funktioniert glaube ich, zumindest sagt mir debug, das das Gadget aufgerufen wird.
Das war jetzt wiedere 'ne Menge Text, aber ich wollte Euch mein Problem möglichst exakt schildern.
Code: Alles auswählen
Global Dim fabox(200,200,3)
Global Dim gg(40)
Declare BERECHNUNG()
Declare AUSGABE()
Declare NEUZEICH()
; ---------------------------------------------------------
; ---------------------------------------
; Eingaben
; ---------------------------------------
;links oben r g b
gg( 1)=000 : gg( 2)=000 : gg( 3)=000
;rechts oben r g b
gg( 4)=000 : gg( 5)=000 : gg( 6)=000
;links unten r g b
gg( 7)=000 : gg( 8)=200 : gg( 9)=000
;rechts unten r g b
gg(10)=000 : gg(11)=000 : gg(12)=000
gg(13) = 80 ; Divisor
gg(14) = 50 ;groesse des kleinen Bildes
gg(15) = 1 ; linke Seite: Absolut oder nicht
gg(16) = 1 ; rechte Seite: Absolut oder nicht
gg(17) = 0 ; x-achse Differenz absolut oder nciht
gg(18) = 0 ; flip Horizontal
gg(19) = 0 ; flip vertikal
;------------------------------------------------------------
OpenWindow(0, 0, 0, 400, 450, "FILLBOX", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
CreateImage(0,202,202)
CreateImage(1,202,202)
CopyImage(0, 1)
;gg(14)=44:ResizeImage(1,gg(14),gg(14))
; (Nr, x, y,Breite, Höhe;Inhalt$; Flag)
StringGadget( 0, 260, 10, 80, 20, "Li ob rot", #PB_String_Numeric)
StringGadget( 1, 260, 35, 80, 20, "Li ob grn", #PB_String_Numeric)
StringGadget( 2, 260, 60, 80, 20, "Li ob bla", #PB_String_Numeric)
StringGadget( 3, 260, 85, 80, 20, "Re ob rot", #PB_String_Numeric)
StringGadget( 4, 260, 110, 80, 20, "Re ob grn", #PB_String_Numeric)
StringGadget( 5, 260, 135, 80, 20, "Re ob bla", #PB_String_Numeric)
StringGadget( 6, 260, 160, 80, 20, "Li un rot", #PB_String_Numeric)
StringGadget( 7, 260, 185, 80, 20, "Li un grn", #PB_String_Numeric)
StringGadget( 8, 260, 210, 80, 20, "Li un bla", #PB_String_Numeric)
StringGadget( 9, 260, 235, 80, 20, "Re un rot", #PB_String_Numeric)
StringGadget(10, 260, 260, 80, 20, "Re un grn", #PB_String_Numeric)
StringGadget(11, 260, 285, 80, 20, "Re un bla", #PB_String_Numeric)
StringGadget(12, 260, 310, 80, 20, "Divisor ", #PB_String_Numeric)
StringGadget(13, 260, 335, 80, 20, "Resize Groesse ", #PB_String_Numeric)
TextGadget(20,350, 13,80,20,Str(gg(1)))
TextGadget(21,350, 38,80,20,Str(gg(2)))
TextGadget(22,350, 63,80,20,Str(gg(3)))
TextGadget(23,350, 88,80,20,Str(gg(4)))
TextGadget(24,350,113,80,20,Str(gg(5)))
TextGadget(25,350,138,80,20,Str(gg(6)))
TextGadget(26,350,163,80,20,Str(gg(7)))
TextGadget(27,350,188,80,20,Str(gg(8)))
TextGadget(28,350,213,80,20,Str(gg(9)))
TextGadget(29,350,238,80,20,Str(gg(4)))
TextGadget(30,350,263,80,20,Str(gg(5)))
TextGadget(31,350,288,80,20,Str(gg(6)))
TextGadget(32,350,313,80,20,Str(gg(13)))
TextGadget(33,350,338,80,20,Str(gg(14)))
ButtonGadget(34,260,380,80,20,"Neu Zeichnen",#PB_Button_Toggle)
; erstes Mal darstellen
; BERECHNUNG()
AUSGABE()
NEUZEICH()
quit=0
; -------Hauptschleife ------------
Repeat
Event = WaitWindowEvent()
If event=#PB_Event_CloseWindow:quit=1:EndIf
If event= #PB_Event_Gadget
num=EventGadget()
dipneu=0
Select num
Case 0
If EVENTType= #PB_EventType_Change
gg(1)=Val(GetGadgetText( 0))
If gg(1)>255:gg(1)=255:EndIf
If gg(1)< 0:gg(1)= 0:EndIf
TextGadget(20,350, 13,80,20,Str(gg(1)))
dipneu=1
EndIf
Case 1
If EVENTType= #PB_EventType_Change
gg(2)=Val(GetGadgetText( 1))
If gg(2)>255:gg(2)=255:EndIf
If gg(2)< 0:gg(2)= 0:EndIf
TextGadget(21,350, 38,80,20,Str(gg(2)))
Debug eventtype
Debug GetGadgetText( 1)
Debug gg(2)
dipneu=1
EndIf
Case 2
If EVENTType= #PB_EventType_Change
gg(3)=Val(GetGadgetText( 2))
If gg(3)>255:gg(3)=255:EndIf
If gg(3)< 0:gg(3)= 0:EndIf
TextGadget(22,350, 63,80,20,Str(gg(3)))
dipneu=1
EndIf
Case 3
If EVENTType= #PB_EventType_Change
gg(4)=Val(GetGadgetText( 3))
If gg(4)>255:gg(4)=255:EndIf
If gg(4)< 0:gg(4)= 0:EndIf
TextGadget(23,350, 88,80,20,Str(gg(4)))
dipneu=1
EndIf
Case 4
If EVENTType= #PB_EventType_Change
gg(5)=Val(GetGadgetText( 4))
If gg(5)>255:gg(5)=255:EndIf
If gg(5)< 0:gg(5)= 0:EndIf
TextGadget(24,350,113,80,20,Str(gg(5)))
dipneu=1
EndIf
Case 5
If EVENTType= #PB_EventType_Change
gg(6)=Val(GetGadgetText( 5))
If gg(6)>255:gg(6)=255:EndIf
If gg(6)< 0:gg(6)= 0:EndIf
TextGadget(25,350,138,80,20,Str(gg(6)))
dipneu=1
EndIf
Case 6
If EVENTType= #PB_EventType_Change
gg(7)=Val(GetGadgetText( 6))
If gg(7)>255:gg(7)=255:EndIf
If gg(7)< 0:gg(7)= 0:EndIf
TextGadget(26,350,163,80,20,Str(gg(7)))
dipneu=1
EndIf
Case 7
If EVENTType= #PB_EventType_Change
gg(8)=Val(GetGadgetText( 7))
If gg(8)>255:gg(8)=255:EndIf
If gg(8)< 0:gg(8)= 0:EndIf
TextGadget(27,350,188,80,20,Str(gg(8)))
dipneu=1
EndIf
Case 8
If EVENTType= #PB_EventType_Change
gg(9)=Val(GetGadgetText( 8))
If gg(9)>255:gg(9)=255:EndIf
If gg(9)< 0:gg(9)= 0:EndIf
TextGadget(28,350,213,80,20,Str(gg(9)))
dipneu=1
EndIf
Case 9
If EVENTType= #PB_EventType_Change
gg(10)=Val(GetGadgetText( 9))
If gg(10)>255:gg(10)=255:EndIf
If gg(10)< 0:gg(10)= 0:EndIf
TextGadget(29,350,238,80,20,Str(gg(4)))
dipneu=1
EndIf
Case 10
If EVENTType= #PB_EventType_Change
gg(11)=Val(GetGadgetText(10))
If gg(11)>255:gg(11)=255:EndIf
If gg(11)< 0:gg(11)= 0:EndIf
TextGadget(30,350,263,80,20,Str(gg(5)))
dipneu=1
EndIf
Case 11
If EVENTType= #PB_EventType_Change
gg(12)=Val(GetGadgetText(11))
If gg(12)>255:gg(12)=255:EndIf
If gg(12)< 0:gg(12)= 0:EndIf
TextGadget(31,350,288,80,20,Str(gg(6)))
dipneu=1
EndIf
Case 12
If EVENTType= #PB_EventType_Change
gg(13) =Val(GetGadgetText(12))
If gg(13)>200: gg(13)=200:EndIf
If gg(13)< 0: gg(13)= 1:EndIf
TextGadget(32,350,313,80,20,Str(gg(13)))
dipneu=1
EndIf
Case 13
If EVENTType= #PB_EventType_Change
gg(14)=Val(GetGadgetText(13))
If gg(14)>200:gg(14)=200:EndIf
If gg(14)< 0:gg(14)= 20:EndIf
TextGadget(33,350,338,80,20,Str(gg(14)))
dipneu=1
EndIf
Case 34
dip=GetGadgetState(34)
Debug dip
If dip=1
NEUZEICH()
SetGadgetState(34,0)
EndIf
EndSelect
EndIf
If dipneu=1
gg(15) = 1 ; linke Seite: Absolut oder nicht
gg(16) = 1 ; rechte Seite: Absolut oder nicht
gg(17) = 0 ; x-achse Differenz absolut oder nicht
gg(18) = 1 ; flip Horizontal
gg(19) = 0 ; flip vertikal
BERECHNUNG()
AUSGABE()
EndIf
Until quit=1
End
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure BERECHNUNG()
; ---------------------------------------
; Berechnungen
; ---------------------------------------
liob=RGB(gg( 1),gg( 2),gg( 3))
reob=RGB(gg( 4),gg( 5),gg( 6))
liun=RGB(gg( 7),gg( 8),gg( 9))
reun=RGB(gg(10),gg(11),gg(12))
For qy=1 To 200
; linke Seite Differenz Linksoben - linksunten evtl negativ
If gg(15)=0
lidifr=gg(1)-gg(7)
lidifg=gg(2)-gg(8)
lidifb=gg(3)-gg(9)
EndIf
; linke Seite Differenz Linksoben - Linksunten Absolutwert
If gg(15)=1
lidifr=Abs(gg(1)-gg(7))
lidifg=Abs(gg(2)-gg(8))
lidifb=Abs(gg(3)-gg(9))
EndIf
;berechnen des Punktes auf der y-Achse ( Linksdiffernz/ Divisor*yStrecke
lifar=gg(1)+(Int(lidifr/gg(13))*(qy-1))
lifag=gg(3)+(Int(lidifg/gg(13))*(qy-1))
lifab=gg(2)+(Int(lidifb/gg(13))*(qy-1))
;---
; rechte Seite Differenz Linksoben - linksunten evtl negativ
If gg(16)=0
redifr=gg(4)-gg(10)
redifg=gg(5)-gg(11)
redifb=gg(6)-gg(12)
EndIf
; rechte Seite Differenz Linksoben - Linksunten Absolutwert
If gg(16)=1
redifr=Abs(gg(4)-gg(10))
redifg=Abs(gg(5)-gg(11))
redifb=Abs(gg(6)-gg(12))
EndIf
;berechnen des Punktes auf der y-Achse ( rechtsdiffernz/ Divisor*yStrecke
refar=gg(4)+(Int(Redifr/gg(13))*(qy-1))
refag=gg(5)+(Int(Redifg/gg(13))*(qy-1))
refab=gg(6)+(Int(Redifb/gg(13))*(qy-1))
;
For qx=1 To 200
; X-Achse Differenz links und rechts evtl negativ
If gg(17)=0
fabox(qx,qy,1)=lifar+(Int(((lifar-refar)/gg(13))*(qx-1)))
fabox(qx,qy,2)=lifag+(Int(((lifag-refag)/gg(13))*(qx-1)))
fabox(qx,qy,3)=lifab+(Int(((lifab-refab)/gg(13))*(qx-1)))
EndIf
; x-achse Differenz links und rechts absolut
If gg(17)=1
If lifar<refar : fabox(qx,qy,1)=fabox(qx,qy,1)*(-1) : EndIf
If lifag<refag : fabox(qx,qy,2)=fabox(qx,qy,2)*(-1) : EndIf
If lifab<refab : fabox(qx,qy,3)=fabox(qx,qy,3)*(-1) : EndIf
EndIf
Next qx
Next qy
; flip horizontal gg(17)=1
If gg(18)=1
For qy=1 To 200
For qx=1 To 100
Swap fabox(qx,qy,1), fabox(201-qx,qy,1)
Swap fabox(qx,qy,2), fabox(201-qx,qy,2)
Swap fabox(qx,qy,3), fabox(201-qx,qy,3)
Next qx
Next qy
EndIf
; flip vertikal gg(18) =1
If gg(19)=1
For qy=1 To 100
For qx=1 To 200
Swap fabox(qx,qy,1), fabox(qx,201-qy,1)
Swap fabox(qx,qy,2), fabox(qx,201-qy,2)
Swap fabox(qx,qy,3), fabox(qx,201-qy,3)
Next qx
Next qy
EndIf
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure AUSGABE()
StartDrawing(ImageOutput(0))
For qy= 1 To 200
For qx= 1 To 200
farbe=RGB(fabox(qx,qy,1),fabox(qx,qy,2),fabox(qx,qy,3))
Plot (qx,qy,farbe)
Next qx
Next qy
;Box(1,1,10,10,liob)
;Box(191,1,10,10,reob)
;Box(1,191,10,10,liun)
;Box(191,191,10,10,reun)
StopDrawing()
;
; ImageGadget(0, 0, 0, 200, 200, ImageID(0))
CopyImage(0, 1)
ResizeImage(1,gg(14),gg(14))
; FLIPHO(1,2)
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
; +++++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure NEUZEICH()
StartDrawing(WindowOutput(0))
DrawImage(ImageID(0), 10, 10)
DrawImage(ImageID(1), 10,250)
StopDrawing()
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++