Teil 2: Anfängerprobleme beim ersten Programm

Anfängerfragen zum Programmieren mit PureBasic.
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von Diogenes »

@mk-soft

ich habe es noch einmal ausprobiert.
folgender Status:

Code: Alles auswählen

; -------Hauptschleife ------------
  Repeat
     Event = WaitWindowEvent()
     If event=#PB_Event_CloseWindow:quit=1:EndIf
;      If event=#PB_Event_Repaint
;        NEUZEICH()
;      EndIf  
     If event= #PB_Event_Gadget
        num=EventGadget()
        dipneu=0
        Select num
Beachte: #PB_Event_Repaint ist daektiviert

Code: Alles auswählen

 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
 Procedure NEUZEICH()
 StartDrawing(WindowOutput(0))
      FrontColor(RGB(220,220,220)):Box(10,10,200,200)     
      DrawImage(ImageID(0), 10, 10)
      FrontColor(RGB(220,220,220)):Box(10,225,200,200)     
      If Num_KB_1>3:DrawImage(ImageID(Num_KB_1), 10,225):EndIf
      If Num_KB_2>3:DrawImage(ImageID(Num_KB_2),110,225):EndIf
      If Num_KB_3>3:DrawImage(ImageID(Num_KB_3),110,325):EndIf
      If Num_KB_4>3:DrawImage(ImageID(Num_KB_4), 10,325):EndIf
      FrontColor(RGB(220,220,220)):Box(10,440,200,200)     
      DrawImage(ImageID(8),10,440)
      StopDrawing()    
 EndProcedure   
 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
 Procedure GESTALTUNG()
   Static xg=0    ;x_größe
   Static yg=0    ; yGröße
   FreeImage(8)
   FreeImage(9)
   If kleinwahl=0:xg=200:yg=200:EndIf
   If kleinwahl=1:xg=100:yg=100:EndIf
   If kleinwahl=2:xg=200:yg=100:EndIf
   If kleinwahl=3:xg=100:yg=200:EndIf
   CreateImage(8,xg,yg)
   CreateImage(9,xg,yg)
   StartDrawing(WindowOutput(0))
;   StartDrawing(ImageOutput(8))
     GrabDrawingImage(8,10,225,xg,yg)
   StopDrawing()
   ;CopyImage(8,9)
   StartDrawing(ImageOutput(8))
      DrawImage(ImageID(8),10,440)
   StopDrawing()
   ;ResizeImage(8,kl_bld_x,kl_bld_y)
   
 EndProcedure
 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedures neuzeich() und Gestaltung()
resize ist deaktiviert.
ich wähle bei den Stringgadgets grabben => eingabe 3.
d.h. es sollen die linken beiden Bilder von darüber in Bild 8 gegrabbt werden.
Das passiert auch und nach klick auf Neu zeichnen wird Bild 8 auch in voller Schönheit
angeziegt.
aktiviere ich aber das resize wieder,
adnn wird nur ein weißer!! kasten der definierten z.B (40x,80y) reduzierten Größe angezeigt.
Nur der resize-Befehl funktioniert also nicht.
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von Diogenes »

@mk-soft

ich habe mir 'mal Dein Hello-World Gerüst geladen und ausgeführt.
das ist klasse. ich werde da 'mal mit rumspielen.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von mk-soft »

Das mit #PB_Event_Repaint ist unumgänglich wenn man mit Drawing direkt auf WindowOutput arbeitet. Das Event kommt wenn das Fenster neu gezeichnet werden muss. Alternativ kann man ein ImageGadget nehmen und diesen nach der Änderung des eigenen Image zuweist.
Dann übernimmt Windows bei bedarf das Neuzeichnen des Images.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von Diogenes »

@mk-soft

danke, dass Du Dich so ausführlich um mich und mein kleines Problem kümmerst.
Auch wenn ich #PB_Event_Repaint aktiviere, aendert sich nichts,
nur daß das Fenster in bestimmten Abständen unangenehm kurz flackert.
Ich sehe nach wie vor im unteren der drei Felder, ein weißes Rechteck
in der definierten Größe.

p.s. Hier ist definitiv ein Fehler im resize-befehl.
wenn ich bei der resize-größe 100x und 200y sowie option 3 auswähle,
un damit zwar die größe ändere aber sie auf sich selbst ändere
funktioniert's. wenn ich 100x und 100y und option 1 auswähle, funktioniert's
auch. wähle ich aber auch nur eine geringe Abweichung von der Originalgröße
nach oben oder unten ist egal, erscheint nur eine weiße Box in der dfinierten
Größe. Ich bin jetzt komplett ratlos.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von mk-soft »

Werd ich mir Morgen Abend mal auf Windows anschauen. Arbeite zur Zeit unter Mac
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von mk-soft »

Du versucht in Gestaltung das Bild zu kopieren. (GrabDrawingImage). Da wird aber nichts gezeichnet.
Somit ist GESTALTUNG über.

Code: Alles auswählen

; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
 Procedure NEUZEICH()
   
   ; Image mit ID 9 neuerstellen
   CreateImage(9,200,200)
   
  StartDrawing(ImageOutput(9))
  FrontColor(RGB(220,220,220)):Box(0,0,200,200)     
  If Num_KB_1>3:DrawImage(ImageID(Num_KB_1), 0,0):EndIf
  If Num_KB_2>3:DrawImage(ImageID(Num_KB_2),100,0):EndIf
  If Num_KB_3>3:DrawImage(ImageID(Num_KB_3),100,100):EndIf
  If Num_KB_4>3:DrawImage(ImageID(Num_KB_4), 0,100):EndIf
  StopDrawing()
      
  StartDrawing(WindowOutput(0))
      FrontColor(RGB(220,220,220)):Box(10,10,200,200)     
      DrawImage(ImageID(0), 10, 10)
      
      DrawImage(ImageID(9), 10, 225)
      ResizeImage(9,kl_bld_x,kl_bld_y)
      DrawImage(ImageID(9),10,440)
      StopDrawing()    
    EndProcedure   
 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
 Procedure GESTALTUNG()
   Static xg=0    ;x_größe
   Static yg=0    ; yGröße
   
   If kleinwahl=0:xg=200:yg=200:EndIf
   If kleinwahl=1:xg=100:yg=100:EndIf
   If kleinwahl=2:xg=200:yg=100:EndIf
   If kleinwahl=3:xg=100:yg=200:EndIf
   
 EndProcedure
 ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von NicTheQuick »

Mal eine blöde Frage. Wieso nicht einfach statt

Code: Alles auswählen

      DrawImage(ImageID(9), 10, 225)
      ResizeImage(9,kl_bld_x,kl_bld_y)
      DrawImage(ImageID(9),10,440)
einfach das hier?

Code: Alles auswählen

      DrawImage(ImageID(9), 10, 225)
      DrawImage(ImageID(9),10,440,kl_bld_x,kl_bld_y)
Dann kann man sich auch das dauernde Neuerstellen des Images sparen.
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von Diogenes »

Hallo,

danke für Eure Tips, ich werde mich damit auseinandersetzen.
@NicTheQuick:
DrawImage(ImageID(9),10,440,kl_bld_x,kl_bld_y)

Das kannte ich zu dem Zeitpunkt, als ich das geschrieben habe noch nicht. :wink:
Nicht vergessen, ich programmiere in PB erst seit 10 Tagen.
Ich hoffe, ich habe Dich mit dem Einbau von EnableExplicit und Weglassen
des globalen Arrays versöhnt - auch wenn das für mich persönlich gewöhnungs-
bedürftig ist.

Durch Eure Antworten und meine Übungen komme ich langsam immer weiter.

Danke an alle.
Ich werde die Tips ausprobieren und melde mich wieder.
Diogenes
Beiträge: 91
Registriert: 05.06.2014 10:52

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von Diogenes »

Hallo,

Dank Eurer Anregungen und Kritik, habe ich den Code noch einmal komplett
neu geschrieben. Ich habe mich bemüht, lesbaren Code zu schreiben und enableexplicit benutzt.
Das Programm läuft jetzt auch von Anfang bis Ende.
Nur am Ende funktioniert es eben wieder nicht. Da blicke ich durch die Zusammenhänge von PB noch
nicht ganz durch.
Folgendes Problem:
ich möchte eine schöne Box mit Farbverläufen zeichnen. Dafür ist in PB keine Funktion vorgesehen.
Ich habe also ein programm geschrieben, so daß ich die Parameter für die Funktion interaktiv austesten kann.
Danach soll einfach der Code der kompletten Funktion Boxfill() in das andere Programm geschrieben werden.
Die Funktion wird aufgerufen, zeichnet eine schöne bunte Box und liefert ein Bild ssamt Bildnummer zurück.
Dieses Bild kann dann im Programm benutzt werden. Soweit mein Plan.
Im folgenden Code, ist alle bis zum Letzten Abschnitt, mein Programm zum interaktiven Einstellen der Paramter.
Die letzte Funktion Boxfill ist die, die in das Hauptprogramm kopiert werden soll.
Der Aufruf erfolgt aus der Funktion NEUZEICH() in den letzten 5 Zeilen.
zur zeit sind die ausgeremt, damit man zunächst das Programm so testen kann.
wenn ich diese Zeilen aktiviere kommt eine für mich nicht lösbare Fehlermeldung
"Error: #image Objektnummer ist sehr hoch( über 100000) sind sie sicher"

dabei habe ich die Image-nummern extra durch #PB_Any vergeben lassen.

Code: Alles auswählen

; FillBox 3.0
; Das programm soll dazu dienen, beim einfachen Boxkommando
; Farbverläufe einzubauen, so dass die Box etwas aufgepeppt wird
; als Programm soll es helfen die nötigen Paramater für die Box 
; zu ermitteln; so dass man sieht wie die Box hinterher aussehen wird.
; anschließend soll in anderen Programmen nur die Funktion
; boxfill(Parameter) aufgerufen werden um dieses Bild zu erzeugen.
; Der Standard PureBasic-Befehl Box(x, y, Breite, Höhe [, Farbe])
; ergibt eine einfache farbige Box
; imageNummer=Boxfill(Breite,Höhe,FarbeP1,FarbeP2,FarbeP3,FarbeP4,Folge,Divisor,Detail)
; ergibt dann eine schöne bunte Box für Spielsteine, Spielkartenrückseiten,
; Buttons oder Ähnlichem
; --------------------------------------------------------
;{ Variablen-Definition 
EnableExplicit
;
Global Dim fabox(200,200,3)
Declare BERECHNUNG()
Declare NEUZEICH()
Declare GESTALTUNG()
Declare Rech_Bild_oben()
Declare Rech_Bild_01()
Declare Rech_Bild_02()
Declare Rech_Bild_03()
Declare Rech_Bild_04()
Declare boxfill(grx,gry,FarbeP1,FarbeP2,FarbeP3,FarbeP4,folge,divisor,detail)
;EckPunkte der Box im Uhrzeigersinn: Links oben=P1 -> Links unten=P4
Global FarbeP1,FarbeP2,FarbeP3,FarbeP4
FarbeP1=RGB(0,  0,  0)
FarbeP2=RGB(0,200,  0)
FarbeP3=RGB(0,  0,200)
FarbeP4=RGB(0,  0,  0)
Global P1_rot, P1_grn, P1_Bla, P2_rot, P2_grn, P2_Bla 
Global P3_rot, P3_grn, P3_Bla, P4_rot, P4_grn, P4_Bla 
P1_rot=  Red(FarbeP1):P1_grn=Green(FarbeP1):P1_bla= Blue(FarbeP1)
P2_rot=  Red(FarbeP2):P2_grn=Green(FarbeP2):P1_bla= Blue(FarbeP2)
P3_rot=  Red(FarbeP1):P3_grn=Green(FarbeP3):P1_bla= Blue(FarbeP3)
; grx = x-Ausdehnung der neu zu zeichnenden Box
; gry = y-Ausdehnung der neu zu zeichnenden Box
; Detail = Zusammensetzung der Box aus den 4 mittleren Bildern
;   ( 0= alle vier; 1= nur Li ob; 2= li ob + re ob; 3=li ob + li un)
Global  grx,gry,detail,divisor,folge
grx=60:gry=60:detail=0:divisor=80:folge=1234
; Nummer des Bildes welches in der Mitte an der jewiligen
; Position dargestellt wird. Pos. 1 = links oben und dann im
; Uhrzeigersinn wie bei den Eckpunkten
; NumKB_1=6 bedeutet: Bild6 also rechts unten wird an Position1
; also links oben dargestellt
Global NumKB_1,NumKB_2,NumKB_3,NumKB_4,bildfertig
NumKB_1=1:NumKB_2=2:NumKB_3=3:NumKB_4=4:bildfertig=0



;}
; --------------------------------------------------------
; --------------------------------------------------------
;{ Objekt-Definition 
Enumeration ; Fenster
  #Win_Main
EndEnumeration
; --
Enumeration ; Gadgets
  #St_P1_Rot
  #St_P1_Grn
  #St_P1_Bla
  #St_P2_Rot
  #St_P2_Grn
  #St_P2_Bla
  #St_P3_Rot
  #St_P3_Grn
  #St_P3_Bla
  #St_P4_Rot
  #St_P4_Grn
  #St_P4_Bla
  #St_Divisor
  #St_Folge
  #St_grx
  #St_gry
  #St_Detail
  ;
  #Tx_P1_Rot
  #Tx_P1_Grn
  #Tx_P1_Bla
  #Tx_P2_Rot
  #Tx_P2_Grn
  #Tx_P2_Bla
  #Tx_P3_Rot
  #Tx_P3_Grn
  #Tx_P3_Bla
  #Tx_P4_Rot
  #Tx_P4_Grn
  #Tx_P4_Bla
  #Tx_Divisor
  #Tx_Folge
  #Tx_grx
  #Tx_gry
  #Tx_Detail
  ;
  #Bt_Neuzeich
  ;
  #CV_oben
  #CV_mitte
  #CV_unten
EndEnumeration
; --
Enumeration ; Bilder
  #bld00
  #bld01
  #bld02
  #bld03
  #bld04
  #bld05
 EndEnumeration  
;}
; --------------------------------------------------------
; --------------------------------------------------------
;{ Fenster erstellen und öffnen
OpenWindow(#Win_Main, 0, 0, 450, 660, "BoxFill", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
; --
CreateImage(#Bld00, 200, 200)
CreateImage(#Bld01, 200, 200)
CreateImage(#Bld02, 200, 200)
CreateImage(#Bld03, 200, 200)
CreateImage(#Bld04, 200, 200)
;#bld05 muss zum Schluss dynamisch erzeugt werden
; --
;           (Nr,  x,   y,Breite, Höhe;Inhalt$; Flag)         
StringGadget(#St_P1_rot , 260,  10, 80, 20,Str(P1_rot) , #PB_String_Numeric)
StringGadget(#St_P1_Grn , 260,  35, 80, 20,Str(P1_grn) , #PB_String_Numeric)
StringGadget(#St_P1_Bla , 260,  60, 80, 20,Str(P1_bla) , #PB_String_Numeric)
StringGadget(#St_P2_Rot , 260,  85, 80, 20,Str(P2_rot) , #PB_String_Numeric)
StringGadget(#St_P2_Grn , 260, 110, 80, 20,Str(P2_grn) , #PB_String_Numeric)
StringGadget(#St_P2_Bla , 260, 135, 80, 20,Str(P2_bla) , #PB_String_Numeric)
StringGadget(#St_P3_Rot , 260, 160, 80, 20,Str(P4_rot) , #PB_String_Numeric)
StringGadget(#St_P3_Grn , 260, 185, 80, 20,Str(P4_grn) , #PB_String_Numeric)
StringGadget(#St_P3_Bla , 260, 210, 80, 20,Str(P4_bla) , #PB_String_Numeric)
StringGadget(#St_P4_Rot , 260, 235, 80, 20,Str(P3_rot) , #PB_String_Numeric)
StringGadget(#St_P4_Grn , 260, 260, 80, 20,Str(P3_grn) , #PB_String_Numeric)
StringGadget(#St_P4_Bla , 260, 285, 80, 20,Str(P3_bla) , #PB_String_Numeric)
StringGadget(#St_Divisor, 260, 310, 80, 20,Str(Divisor), #PB_String_Numeric)
StringGadget(#St_Folge  , 260, 335, 80, 20,Str(Folge)  , #PB_String_Numeric)
StringGadget(#St_grx    , 260, 360, 80, 20,Str(grx)    , #PB_String_Numeric)
StringGadget(#St_gry    , 260, 385, 80, 20,Str(gry)    , #PB_String_Numeric)
StringGadget(#St_Detail , 260, 410, 80, 20,Str(Detail) , #PB_String_Numeric)
; --
TextGadget(#Tx_P1_Rot ,350, 13,80,20,"Li ob rot")
TextGadget(#Tx_P1_Grn ,350, 38,80,20,"Li ob grn")
TextGadget(#Tx_P1_Bla ,350, 63,80,20,"Li ob bla")
TextGadget(#Tx_P2_Rot ,350, 88,80,20,"Re ob rot")
TextGadget(#Tx_P2_grn ,350,113,80,20,"Re ob grn")
TextGadget(#Tx_P2_bla ,350,138,80,20,"Re ob bla")
TextGadget(#Tx_P3_Rot ,350,163,80,20,"Li un rot")
TextGadget(#Tx_P3_grn ,350,188,80,20,"Li un grn")
TextGadget(#Tx_P3_bla ,350,213,80,20,"Li un bla")
TextGadget(#Tx_P4_Rot ,350,238,80,20,"Re un rot")
TextGadget(#Tx_P4_grn ,350,263,80,20,"Re un grn")
TextGadget(#Tx_P4_bla ,350,288,80,20,"Re un bla")
TextGadget(#Tx_Divisor,350,313,80,20,"Divisor  ")
TextGadget(#Tx_Folge  ,350,338,80,20,"Reihenfolge")
TextGadget(#Tx_grx    ,350,363,80,20,"Resize x ")
TextGadget(#Tx_gry    ,350,388,80,20,"Resize y ")
TextGadget(#Tx_Detail ,350,413,80,20,"Detail")
; --
ButtonGadget(#Bt_Neuzeich,260,438,80,20,"Neu Zeichnen",#PB_Button_Toggle)
; --
CanvasGadget(#Cv_Oben , 10,  10, 200, 200)
CanvasGadget(#Cv_Mitte, 10, 225, 200, 200)
CanvasGadget(#Cv_Unten, 10, 440, 200, 200)
;}
; --------------------------------------------------------
; --------------------------------------------------------
;{ erstes Bild darstellen
BERECHNUNG()
NEUZEICH()
;}
; --------------------------------------------------------
; --------------------------------------------------------
;{ Hauptschleife
  Define event,quit,num,dipneu
  event=0:quit=0:num=0:dipneu=0
  Define aa$,a1,a2,a3,a4,dip
  Repeat
     Event = WaitWindowEvent()
     If event=#PB_Event_CloseWindow:quit=1:EndIf
     If event= #PB_Event_Gadget
        num=EventGadget()
        dipneu=0
        Select num
          Case #St_P1_Rot    
            If EventType()= #PB_EventType_Change   
              P1_rot=Val(GetGadgetText(#St_P1_Rot))
              If P1_rot>255:P1_rot=255:SetGadgetText(#St_P1_Rot,Str(P1_rot)):EndIf
              If P1_rot<  0:P1_rot=  0:SetGadgetText(#St_P1_Rot,Str(P1_rot)):EndIf
              dipneu=1  
            EndIf
          Case #St_P1_Grn  
            If EventType()= #PB_EventType_Change   
              P1_grn=Val(GetGadgetText(#St_P1_Grn))
              If P1_grn>255:P1_grn=255:SetGadgetText(#St_P1_Grn,Str(P1_grn)):EndIf
              If P1_grn<  0:P1_grn=  0:SetGadgetText(#St_P1_Grn,Str(P1_grn)):EndIf
              dipneu=1
            EndIf
          Case #St_P1_Bla        
            If EventType()= #PB_EventType_Change   
              P1_bla=Val(GetGadgetText(#St_P1_Bla))
              If P1_bla>255:P1_bla=255:SetGadgetText(#St_P1_Bla,Str(P1_bla)):EndIf
              If P1_bla<  0:P1_bla=  0:SetGadgetText(#St_P1_Bla,Str(P1_bla)):EndIf
              dipneu=1
            EndIf
          Case #St_P2_Rot  
            If EventType()= #PB_EventType_Change   
              P2_rot=Val(GetGadgetText(#St_P2_Rot))
              If P2_rot>255:P2_rot=255:SetGadgetText(#St_P2_Rot,Str(P2_rot)):EndIf
              If P2_rot<  0:P2_rot=  0:SetGadgetText(#St_P2_Rot,Str(P2_rot)):EndIf
              dipneu=1
            EndIf
          Case #St_P2_Grn  
            If EventType()= #PB_EventType_Change   
              P2_grn=Val(GetGadgetText(#St_P2_Grn))
              If P2_grn>255:P2_grn=255:SetGadgetText(#St_P2_Grn,Str(P2_grn)):EndIf
              If P2_grn<  0:P2_grn=  0:SetGadgetText(#St_P2_Grn,Str(P2_grn)):EndIf
              dipneu=1
            EndIf
          Case #St_P2_Bla 
            If EventType()= #PB_EventType_Change   
              P2_bla=Val(GetGadgetText(#St_P2_Bla))
              If P2_bla>255:P2_bla=255:SetGadgetText(#St_P2_Bla,Str(P2_bla)):EndIf
              If P2_bla<  0:P2_bla=  0:SetGadgetText(#St_P2_Bla,Str(P2_bla)):EndIf
              dipneu=1
            EndIf
          Case #St_P3_Rot
            If EventType()= #PB_EventType_Change   
              P4_rot=Val(GetGadgetText(#St_P3_Rot))
              If P4_rot>255:P4_rot=255:SetGadgetText(#St_P3_Rot,Str(P4_rot)):EndIf
              If P4_rot<  0:P4_rot=  0:SetGadgetText(#St_P3_Rot,Str(P4_rot)):EndIf
              dipneu=1
            EndIf
          Case #St_P3_Grn
            If EventType()= #PB_EventType_Change   
              P4_grn=Val(GetGadgetText(#St_P3_Grn))
              If P4_grn>255:P4_grn=255:SetGadgetText(#St_P3_Grn,Str(P4_grn)):EndIf
              If P4_grn<  0:P4_grn=  0:SetGadgetText(#St_P3_Grn,Str(P4_grn)):EndIf
              dipneu=1
            EndIf
          Case #St_P3_Bla  
            If EventType()= #PB_EventType_Change   
              P4_bla=Val(GetGadgetText(#St_P3_Bla))
              If P4_bla>255:P4_bla=255:SetGadgetText(#St_P3_Bla,Str(P4_bla)):EndIf
              If P4_bla<  0:P4_bla=  0:SetGadgetText(#St_P3_Bla,Str(P4_bla)):EndIf
              dipneu=1
            EndIf
          Case #St_P4_Rot
            If EventType()= #PB_EventType_Change   
              P3_rot=Val(GetGadgetText(#St_P4_Rot))
              If P3_rot>255:P3_rot=255:SetGadgetText(#St_P4_Rot,Str(P3_rot)):EndIf
              If P3_rot<  0:P3_rot=  0:SetGadgetText(#St_P4_Rot,Str(P3_rot)):EndIf
              dipneu=1
            EndIf
          Case #St_P4_Grn 
            If EventType()= #PB_EventType_Change   
              P3_grn=Val(GetGadgetText(#St_P4_Grn))
              If P3_grn>255:P3_grn=255:SetGadgetText(#St_P4_Grn,Str(P3_grn)):EndIf
              If P3_grn<  0:P3_grn=  0:SetGadgetText(#St_P4_Grn,Str(P3_grn)):EndIf
              dipneu=1
            EndIf
          Case #St_P4_Bla  
            If EventType()= #PB_EventType_Change   
              P3_bla=Val(GetGadgetText(#St_P4_Bla))
              If P3_bla>255:P3_bla=255:SetGadgetText(#St_P4_Bla,Str(P3_bla)):EndIf
              If P3_bla<  0:P3_bla=  0:SetGadgetText(#St_P4_Bla,Str(P3_bla)):EndIf
              dipneu=1
            EndIf
          Case #St_Divisor
            If EventType()= #PB_EventType_Change   
              Divisor =Val(GetGadgetText(#St_Divisor))
              If Divisor>999:  Divisor=200:SetGadgetText(#St_Divisor,Str(Divisor)):EndIf
              If Divisor<  0:  Divisor=  1:SetGadgetText(#St_Divisor,Str(Divisor)):EndIf
              dipneu=1
            EndIf
          Case #St_Folge
            If EventType()= #PB_EventType_Change   
              ; reihenfolge der 4 kleinen Bilder im Uhrzeigersinn L o => L u
              aa$=GetGadgetText(#St_Folge)
              a1=Val(Mid(aa$,1,1))
              a2=Val(Mid(aa$,2,1))
              a3=Val(Mid(aa$,3,1))
              a4=Val(Mid(aa$,4,1))
              If a1<0 : a1=1 : EndIf
              If a1>4 : a1=4 : EndIf
              If a2<0 : a2=1 : EndIf
              If a2>4 : a2=4 : EndIf
              If a3<0 : a3=1 : EndIf
              If a3>4 : a3=4 : EndIf
              If a4<0 : a4=1 : EndIf
              If a4>4 : a4=4 : EndIf
              folge=a1*1000+a2*100+a3*10+a4
              If a1=1 :NumKB_1=#bld01:EndIf
              If a1=2 :NumKB_1=#bld02:EndIf
              If a1=3 :NumKB_1=#bld03:EndIf
              If a1=4 :NumKB_1=#bld04:EndIf
              ; --
              If a2=1 :NumKB_2=#bld01:EndIf
              If a2=2 :NumKB_2=#bld02:EndIf
              If a2=3 :NumKB_2=#bld03:EndIf
              If a2=4 :NumKB_2=#bld04:EndIf
              ; --
              If a3=1 :NumKB_3=#bld01:EndIf
              If a3=2 :NumKB_3=#bld02:EndIf
              If a3=3 :NumKB_3=#bld03:EndIf
              If a3=4 :NumKB_3=#bld04:EndIf
              ; --
              If a4=1 :NumKB_4=#bld01:EndIf
              If a4=2 :NumKB_4=#bld02:EndIf
              If a4=3 :NumKB_4=#bld03:EndIf
              If a4=4 :NumKB_4=#bld04:EndIf
              dipneu=1
            EndIf
          Case #St_grx
            If EventType()= #PB_EventType_Change   
              grx=Val(GetGadgetText(#St_grx))
              If grx>200:grx=200:SetGadgetText(#St_grx,Str(grx)):EndIf
              If grx<  0:grx= 20:SetGadgetText(#St_grx,Str(grx)):EndIf
              dipneu=1
            EndIf
          Case #St_gry
            If EventType()= #PB_EventType_Change   
              gry=Val(GetGadgetText(#St_gry))
              If gry>200:gry=200:SetGadgetText(#St_gry,Str(gry)):EndIf
              If gry<  0:gry= 20:SetGadgetText(#St_gry,Str(gry)):EndIf
              dipneu=1
            EndIf
          Case #St_Detail
            If EventType()= #PB_EventType_Change   
              ; welche Bilder sollen gegrabbt werden für resize
              detail=Val(GetGadgetText(#St_Detail))
              If detail>3:detail=3:SetGadgetText(#St_Detail,Str(detail)):EndIf
              If detail<0:detail=0:SetGadgetText(#St_Detail,Str(detail)):EndIf
              dipneu=2
            EndIf
          Case #Bt_Neuzeich  
            dip=GetGadgetState(#Bt_Neuzeich)
            If dip=1
              Neuzeich()
              SetGadgetText(#St_Folge,Str(folge))
              SetGadgetState(#Bt_Neuzeich,0)
            EndIf
        EndSelect          
     EndIf
     If dipneu=1     
       BERECHNUNG()
     EndIf
     If dipneu=2
       BERECHNUNG()
       GESTALTUNG()
     EndIf
Until quit=1
End
;} Haupschleife Ende
; --------------------------------------------------------
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Neuzeich()
   ;Bild oben original  
   StartDrawing(CanvasOutput(#CV_oben))
      FrontColor(RGB(220,220,220)):Box(0,0,200,200)     
      DrawImage(ImageID(#bld00), 0, 0)
   StopDrawing()   
   ;bild mitte ; Viertelbild von oben; reihenfolge änderbar  
   StartDrawing(CanvasOutput(#cv_mitte))
      FrontColor(RGB(220,220,220)):Box(00,215,200,200)     
      DrawImage(ImageID(NumKB_1),  0,  0,100,100)
      DrawImage(ImageID(NumKB_2),100,  0,100,100)
      DrawImage(ImageID(NumKB_3),100,100,100,100)
      DrawImage(ImageID(NumKB_4),  0,100,100,100)
   StopDrawing()    
   If bildfertig=1
    StartDrawing (WindowOutput(#Win_Main))
      DrawImage(ImageID(#bld05),450-10-grx,660-10-gry)
      StopDrawing()
    EndIf  
 ; hier ist der Aufruf der Funktion boxfill im jeweilgen Hauptprogramm    
 ;   Protected boxnum
 ;   boxnum=Boxfill(grx,gry,FarbeP1,FarbeP2,FarbeP3,FarbeP4,folge,divisor,detail)  
 ;       StartDrawing (WindowOutput(#Win_Main))
 ;     DrawImage(ImageID(boxnum),450-200-grx,660-200-gry)
 ;   StopDrawing()
 ; ende Boxfill-Aufruf im Hauptprogramm
    
  EndProcedure   
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Berechnung()
Rech_Bild_oben()  
Rech_Bild_01()  
Rech_Bild_02()  
Rech_Bild_03()  
Rech_Bild_04()  
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Rech_Bild_oben()
  Protected qy,qx,farbe
  Protected DiffLiRot,DiffLigrn,DiffLiBla 
  Protected DiffReRot,DiffRegrn,DiffReBla
  Protected DiffObRot,DiffObgrn,DiffObBla
  Protected Falirot,faligrn,falibla
  Protected FaRerot,faRegrn,faRebla
  FarbeP1=RGB(p1_rot,p1_grn,p1_bla)
  FarbeP2=RGB(p2_rot,p2_grn,p2_bla)
  FarbeP3=RGB(p3_rot,p3_grn,p3_bla)
  
  ;Farbdifferenzen zwischen Links Oben und Links Unten
  DiffLirot=P1_rot-P4_rot  
  DiffLigrn=P1_grn-P4_grn
  DiffLibla=P1_bla-P4_bla
  ;Farbdifferenzen zwischen Rechts Oben und Rechts Unten
  DiffRerot=P2_rot-P3_rot
  DiffRegrn=P2_grn-P3_grn
  DiffRebla=P2_bla-P3_bla
  For qy=0 To 199
    ;Berechnen der Farbe des Punktes auf der y-Achse
    ;Linksdifferenz/ Divisor*yStrecke
    FaLiRot=P1_rot+(Int(DiffLirot/Divisor)*qy)
    FaLigrn=P1_grn+(Int(DiffLigrn/Divisor)*qy)
    FaLibla=P1_bla+(Int(DiffLibla/Divisor)*qy)
    ;Berechnen der FArbe des Punktes auf der y-Achse
    ;Rechtsdifferenz/ Divisor*yStrecke
    FaRerot=P2_rot+(Int(DiffRerot/Divisor)*qy)
    FaRegrn=P2_grn+(Int(DiffRegrn/Divisor)*qy)
    FaRebla=P2_bla+(Int(DiffRebla/Divisor)*qy)
    ;Farbdifferenzen zwischen Links und Rechts
    Diffobrot=FaLiRot-FaRerot
    Diffobgrn=FaLigrn-FaRegrn
    Diffobbla=FaLibla-FaRebla
    For qx=0 To 199
          fabox(qx,qy,0)=FaLiRot+(Int((diffobrot/Divisor)*qx))
          fabox(qx,qy,1)=FaLigrn+(Int((diffobgrn/Divisor)*qx))
          fabox(qx,qy,2)=FaLibla+(Int((diffobbla/Divisor)*qx))
    Next qx  
  Next qy
  StartDrawing(ImageOutput(#bld00))
    For qy= 0 To 199
      For qx= 0 To 199
        farbe=RGB(fabox(qx,qy,0),fabox(qx,qy,1),fabox(qx,qy,2))
        Plot (qx,qy,farbe)
      Next qx
    Next qy  
  StopDrawing() 
  CopyImage(#bld00,#bld01)
  CopyImage(#bld00,#bld02)
  CopyImage(#bld00,#bld03)
  CopyImage(#bld00,#bld04)
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Rech_Bild_01()
  Protected dummy
  dummy=1 
EndProcedure
  ; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Rech_Bild_02()
  ; flip Horizontal Bild 00
  Protected qy,qx,f11,f12,f13,f21,f22,f23
  StartDrawing(ImageOutput(#bld02))
    For qy=0 To 199
      For qx=0 To 99
      f11=fabox(qx    ,qy,0)
      f12=fabox(qx    ,qy,1)
      f13=fabox(qx    ,qy,2)
      f21=fabox(199-qx,qy,0)
      f22=fabox(199-qx,qy,1)
      f23=fabox(199-qx,qy,2)
      Plot(     qx,qy,RGB(f21,f22,f23))
      Plot (199-qx,qy,RGB(f11,f12,f13))
    Next qx
  Next qy  
  StopDrawing()
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Rech_Bild_03()
; flip hrizontal und vertikal Bld00
  StartDrawing(ImageOutput(#bld03))
  Protected qy,qx,f11,f12,f13,f21,f22,f23,f31,f32,f33,f41,f42,f43
    For qy=0 To 99
      For qx=0 To 99
        f11=fabox(qx,qy,0)
        f12=fabox(qx,qy,1)
        f13=fabox(qx,qy,2)
        f21=fabox(199-qx,qy,0)
        f22=fabox(199-qx,qy,1)
        f23=fabox(199-qx,qy,2)
        f31=fabox(199-qx,199-qy,0)
        f32=fabox(199-qx,199-qy,1)
        f33=fabox(199-qx,199-qy,2)
        f41=fabox(qx,199-qy,0)
        f42=fabox(qx,199-qy,1)
        f43=fabox(qx,199-qy,2)
        
        Plot(    qx,    qy,RGB(f31,f32,f33))
        Plot(199-qx,    qy,RGB(f41,f42,f43)) 
        Plot(199-qx,199-qy,RGB(f11,f12,f13))
        Plot(    qx,199-qy,RGB(f21,f22,f23))
      Next qx
    Next qy  
  StopDrawing()
EndProcedure  
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Rech_Bild_04()
 ; flip vertikal bild0
 Protected qx,qy,f11,f12,f13,f41,f42,f43
 StartDrawing(ImageOutput(#bld04))
    For qy=0 To 99
      For qx=0 To 199
        f11= fabox(qx,qy,0)     
        f12= fabox(qx,qy,1)     
        f13= fabox(qx,qy,2)     
        f41= fabox(qx,199-qy,0)
        f42= fabox(qx,199-qy,1)
        f43= fabox(qx,199-qy,2)
        Plot(qx,    qy,RGB(f41,f42,f43))
        Plot(qx,199-qy,RGB(f11,f12,f13))
      Next qx
    Next qy  
  StopDrawing()
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Gestaltung()
  Protected bldgrx,bldgry,qx,qy
  Select detail
      Case 0
        bldgrx=grx/2:bldgry=gry/2
        StartDrawing(CanvasOutput(#cv_unten))
          DrawImage(ImageID(NumKB_1),     0,     0,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_2),bldgrx,     0,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_3),bldgrx,bldgry,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_4),     0,bldgry,bldgrx,bldgry)  
        StopDrawing()
      Case 1
        bldgrx=grx:bldgry=gry
        StartDrawing(CanvasOutput(#cv_unten))
          DrawImage(ImageID(NumKB_1),     0,     0,bldgrx,bldgry)
        StopDrawing()
      Case 2
        bldgrx=grx/2:bldgry=gry
        StartDrawing(CanvasOutput(#cv_unten))
          DrawImage(ImageID(NumKB_1),     0,     0,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_2),bldgrx,     0,bldgrx,bldgry)
        StopDrawing()
      Case 3  
        bldgrx=grx:bldgry=gry/2
        StartDrawing(CanvasOutput(#cv_unten))
          DrawImage(ImageID(NumKB_1),     0,     0,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_4),     0,bldgry,bldgrx,bldgry)  
        StopDrawing()
  EndSelect    
  bildfertig=0
  CreateImage(#bld05,grx+1,gry+1) 
  StartDrawing(CanvasOutput(#cv_unten))
  For qy=0 To gry
    For qx=0 To grx
      fabox(qx,qy,3)=Point(qx,qy)      
    Next qx
  Next qy  
  StopDrawing()
  StartDrawing(ImageOutput(#bld05))
  For qy=0 To gry
    For qx=0 To grx
      Plot (qx,qy,fabox(qx,qy,3))  
    Next qx
  Next qy
  StopDrawing()
  Bildfertig=1
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
; diese Funktion wird dann einfach in ein anderes Programm kopiert, dann kann man
; mit Boxfill eine Box mit Farbverlauf erstellen und bekommt die Imagenummer 
;zurückgeliefert, die man dann im Hauptprogramm als image benutzen kann
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 
Procedure Boxfill(grx,gry,FarbeP1,FarbeP2,FarbeP3,FarbeP4,folge,divisor,detail)
;  Protected grx,gry,FarbeP1,FarbeP2,Farbe,P3,FarbeP4,folge,divisor,detail
  Protected img0,img1,img2,img3,img4,img5
  Protected Dim fabox(200,200,3)
  
  img0=CreateImage(#PB_Any,200,200) 
  img1=CreateImage(#PB_Any,200,200) 
  img2=CreateImage(#PB_Any,200,200) 
  img3=CreateImage(#PB_Any,200,200) 
  img4=CreateImage(#PB_Any,200,200) 
  img5=#PB_Any 
  
 ; ----------------   Rech_Bild_oben() ----------------------
  Protected qy,qx,farbe
  Protected DiffLiRot,DiffLigrn,DiffLiBla 
  Protected DiffReRot,DiffRegrn,DiffReBla
  Protected DiffObRot,DiffObgrn,DiffObBla
  Protected Falirot,faligrn,falibla
  Protected FaRerot,faRegrn,faRebla
  
  p1_rot=Red(farbeP1):p1_grn=Green(farbeP1):p1_bla=Blue(farbeP1)
  p2_rot=Red(farbeP2):p1_grn=Green(farbeP2):p1_bla=Blue(farbeP2)
  p3_rot=Red(farbeP3):p1_grn=Green(farbeP3):p1_bla=Blue(farbeP3)
  
  ;Farbdifferenzen zwischen Links Oben und Links Unten
  DiffLirot=P1_rot-P4_rot  
  DiffLigrn=P1_grn-P4_grn
  DiffLibla=P1_bla-P4_bla
  ;Farbdifferenzen zwischen Rechts Oben und Rechts Unten
  DiffRerot=P2_rot-P3_rot
  DiffRegrn=P2_grn-P3_grn
  DiffRebla=P2_bla-P3_bla
  For qy=0 To 199
    ;Berechnen der Farbe des Punktes auf der y-Achse
    ;Linksdifferenz/ Divisor*yStrecke
    FaLiRot=P1_rot+(Int(DiffLirot/Divisor)*qy)
    FaLigrn=P1_grn+(Int(DiffLigrn/Divisor)*qy)
    FaLibla=P1_bla+(Int(DiffLibla/Divisor)*qy)
    ;Berechnen der FArbe des Punktes auf der y-Achse
    ;Rechtsdifferenz/ Divisor*yStrecke
    FaRerot=P2_rot+(Int(DiffRerot/Divisor)*qy)
    FaRegrn=P2_grn+(Int(DiffRegrn/Divisor)*qy)
    FaRebla=P2_bla+(Int(DiffRebla/Divisor)*qy)
    ;Farbdifferenzen zwischen Links und Rechts
    Diffobrot=FaLiRot-FaRerot
    Diffobgrn=FaLigrn-FaRegrn
    Diffobbla=FaLibla-FaRebla
    For qx=0 To 199
          fabox(qx,qy,0)=FaLiRot+(Int((diffobrot/Divisor)*qx))
          fabox(qx,qy,1)=FaLigrn+(Int((diffobgrn/Divisor)*qx))
          fabox(qx,qy,2)=FaLibla+(Int((diffobbla/Divisor)*qx))
    Next qx  
  Next qy
  StartDrawing(ImageOutput(img0))
    For qy= 0 To 199
      For qx= 0 To 199
        farbe=RGB(fabox(qx,qy,0),fabox(qx,qy,1),fabox(qx,qy,2))
        Plot (qx,qy,farbe)
      Next qx
    Next qy  
  StopDrawing() 
  CopyImage(img0,img1)
  CopyImage(img0,img2)
  CopyImage(img0,img3)
  CopyImage(img0,img4)
  ; ----------------   Rech_Bild_oben() ENDE  --------------
  ; -----------------  Rech_Bild_2 -------------------------
  ; flip Horizontal Bild 00
  Protected f11,f12,f13,f21,f22,f23
  StartDrawing(ImageOutput(img2))
    For qy=0 To 199
      For qx=0 To 99
      f11=fabox(qx    ,qy,0)
      f12=fabox(qx    ,qy,1)
      f13=fabox(qx    ,qy,2)
      f21=fabox(199-qx,qy,0)
      f22=fabox(199-qx,qy,1)
      f23=fabox(199-qx,qy,2)
      Plot(     qx,qy,RGB(f21,f22,f23))
      Plot (199-qx,qy,RGB(f11,f12,f13))
    Next qx
  Next qy  
  StopDrawing()
; -----------------  Rech_Bild_2 ENDE --------------------
; -----------------  Rech_Bild_3 -------------------------
; flip hrizontal und vertikal Bld00
  StartDrawing(ImageOutput(img3))
  Protected f31,f32,f33,f41,f42,f43
    For qy=0 To 99
      For qx=0 To 99
        f11=fabox(qx,qy,0)
        f12=fabox(qx,qy,1)
        f13=fabox(qx,qy,2)
        f21=fabox(199-qx,qy,0)
        f22=fabox(199-qx,qy,1)
        f23=fabox(199-qx,qy,2)
        f31=fabox(199-qx,199-qy,0)
        f32=fabox(199-qx,199-qy,1)
        f33=fabox(199-qx,199-qy,2)
        f41=fabox(qx,199-qy,0)
        f42=fabox(qx,199-qy,1)
        f43=fabox(qx,199-qy,2)
        
        Plot(    qx,    qy,RGB(f31,f32,f33))
        Plot(199-qx,    qy,RGB(f41,f42,f43)) 
        Plot(199-qx,199-qy,RGB(f11,f12,f13))
        Plot(    qx,199-qy,RGB(f21,f22,f23))
      Next qx
    Next qy  
  StopDrawing()
; -----------------  Rech_Bild_3 ENDE --------------------
; -----------------  Rech_Bild_4 -------------------------
; flip vertikal bild0

 StartDrawing(ImageOutput(img4))
    For qy=0 To 99
      For qx=0 To 199
        f11= fabox(qx,qy,0)     
        f12= fabox(qx,qy,1)     
        f13= fabox(qx,qy,2)     
        f41= fabox(qx,199-qy,0)
        f42= fabox(qx,199-qy,1)
        f43= fabox(qx,199-qy,2)
        Plot(qx,    qy,RGB(f41,f42,f43))
        Plot(qx,199-qy,RGB(f11,f12,f13))
      Next qx
    Next qy  
  StopDrawing()
; -----------------  Rech_Bild_4 ENDE --------------------
; -----------------  Gestaltung --------------------------
Protected bldgrx,bldgry,winnr,canvasnr,FensterNummer
Protected NumKB_1,NumKB_2,NumKB_3,NumKB_4
Protected aa$,a1,a2,a3,a4
FensterNummer = GetActiveWindow()
winnr=OpenWindow(#PB_Any, 0, 0, 210, 410, "BoxFill", #PB_Window_Invisible)
SetActiveWindow(winnr)

canvasnr=CanvasGadget(#PB_Any,1,1,209, 409)

aa$=Str(folge)
a1=Val(Mid(aa$,1,1))
a2=Val(Mid(aa$,2,1))
a3=Val(Mid(aa$,3,1))
a4=Val(Mid(aa$,4,1))
If a1=1 :NumKB_1=img1:EndIf
If a1=2 :NumKB_1=img2:EndIf
If a1=3 :NumKB_1=img3:EndIf
If a1=4 :NumKB_1=img4:EndIf
; --
If a2=1 :NumKB_2=img1:EndIf
If a2=2 :NumKB_2=img2:EndIf
If a2=3 :NumKB_2=img3:EndIf
If a2=4 :NumKB_2=img4:EndIf
; --
If a3=1 :NumKB_3=img1:EndIf
If a3=2 :NumKB_3=img2:EndIf
If a3=3 :NumKB_3=img3:EndIf
If a3=4 :NumKB_3=img4:EndIf
; --
If a4=1 :NumKB_4=img1:EndIf
If a4=2 :NumKB_4=img2:EndIf
If a4=3 :NumKB_4=img3:EndIf
If a4=4 :NumKB_4=img4:EndIf
                            

Select detail
      Case 0
        bldgrx=grx/2:bldgry=gry/2
        StartDrawing(CanvasOutput(canvasnr))
          DrawImage(ImageID(NumKB_1),     0,     0,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_2),bldgrx,     0,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_3),bldgrx,bldgry,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_4),     0,bldgry,bldgrx,bldgry)  
        StopDrawing()
      Case 1
        bldgrx=grx:bldgry=gry
        StartDrawing(CanvasOutput(canvasnr))
          DrawImage(ImageID(NumKB_1),     0,     0,bldgrx,bldgry)
        StopDrawing()
      Case 2
        bldgrx=grx/2:bldgry=gry
        StartDrawing(CanvasOutput(canvasnr))
          DrawImage(ImageID(NumKB_1),     0,     0,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_2),bldgrx,     0,bldgrx,bldgry)
        StopDrawing()
      Case 3  
        bldgrx=grx:bldgry=gry/2
        StartDrawing(CanvasOutput(canvasnr))
          DrawImage(ImageID(NumKB_1),     0,     0,bldgrx,bldgry)
          DrawImage(ImageID(NumKB_4),     0,bldgry,bldgrx,bldgry)  
        StopDrawing()
  EndSelect    
  
  
  
  CreateImage(img5,grx+1,gry+1) 
  StartDrawing(CanvasOutput(canvasnr))
  For qy=0 To gry
    For qx=0 To grx
      fabox(qx,qy,3)=Point(qx,qy)      
    Next qx
  Next qy  
  StopDrawing()
  StartDrawing(ImageOutput(img5))
  For qy=0 To gry
    For qx=0 To grx
      Plot (qx,qy,fabox(qx,qy,3))  
    Next qx
  Next qy
  StopDrawing()
  
  
  ; numkb muss noch ermittelt werden
  ; es muss ein canvas erstellt wedren
  ; um das bild zu zeichen und dann zu greabben
  ProcedureReturn img5
  SetActiveWindow(fensternummer)
  CloseWindow(winnr)
  ;kann man das array fabox wieder löschen ?
  ;kann man die Bilder 1-4 löschen ?
  
  
; -----------------  Gestaltung ENDE --------------------
  
  
  
EndProcedure
; +++++++++++++++++++++++++++++++++++++++++++++++++++++ 



Benutzeravatar
Kiffi
Beiträge: 10711
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Teil 2: Anfängerprobleme beim ersten Programm

Beitrag von Kiffi »

Diogenes hat geschrieben:ich möchte eine schöne Box mit Farbverläufen zeichnen. Dafür ist in PB keine Funktion vorgesehen.
da ich das jetzt schon zum zweiten Mal lese: Schau Dir doch mal die *Gradient-Befehle an:

http://purebasic.com/german/documentati ... index.html

Grüße ... Kiffi
a²+b²=mc²
Antworten