Seite 2 von 3

Verfasst: 21.02.2009 19:19
von Andesdaf
>Wie könnte ich einem StringGadget das per #PB_Any erstellt wird, gleich noch eine Schriftart, Font usw. mitgeben?

Als Liste vllt. so. (nicht geprüft)

Code: Alles auswählen


Structure ListStrings
  slID.l
  ssFont.s
  slColor.l
EndStructure

Global NewList LiStr.ListStrings()

If OpenWindow(0, 0, 0, 230, 200, "Event-Handling Beispiel...", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)

   AddElement(LiStr())
     LiStr()\slID = StringGadget  (#PB_Any, 10, 10, 200, 20, "Klick mich")
     FontRequester("bla",16,0)
     LiStr()\ssFont = SelectedFontName()
     LiStr()\slColor = ColorRequester() 

Debug LiStr()\slID
Debug LiStr()\ssFont
Debug LiStr()\slColor

   Repeat
     Event = WaitWindowEvent()
     
     Select Event
     
       Case #PB_Event_Gadget
         Select EventGadget()

         EndSelect
     
     EndSelect
   Until Event = #PB_Event_CloseWindow
 EndIf

Verfasst: 21.02.2009 21:23
von Broncbuster
also tut mir leid, Hilfe über Handles und Nummern gelesen, finde aber keine Möglichkeit die GadgetID auszulesen die ich per #PB_Any erstellt habe. Meine damit aber die OpenFormphase, nicht die Klickmichphase.

Was ist denn nun mit over 10000? Ist halt so? Oder wie? Oder was?

Manche stehen auf dem Schlauch und haben auch noch Kleber unter der Schuhsohle.

Verfasst: 21.02.2009 21:45
von ts-soft

Code: Alles auswählen

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "void")
gadget = ButtonGadget(#PB_Any, 10, 10, 60, 30, "bla")
SetGadgetData(gadget, gadget)
gadget = ButtonGadget(#PB_Any, 10, 50, 60, 30, "blub")
SetGadgetData(gadget, gadget)

Repeat
  event = WaitWindowEvent()
  If event = #PB_Event_Gadget
    gadget = EventGadget()
    Debug "Meine ID: " + Str(GetGadgetData(gadget))
    Debug GetGadgetText(GetGadgetData(gadget))
  EndIf
Until event = #PB_Event_CloseWindow

Verfasst: 21.02.2009 21:49
von Broncbuster
Hallo TS,

hab es gerade auch rausbekommen

Code: Alles auswählen

Enumeration
#Save
EndEnumeration

Procedure OpenSave()

If IsWindow(#Save) = 0
  OpenWindow(#Save, 50, 5, 400, 230, "Info",  #PB_Window_SystemMenu | #PB_Window_TitleBar )
  Id = StringGadget(#PB_Any, 5, 5,390,30,"Ich bin")
  MessageRequester("GadgetID", Str(Id))
  SetGadgetText(id, "Hallo hier ist die ID " + Str(Id))
EndIf  

EndProcedure
OpenSave()
Repeat
EventID = WaitWindowEvent()
Select EventID
Case #PB_Event_CloseWindow
Quit = 1

EndSelect
Until Quit = 1
End 
Zum Glück hat der Kleber an den Schuhsohlen nichts getaucht.
Vielen Dank

Verfasst: 21.02.2009 21:51
von Kaeru Gaman

Code: Alles auswählen

WindowNr.l = OpenWindow( #PB_Any, 0,0, 200, 100, "Demo für #PB_Any" )

ButtonGadgetNr.l = ButtonGadget( #PB_Any, 10,10, 60,30, "Click" )

TextGadgetNr.l = TextGadget( #PB_Any, 10, 60, 180, 30, "Normal" )

FLAG = 0

Repeat
  EventID = WaitWindowEvent()
  EvGadgetID = EventGadget()

  Select EventID
    Case #PB_Event_Gadget
      Select EvGadgetID
        Case ButtonGadgetNr
          If FLAG = 0
            SetGadgetText( ButtonGadgetNr, "Pups" )
            SetGadgetText( TextGadgetNr, "Geändert" )
            FLAG = 1
          Else
            SetGadgetText( ButtonGadgetNr, "Click" )
            SetGadgetText( TextGadgetNr, "Normal" )
            FLAG = 0
          EndIf
      EndSelect
  EndSelect
Until EventID = #PB_Event_CloseWindow
> Was ist denn nun mit over 10000? Ist halt so? Oder wie? Oder was?

JA!

NUMMERN von PB-Objekten, egal ob Fenster, Sprites, Gadgets, Images oder sonstwas, können nur von 0-9999 gesetzt werden.

IDs sind das selbe wie Handles, diese werden vom OS vergeben und können dementsprechend Werte annehmen.

wenn du ein Objekt mit einer festen Nummer erzeugst, muss diese unter 10000 liegen.
wenn du ein Objekt mit #PB_Any erzeugst, bekommst du beim Erzeugen sein Handle zurück.

Verfasst: 21.02.2009 22:09
von Kaeru Gaman
> hab es gerade auch rausbekommen

als du das geschrieben hast, hatte ich den code auch fertig...

also testen! :twisted:

Verfasst: 21.02.2009 22:09
von ts-soft
Kaeru Gaman hat geschrieben: wenn du ein Objekt mit einer festen Nummer erzeugst, muss diese unter 10000 liegen.
Das ist eine Debugger Einschränkung, ohne Debugger
gehts, man sollte dann aber dynamisch und statische Erzeugung in diesem
Falle nicht mixen
Kaeru Gaman hat geschrieben: wenn du ein Objekt mit #PB_Any erzeugst, bekommst du beim Erzeugen sein Handle zurück.
Falsch, Du bekommt den Pointer zur internen List, wenn Du nicht #PB_Any
nutzt kommt das OS-Handle bei manchen Objekten!

Verfasst: 21.02.2009 22:14
von Kaeru Gaman
ts-soft hat geschrieben:
Kaeru Gaman hat geschrieben: wenn du ein Objekt mit #PB_Any erzeugst, bekommst du beim Erzeugen sein Handle zurück.
Falsch, Du bekommt den Pointer zur internen List, wenn Du nicht #PB_Any
nutzt kommt das OS-Handle bei manchen Objekten!
wus?
wie soll denn das funktionieren.

wenn das dynamisch erzeugte Objekt in der Liste steht, dann könnte man doch dynamische und statische Erzeugung niemals vermischen.
außerdem, wieso sollte eine Liste mit 10000 elementen erzeugt werden, wenn man nur eines mit Nr. 10000 erzeugt,
und wo sollten denn dann die dynamisch erzeugten stehen, nach 10000?
das ergäbe ja noch weniger sinn.

gibts dazu ausführliche Hintergrundinfos? wo?

Verfasst: 21.02.2009 22:18
von ts-soft
Bei #PB_Any kann er dir das OSHandle nicht geben, weil er Dir ja eine
dynamische ID geben muß (diese ist ein MemoryPointer)
Bei fester ID gibt er Dir bei manchen Objekten das Handle, ist sinnvoller als
ein einfaches #True

Verfasst: 21.02.2009 22:30
von Kaeru Gaman
ts-soft hat geschrieben:Bei #PB_Any kann er dir das OSHandle nicht geben, weil er Dir ja eine
dynamische ID geben muß (diese ist ein MemoryPointer)
das ist keine Begründung....
wieso sollte er nicht das Handle zurückgeben, er braucht doch keine ID im Sinne einer Nummer,
weil er keinen Index irgendeiner Objektliste braucht.

*grübel* ... oder ist das ein direkter Mem-Pointer, auf ein einzelnes PB-Objekt, das nicht bestandteil einer Liste, bzw. einer extra-liste ist?
das könnte ich nachvollziehen.