Seite 1 von 1

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

Verfasst: 31.07.2007 10:11
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

Verfasst: 31.07.2007 10:29
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.

Verfasst: 31.07.2007 10:43
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

Verfasst: 31.07.2007 11:36
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

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