over 10000

Für allgemeine Fragen zur Programmierung mit PureBasic.
Andesdaf
Moderator
Beiträge: 2671
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag 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
Win11 x64 | PB 6.20
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Beitrag 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.
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 »

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
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
Broncbuster
Beiträge: 18
Registriert: 02.11.2008 21:03

Beitrag 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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> hab es gerade auch rausbekommen

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

also testen! :twisted:
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 »

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!
Zuletzt geändert von ts-soft am 21.02.2009 22:16, insgesamt 1-mal geändert.
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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?
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 »

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
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
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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.
Antworten