Eingabe ermitteln, in Variable übergeben und Box einfärben

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

Eingabe ermitteln, in Variable übergeben und Box einfärben

Beitrag von squee »

Guten Morgen.

Ich habe da ein Verständnissproblem. :?

Das ist ein Auszug aus meinem Code.

Ich will, dass die Box immer die Farbe hat die ich oben in die r g b srings eingebe.
Wie kann ich die Eingabe ermitteln, in eine Variable übergeben und dann die Box immer meiner Eingabe entsprechend einfärben?



Code: Alles auswählen

    If CreateGadgetList(WindowID(0))
      Frame3DGadget(3, 603,  186, 195, 130, "Farben")
        StringGadget(4, 650,  208, 50, 20, "ff0000")
        r = StringGadget(9, 650,  240, 30, 20, "255", #PB_String_Numeric)
        g = StringGadget(10, 650,  265, 30, 20, "0", #PB_String_Numeric)
        b = StringGadget(11, 650,  290, 30, 20, "0", #PB_String_Numeric)
        TrackBarGadget(6, 690, 240, 100, 20, 0, 255)
        TrackBarGadget(7, 690, 265, 100, 20, 0, 255)
        TrackBarGadget(8, 690, 290, 100, 20, 0, 255)
        ButtonGadget(#Button_1, 710, 208, 75, 20, "Farbfelder")
      ExplorerTreeGadget(5, 603, 328, 198, 251, "*.html;*.css*.txt")
    EndIf




    Repeat
    Select WaitWindowEvent()
    Case #PB_Event_Menu
    ...
    ...
    ...
    Case #PB_Event_CloseWindow
            beenden_abfrage = MessageRequester("jackyedit","Programm beenden?",#PB_MessageRequester_YesNo)
            If beenden_abfrage = 6
            End
            EndIf
        EndSelect


        If StartDrawing(WindowOutput(0))
          Box(615, 206, 25, 25 ,RGB(r,g,b))
          Line(615, 206, 0, 25 ,RGB(0,0,0))
          Line(639, 206, 0, 25 ,RGB(0,0,0))
          Line(615, 206, 25, 0 ,RGB(0,0,0))
          Line(615, 230, 25, 0 ,RGB(0,0,0))
          Line(616, 206, 0, 25 ,RGB(255,255,255))
          Line(638, 206, 0, 25 ,RGB(255,255,255))
          Line(615, 207, 25, 0 ,RGB(255,255,255))
          Line(615, 229, 25, 0 ,RGB(255,255,255))
        StopDrawing()

    EndIf
  Until beenden_abfrage = 6
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Testbaren und ausführbaren Code bitte!

Für Deine Farbbox solltest Du ein ImageGadget nehmen und nicht aufs Fenster kritzeln.

Eine Procedure, der Du die Farbe als Parameter übergibst, diese zeichnet
dann die Box und setzt das Image in das ImageGadget.

Jedesmal wenn die Farbe geändert werden soll, rufst Du diese Procedure mit
der neuen Farbe auf, kritzeleien im EventLoop sind unnötig.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
pede
Beiträge: 90
Registriert: 08.07.2007 20:37
Wohnort: brixen / Italien

Beitrag von pede »

ääh musst du die Farbe nicht mit GetGadgetText(#string) ablesen und dann via Val() in eine Variable schreiben...

diese kannst du dann im RGB Befehl verwenden....

Code: Alles auswählen

OpenWindow(0,100,100,1000, 1000,"test")
CreateGadgetList(WindowID(0))
StringGadget(9, 650,  240, 30, 20, "0", #PB_String_Numeric)

Repeat

StartDrawing(WindowOutput(0))
r$= GetGadgetText(9)
Circle(500,500, 100, RGB( Val(r$), 0, 0))
StopDrawing()

Until WaitWindowEvent() = #PB_Event_CloseWindow
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Simples Beispiel:

Code: Alles auswählen

Procedure SetBox(Color.l)
  If CreateImage(0, 80, 80)
    StartDrawing(ImageOutput(0))
    Box(0, 0, 80, 80, Color)
    StopDrawing()
    SetGadgetState(0, ImageID(0))
  EndIf
EndProcedure

If OpenWindow(0, #PB_Ignore, #PB_Ignore, 200, 100, "bla")
  If CreateGadgetList(WindowID(0))
    ImageGadget(0, 10, 10, 80, 80, 0, #PB_Image_Border)
    StringGadget(1, 100, 10, 80, 25, "255", #PB_String_Numeric)
    SetBox(Val(GetGadgetText(1)))
    ButtonGadget(2, 100, 60, 80, 25, "Setzen")
  EndIf
EndIf

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow : Break
    Case #PB_Event_Gadget
      Select EventGadget()
        Case 2 ; Button setzen
          SetBox(Val(GetGadgetText(1)))
      EndSelect
  EndSelect
ForEver
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
squee
Beiträge: 25
Registriert: 21.07.2007 11:07

Beitrag von squee »

Danke für die Beispiele.
Habs verstanden.
:mrgreen:
@ts-soft [einen testbaren Code werd ich in Zukunft reinstellen]
--------------------------------------------------------------------------------------------------------------

www.squee-design.de
Antworten