Seite 1 von 2

Leeres Gadget

Verfasst: 19.06.2012 18:14
von Frabbing
Hi,

kennt jemand eine Möglichkeit (ohne API!) ein Gadget so zu erstellen oder zu verändern, dass es keinerlei Inhalt anzeigt? Natürlich, ohne HideGadget... oder den hidden-Style. Der scheidet aus verschiedenen Gründen aus.
Keinerlei Inhalt bedeutet hier: Kein Pixel wird gesetzt, also komplett transparent.

Re: Leeres Gadget

Verfasst: 19.06.2012 18:29
von RSBasic
Du kannst einen ContainerGadget mit der Größe "0,0" erstellen. Da dieses Gadget ohne Flag borderless ist, ist es nicht sichtbar, egal was sich im ContainerGadget befindet. Reicht dir das?

Re: Leeres Gadget

Verfasst: 19.06.2012 18:34
von STARGÅTE

Code: Alles auswählen

Enumeration
	#Window
	#Gadget
EndEnumeration


OpenWindow(#Window, 0, 0, 800, 600, "WindowTitle", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
	StringGadget(#Gadget, 0, -100, 400, 20, "Hallo Welt!")

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
Einfach aus dem Anzeigebereich schieben.

Aber ich würde das nicht zu sehende Gadget erst garnicht erstellen, das wäre wohl die einfachste Variante.
Wenn du also nicht HideGadget verwenden willst (warum auch immer) wozu erstellst du überhaupt das Gadget?

Um Inhalte zu speichern kannst du Variablen oder Speicherblöcke nutzen /:->

Re: Leeres Gadget

Verfasst: 19.06.2012 18:34
von Frabbing
Nein leider nicht. Ich vergaß, die Größe sollte real sein, sagen wir mal z.B. 160x120 Pixel.

Das ganze soll eine Art übergeordnetes Gadget für weitere normale (Child-)Gadgets sein, darf aber nicht sichtbar und auch nicht hidden sein. Es muss auch ein richtiges Gadget sein, das mit PB erstellt wurde, ohne API also.
Hab selber bislang leider keine Möglichkeit gefunden.

Re: Leeres Gadget

Verfasst: 19.06.2012 18:37
von RSBasic
Soll das vielleicht ein Overlay-Gadget sein? Also ein Gadget, welches auf ein anderes Gadget positioniert werden soll?
Vielleicht sagst du uns, was du vor hast. :D

Re: Leeres Gadget

Verfasst: 19.06.2012 18:38
von STARGÅTE
Wenn du ein ContainerGadget brauchst, warum nimmst du dann nicht das ContainerGadget mit 160x120 ?
Das ist nicht sichtbar und ist dafür auch gedacht.

Wenn du nicht so um den heißen Brei reden würdest, könnte dir man vielleicht besser helfen.

Es ergibt für mich keinen Sinn, zB ein ListViewGadget zu erstellen, welches aber nicht sichbar ist :?

Re: Leeres Gadget

Verfasst: 19.06.2012 19:44
von Frabbing
Ich bin nur an dieser speziellen Lösung interessiert, die ich oben genau beschrieben habe. Etwas Alternatives, Selbstgemaltes oder Controls auf Basis einer eigenen Class (damit wäre es sehr einfach) scheiden aber leider aus mehreren unterschiedlichen Gründen aus, damit erübricht sich eine weitere Erklärung, bzw. scheiden Alternativen - die ich ansonsten immer gerne entgegen nehme, an dieser Stelle aber nicht funktionieren werden - von vornherein aus.
Wenn du ein ContainerGadget brauchst, warum nimmst du dann nicht das ContainerGadget mit 160x120 ?
Das ist nicht sichtbar und ist dafür auch gedacht.
Natürlich ist eine farbige Fläche sichtbar, spätestens, wenn der Hintergrund bunt ist; und das ist er.
Ich brauche nicht zwinged ein Containergadget, irgendein Gadget reicht mir, bei dem man z.B. per Subclassing alle Ausgaben unterdrückt. :-)
Es ergibt für mich keinen Sinn, zB ein ListViewGadget zu erstellen, welches aber nicht sichbar ist
Für mich aber schon. Kennst du dazu eine Möglichkeit?

Re: Leeres Gadget

Verfasst: 19.06.2012 19:50
von RSBasic
Die von PB bereitgestellten Gadgets sind alle nicht transparent, daher wird es ohne API schwierig.
Mit API kannst du beispielsweise dafür sorgen, dass ein TextGadget transparent ist, aber ohne API ist das so nicht möglich.

\\Edit:
Kannst du mir erklären, warum du kein HideGadget() nutzen möchtest?

\\Edit2:
Und was ist, wenn du dein "Overlay"-Gadget hinter deinem Gadget erstellst, damit es überdeckt wird, aber dennoch in dieser Position vorhanden ist?

Re: Leeres Gadget

Verfasst: 19.06.2012 20:09
von Frabbing
RSBasic hat geschrieben:Die von PB bereitgestellten Gadgets sind alle nicht transparent, daher wird es ohne API schwierig.
Mit API kannst du beispielsweise dafür sorgen, dass ein TextGadget transparent ist, aber ohne API ist das so nicht möglich.

\\Edit:
Kannst du mir erklären, warum du kein HideGadget() nutzen möchtest?

\\Edit2:
Und was ist, wenn du dein "Overlay"-Gadget hinter deinem Gadget erstellst, damit es überdeckt wird, aber dennoch in dieser Position vorhanden ist?
API geht nur nicht bei der reinen Gadget-Erstellung. Ist es erzeugt, kann ich durchaus auf API zurückgreifen.
Eine tolle Möglichkeit ist die API LockWindowUpdate(), die unterdrückt ein Neuzeichnen. Leider aber nicht, wenn das ganze Fenster manuell neugezeichnet wird, was manchmal der Fall ist.

Zu 1.: Ja, aktuell hidden-Gadgets bedeuten in der Anwendung schon ein Nicht-Vorhandensein. Die Anwendung (ein visueller Designer übrigens) ignoriert diese in manchen Situationen.

Zu 2.: Das geht nicht, weil das unsichtbare Gadget mehrere Gadget binden soll. D.H., verschiebe ich das Unsichtbare, sollen alle seine Childs mitwandern, wie bei normalen Parents üblich.

Re: Leeres Gadget

Verfasst: 19.06.2012 20:24
von RSBasic
Ah ein VD, ich habs geahnt. Für PB oder für eine andere Programmiersprache? Ich hoffe, für eine andere Sprache. <)

Und was ist, wenn du jedes Gadget, welches erstellt werden soll, automatisch in einem ContainerGadget (+2px Größe) unterbringst? Dann hättest du einen unsichtbaren Rahmen, den du anfassen kannst.

Oder die Gadgets, die du in Gruppen verschieben möchtest, in einem ContainerGadget plazierst.

Ansonsten hätte ich eigentlich gesagt, dass du einfach ein transparentes Overlay-Gadget/-Fenster bei MouseHover drauflegst, damit du das unterliegende Gadget verschieben oder in der Größe ändern kannst.

Btw: Es gibt auch einfach die Möglichkeit, das Gadget unter der Maus zu ermitteln.