Seite 3 von 5

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 05:02
von STARGÅTE
Delle hat geschrieben:
STARGÅTE hat geschrieben:Wenn ich mit PB_Any ein Objekt erzeugt, so kann ich die Nummer normal verwenden wie eine "Nummer" halt.
Ja was denn nun? Weiter oben schreibst Du noch das es NICHT geht:
Mit #PB_Any wird ein "verbindunsloses" Element für das Objekt erstellt und du bekommst in dem Fall eine Art Adresse (Objektnummer) zurück. Diese Nummer selbst zu verwenden geht nicht.
Richtig, du kannst nicht selbst die von PB_Any erzeuge Nummer nutzen, um ein neues Gadget mit dieser Nummer zu erzeugen!
Was du aber vorhin vorhattest!
Du kannst die Nummer aber sehrwohl für alle andere Befehle verwenden.
Delle hat geschrieben:Hier benutzt Du ja einen festen Namen "gadget", dynamisch ist das natürlich nicht:
gadget = ButtonGadget(#PB_Any, 10, 10, 300, 30, "Drücken um meine Position zu ändern.")
Das Gadget wird aber dynamisch erzeugt, weil ich jederzeit weitere erzeugen kann, ohne deren Nummer zu kennen und ohne andere (ausversehen) zu überschreiben.
Da du ja so scharf auf Dynamik bist, hier ein Code, wo 5 Buttons/Sekunde erzeugt werden, die in einer eigenen Liste verwaltet werden und auch wieder gelöscht werden können.

Code: Alles auswählen

Enumeration
	#Window
	#Timer
	#Gadget_Clear
EndEnumeration


OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ButtonGadget(#Gadget_Clear, 0, 0, 150, 20, "Alle Button freigeben")
AddWindowTimer(#Window, #Timer, 200)

Global NewList MyButton.i()

Repeat
	
	Select WaitWindowEvent()
			
		Case #PB_Event_CloseWindow
			End
			
		Case #PB_Event_Timer
			Select EventTimer()
				Case #Timer
					AddElement(MyButton())
					MyButton() = ButtonGadget(#PB_Any, Random(700), Random(550)+20, 100, 30, "Zufalls Button "+Str(Random(9999)))
			EndSelect
		Case #PB_Event_Gadget
			Select EventGadget()
				Case #Gadget_Clear
					ForEach MyButton()
						FreeGadget(MyButton())
						DeleteElement(MyButton())
					Next
				Default
					Debug GetGadgetText(EventGadget())+"  ,  interne Nummer: "+Str(EventGadget())
			EndSelect
			
	EndSelect
	
ForEver

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 05:18
von ts-soft
Als "Krümmelpupser" möchte ich zu STARGÅTEs Code noch hinzufügen, das man für jeden Objekttype eine separate Enumeration
nehmen sollte, die bei 0 anfängt. Bei den 3 Objekten ist das natürlich Wurscht :mrgreen:
Wollte nur sagen, das die in verschiedenen Listen verwaltet werden, also Fenster, Gadgets, Timer, sowie natürlich auch
Dateien, Bilder, XML usw.

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 08:05
von Danilo
Diese "Grenze" von 9.999 Gadgets ist auch nur als Überprüfung im Debugger eingebaut,
weil das ein häufiger Anfängerfehler ist und die PB-Entwickler spezielle Hilfen einbauen,
um es Anfängern zu erleichtern.

Die Profis unter Euch, die Programme mit hunderttausenden Fenstern und Gadgets
schreiben, können diese Meldung durch DisableDebugger bei der Erstellung der
Objekte umgehen. Oder natürlich Debugger ganz ausschalten, aber das weiß ein
solcher Profi natürlich selbst.

Code: Alles auswählen

If OpenWindow(0, 0, 0, 222, 200, "ButtonGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    DisableDebugger
    ButtonGadget(1000000, 10, 10, 200, 20, "Standard Button")
    ButtonGadget(1000001, 10, 40, 200, 20, "Left Button", #PB_Button_Left)
    ButtonGadget(1000002, 10, 70, 200, 20, "Right Button", #PB_Button_Right)
    ButtonGadget(1000003, 10,100, 200, 60, "Multiline Button  (longer text gets automatically wrapped)", #PB_Button_MultiLine)
    ButtonGadget(1000004, 10,170, 200, 20, "Toggle Button", #PB_Button_Toggle)
    EnableDebugger
    
    SetGadgetText(1000004,"tOOgle Btn")
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Es ist also kein Problem auch 1 Million Gadgets zu erstellen, falls Jemand solche Projekte mit PureBasic schreibt.

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 09:10
von rolaf
Danilo hat geschrieben:Es ist also kein Problem auch 1 Million Gadgets zu erstellen, falls Jemand solche Projekte mit PureBasic schreibt.
Dank dir und deiner Profiinfo (die nun keine mehr ist) können jetzt also auch JENSe Ihren Unfug treiben. >:)

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 10:30
von Danilo
rolaf hat geschrieben:Dank dir und deiner Profiinfo (die nun keine mehr ist) können jetzt also auch JENSe Ihren Unfug treiben. >:)
Hast Du etwas dagegen? Es gibt immer wieder Menschen die Informationen jeglicher Art
für "Unfug" oder Schlimmeres nutzen. Aufklärung und ein Appell an die Vernunft ist da,
meiner Meinung nach, besser als Zensur. Freiheit, dazu gehört auch Informationsfreiheit.

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 12:10
von 7x7
Danilo hat geschrieben:Die Profis unter Euch, die Programme mit hunderttausenden Fenstern und Gadgets
schreiben,......
:mrgreen:

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 17:22
von ts-soft
Oh, ein Tipp wie ich sinnlos Speicherplatz verschwende, danke schön, von Profi zu Profi :bounce:

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 17:27
von NicTheQuick
Ich bitte euch. Schaut euch an, was andere .NET Miniprogrämmchen an Speicherplatz fressen und vergleicht das dann mal mit 4 MB für 1 Mio. Gadgetnummern. Das stört nun wirklich keinen.

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 17:32
von ts-soft
Sind 32 MByte im Falle von Gadgets, bei anderen Objekten können es auch mehr oder weniger sein.
Ausserdem sind es nicht 32 MByte für 1000000 Gadgets, sondern sind es schon bei einem Gadget
mit der Nummer 1000000.
Ausserdem sollte man dann auch kein #PB_Any mehr nutzen. Also sehr viel Sinn in einem solchem
Vorgehen kann ich nicht entdecken, weil ja auch kein Vorteil bzw. Nutzen entsteht.

Code: Alles auswählen

Structure PB_Gadget
  Gadget.l
  *VT.PB_GadgetVT
  UserData.l
  OldCallback.l
  Daten.l[4]
EndStructure

Dim gadgets.PB_Gadget(1000000)

Re: Gadgetnummer über 9999 möglich ?

Verfasst: 26.01.2012 17:59
von Thorium
Es gibt kein Projekt was 10.000 statische Gadgets verwendet.
Die Konstanten sind halt etwas einfacher zu handhaben als Handles von #PB_Any. Machen aber auch halt nur Sinn wenn man eben nicht dynamisch arbeitet.

Natürlich kannst du ein Gadget erstellt mit #PB_Any löschen und neuerstellen, garkein Problem. Die zurückgegebene Handlenummer wird in eine Variable gespeichert und diese Variable wird dann überall als Gadgetnummer eingesetzt. Löscht du das Gadget und erstellst es neu, gibts ne neue Handlenummer, diese steckst du einfach in die gleiche Variable. Und somit bleiben alle Befehle, welche diese Variable als Gadgetnummer nutzen gültig.