Mein verzweifelter Versuch Gadgets dynamisch zu laden
In der DLL das Gadget mit der ID #PB_Any erzeugen und auf die zurückgegebene ID in der Event Schleife reagieren.
EDIT: Siehe Hilfe -> UseGadgetList(WindowID)
FF
EDIT: Siehe Hilfe -> UseGadgetList(WindowID)
FF

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- mardanny71
- Beiträge: 266
- Registriert: 05.03.2005 01:15
- Wohnort: Thüringen
@Konne
Schöne Idee
Aber es wäre mit Sicherheit einfacher, sich stattdessen auf Regeln zum Einfügen von Quellcode zu einigen bzw diese Vorzugeben.
Zum Beispiel, jeder Autor liefert seinen Code als *.pbi und declariert die Prozeduren in der Hauptdatei, mit entsprechender Kommentierung.
Solange nur in PB Entwickelt wird, wäre das mit Sicherheit einfacher
grüsse an alle
mardanny71
Schöne Idee
Aber es wäre mit Sicherheit einfacher, sich stattdessen auf Regeln zum Einfügen von Quellcode zu einigen bzw diese Vorzugeben.
Zum Beispiel, jeder Autor liefert seinen Code als *.pbi und declariert die Prozeduren in der Hauptdatei, mit entsprechender Kommentierung.
Solange nur in PB Entwickelt wird, wäre das mit Sicherheit einfacher
grüsse an alle
mardanny71
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Habe mal ausprobiert ein Fenster aus einer DLL zu erzeugen.
Fenster wird zwar erstellt aber das Eventhandling funktioniert nicht ???
FF
Fenster wird zwar erstellt aber das Eventhandling funktioniert nicht ???
FF

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
- mardanny71
- Beiträge: 266
- Registriert: 05.03.2005 01:15
- Wohnort: Thüringen
@mk-soft
Ich denke, die Anwendung ist der Boss, soll heissen das alle Ereignisse an die *.exe und nicht an die *.dll gesand werden.
Vieleicht kannst Du mit der Beschreibung zu WindowEvent() in der Hilfe was daraus machen.
grüsse an alle
mardanny71
Ich denke, die Anwendung ist der Boss, soll heissen das alle Ereignisse an die *.exe und nicht an die *.dll gesand werden.
Vieleicht kannst Du mit der Beschreibung zu WindowEvent() in der Hilfe was daraus machen.
grüsse an alle
mardanny71
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Ich glaube es liegt da ran das die Fensterevents an das Mainprog nicht durchkommen da die dll eine eigene Instance ist
Main:
DLL:
FF 
Main:
Code: Alles auswählen
Enumeration
#Menu_Sub1
#Menu_Sub2
#Menu_Sub3
#Menu_Exit
EndEnumeration
If OpenLibrary(0, "Sub1Dll.dll") = 0
End
EndIf
;- Main
If OpenWindow(0, 0, 0, 640, 480, "Main")
CreateMenu(0, WindowID(0))
MenuTitle("&Datei")
MenuItem(#Menu_Sub1, "Sub 1")
MenuItem(#Menu_Sub2, "Sub 2")
MenuItem(#Menu_Sub3, "Sub 3")
MenuBar()
MenuItem(#Menu_Exit, "Be&enden")
Exit = 0
;- Hauptschleife
Repeat
event = WaitWindowEvent()
window = EventWindow()
menu = EventMenu()
type = EventType()
Select event
Case #PB_Event_Menu ; ein Menü wurde ausgewählt
Select menu
Case #Menu_sub1
Debug CallFunction(0, "OpenSubWindow", WindowID(0))
Case #Menu_sub2
Case #Menu_sub3
Case #Menu_Exit
Exit = 1
EndSelect
Case #PB_Event_Gadget ; ein Gadget wurde gedrückt
Case #PB_Event_CloseWindow ; das Schließgadget vom Fenster wurde gedrückt
Exit = 1
Case #PB_Event_Repaint ; der Fensterinhalt wurde zerstört und muss neu gezeichnet werden (nützlich für 2D Grafik-Operationen)
Case #PB_Event_SizeWindow ; das Fenster wurde in der Größe verändert
Case #PB_Event_MoveWindow ; das Fenster wurde verschoben
Case #PB_Event_ActivateWindow ; das Fenster wurde aktiviert (hat den Fokus erhalten)
Case #PB_Event_SysTray ; das SysTray wurde aktiviert
EndSelect
r1 = CallFunction(0, "WindowSubEvent", event, window, menu, type)
Until Exit
EndIf
Code: Alles auswählen
Global WinID
ProcedureDLL OpenSubWindow(Parend)
If WinID = 0
WinID = OpenWindow(#PB_Any, 40,40, 400,280, "Sub 1", #PB_Window_SystemMenu)
SetParent_(WinID, Parend)
CreateStatusBar(0, WindowID(WinID))
AddStatusBarField(100)
AddStatusBarField(100)
AddStatusBarField(100)
AddStatusBarField(100)
EndIf
;SetWindowLong_(WinID, #DWL_DLGPROC, GetWindowLong_(Parend, #DWL_DLGPROC))
ProcedureReturn WinID
EndProcedure
ProcedureDLL WindowSubEvent(Event, Window, Menu, Type)
If WinID = 0
ProcedureReturn -1
EndIf
StatusBarText(0, 0, Str(Event))
StatusBarText(0, 1, Str(Window))
StatusBarText(0, 2, Str(Menu))
StatusBarText(0, 3, Str(Type))
Select event
Case #PB_Event_Menu ; ein Menü wurde ausgewählt
Case #PB_Event_Gadget ; ein Gadget wurde gedrückt
Case #PB_Event_CloseWindow ; das Schließgadget vom Fenster wurde gedrückt
CloseWindow(WinID)
WinID = 0
Case #PB_Event_Repaint ; der Fensterinhalt wurde zerstört und muss neu gezeichnet werden (nützlich für 2D Grafik-Operationen)
Case #PB_Event_SizeWindow ; das Fenster wurde in der Größe verändert
Case #PB_Event_MoveWindow ; das Fenster wurde verschoben
Case #PB_Event_ActivateWindow ; das Fenster wurde aktiviert (hat den Fokus erhalten)
EndSelect
ProcedureReturn 0
EndProcedure

Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
versuch mal das PlugIn-Beispiel von Danilo:Konne hat geschrieben:es ist nur PB's Eventhandling, dass durch seine IDs das ganze kaputt macht.
http://www.purebasic.fr/german/viewtopic.php?t=3423
Grüße ... Kiffi
a²+b²=mc²