Frage zu #PB_Any?

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
FISCHAUGE
Beiträge: 108
Registriert: 25.03.2005 21:07
Wohnort: Karlsruhe
Kontaktdaten:

Frage zu #PB_Any?

Beitrag von FISCHAUGE »

HI,
Ich habe in meinem Program ein MDI gadget, durch drücken des Menü eintrages "Neues Fenster" kann der User so viele neue Fenster machen wie er will, jedes fenster bestizt einen button mit der gleichen Funtkion, die ID ist also Dynamisch.

Bsp:

Code: Alles auswählen

fonttool = ButtonImageGadget(#PB_Any,10,45,32,32,ImageID(3))

Wie sage ich jetzt PB, das er bei drücken dieses Buttons, folgende Aktion ausführt? bzw. auf die gadget's des aktiven ChildWindow zugreift?

Code: Alles auswählen

  Select #PB_Event_Gadget
             

          Case  fonttool
                        FontName$ = "Arial" 
                        FontSize  = 14      
 FontRequester(FontName$, FontSize, #PB_FontRequester_Effects)
            EndSelect


Danke schon mal.
Na alles Senkrecht?
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Frage zu #PB_Any?

Beitrag von STARGÅTE »

Genau verstehe ich nicht was du meinst ...

Auch eine mit #PB_Any erstellte Gadget-Nummer ist einmalig für die gesamte Anwendung (also nicht Window-Spezifisch).

Falls du aus einem gedrückten Button irgendwelche Informationen über das ihm übergeordnete Fenster haben willst, kannst du EventWindow() nutzen, und bekommst so die Window-Nummer.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
FISCHAUGE
Beiträge: 108
Registriert: 25.03.2005 21:07
Wohnort: Karlsruhe
Kontaktdaten:

Re: Frage zu #PB_Any?

Beitrag von FISCHAUGE »

Wenn ich mit

Code: Alles auswählen

Select #PB_Event_Gadget
Case  WAS MUSS HIER STEHEN?
    FontName$ = "Arial"
                        FontSize  = 14     
FontRequester(FontName$, FontSize, #PB_FontRequester_Effects)
Endselect
Ausführen will, welche ID muss ich hinter Case schreiben?

Da ich ja nicht weiss, wie viele fenster mit dem selben button offen sind geht ja z.B. #Gadget1 nicht.
Na alles Senkrecht?
Benutzeravatar
HeX0R
Beiträge: 3040
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Frage zu #PB_Any?

Beitrag von HeX0R »

Du brauchst nur beim Erstellen deine IDs in einer Liste speichern, und die dann beim Event durchforsten.
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Frage zu #PB_Any?

Beitrag von c4s »

Du musst dir halt beim erstellen der Gadgets die ID merken:

Code: Alles auswählen

GadgetNr = ButtonGadget(#PB_Any)
;...
Select #PB_Event_Gadget
  Case GadgetNr
Bei einer unbekannten Anzahl kannst du die GadgetNr beim erstellen der Buttons in einer LinkedList abspeichern und dann entsprechend durcharbeiten.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8808
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Frage zu #PB_Any?

Beitrag von NicTheQuick »

Vielleicht können wir dir mit einem vollständigen lauffähigen Beispiel deinerseits weiterhelfen.
Benutzeravatar
FISCHAUGE
Beiträge: 108
Registriert: 25.03.2005 21:07
Wohnort: Karlsruhe
Kontaktdaten:

Re: Frage zu #PB_Any?

Beitrag von FISCHAUGE »

c4s hat geschrieben:Du musst dir halt beim erstellen der Gadgets die ID merken:

Code: Alles auswählen

GadgetNr = ButtonGadget(#PB_Any)
;...
Select #PB_Event_Gadget
  Case GadgetNr
Bei einer unbekannten Anzahl kannst du die GadgetNr beim erstellen der Buttons in einer LinkedList abspeichern und dann entsprechend durcharbeiten.
danke dir ;)
Na alles Senkrecht?
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Frage zu #PB_Any?

Beitrag von PMV »

:lol:
FISCHAUGE hat geschrieben:

Code: Alles auswählen

fonttool = ButtonImageGadget(#PB_Any,10,45,32,32,ImageID(3))

Code: Alles auswählen

  Select #PB_Event_Gadget
             

          Case  fonttool
                        FontName$ = "Arial" 
                        FontSize  = 14      
 FontRequester(FontName$, FontSize, #PB_FontRequester_Effects)
            EndSelect
Da hast es doch schon (fast) richtig gemacht ... fonttool hast doch schon so genutzt, wie es wolltest.
c4s hat geschrieben:Du musst dir halt beim erstellen der Gadgets die ID merken:

Code: Alles auswählen

GadgetNr = ButtonGadget(#PB_Any)
;...
Select #PB_Event_Gadget
  Case GadgetNr
Bei einer unbekannten Anzahl kannst du die GadgetNr beim erstellen der Buttons in einer LinkedList abspeichern und dann entsprechend durcharbeiten.
Nur würde ich nicht die Konstante #PB_Event_Gadget, sondern EventGadget() verwenden. :wink:

Code: Alles auswählen

GadgetNr = ButtonGadget(#PB_Any, ...)
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow
      Break
    Case #PB_Event_Gadget
       Select EventGadget()
          Case GadgetNr
            ; tue was auch immer nötig ist, wenn der Button gedrückt wurde
       EndSelect
  EndSelect
Forever
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Frage zu #PB_Any?

Beitrag von c4s »

@PMV
Stimmt! Ich hatte mir das von ihm kopiert, um das Tippen zu sparen, und dabei nicht so genau auf den Code geguckt. :lol:
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Renovatio

Re: Frage zu #PB_Any?

Beitrag von Renovatio »

Gleiche Problem habe ich auch. ^^
Ich erstelle durch einen eigenserstellten file_manager() eine Liste welche für jeden Eintrag ein neues ImageGadget erstellt.

Wie genau weiß ich jetzt welcher Eintrag in meinem file_manager() sprich also welches ImageGadget gedrückt wurde?

Ich habe null Ahnung von LinkedList und habe gerade erst Prototypes verstanden (Was zu meiner Überraschung rasch ging^^)

Hat da jemand ein kleines Beispiel wie man sowas realisiert?



Danke an die Helfenden!
Antworten