Mein verzweifelter Versuch Gadgets dynamisch zu laden

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@konne,
mich würde mal einfach so interessieren, was du machen willst, bzw wozu du das benötigst.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

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 :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Ich möchte ein Program schreiben und will es den Pure Leute einfach machen mitzuentwickeln so das es ein großes Komunity Projekt werden kann, ohne dass jeder sourcecodes irgendwo reinfrickeln muss.
Ich habe mir dedacht dass sowas doch einfach möglich sein sollte.
Benutzeravatar
mardanny71
Beiträge: 266
Registriert: 05.03.2005 01:15
Wohnort: Thüringen

Beitrag von mardanny71 »

@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
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Habe mal ausprobiert ein Fenster aus einer DLL zu erzeugen.
Fenster wird zwar erstellt aber das Eventhandling funktioniert nicht ???

FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Nunja ich glaube ich habe die Lösung gefunden. Ist zwar hochklassig Api aber nur für mich und nicht für die Leute die dann süäter Toolbars oder so für das Programm entwickeln wollen.
Vielleicht stelle ich mal bald ne ganz frühe Beta ins Forum.
Schau mal wie sich dass noch streckt Zeitmäßig.
Benutzeravatar
mardanny71
Beiträge: 266
Registriert: 05.03.2005 01:15
Wohnort: Thüringen

Beitrag von mardanny71 »

@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
Gruß, mardanny71
Windows 7 - openSUSE 12.1 - KDE 4.7 - PB4.6 beta 4
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Ich glaube es liegt da ran das die Fensterevents an das Mainprog nicht durchkommen da die dll eine eigene Instance ist

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
DLL:

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
FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag von Konne »

Genaugenommen ist Eventhandling mit dlls kein problem, es ist nur PB's Eventhandling, dass durch seine IDs das ganze kaputt macht. Was ich gerade mache ist einen neuen Eventhandler zu schreiben.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

Konne hat geschrieben:es ist nur PB's Eventhandling, dass durch seine IDs das ganze kaputt macht.
versuch mal das PlugIn-Beispiel von Danilo:

http://www.purebasic.fr/german/viewtopic.php?t=3423

Grüße ... Kiffi
a²+b²=mc²
Antworten