Seite 1 von 1

Mehrere Fenster

Verfasst: 07.04.2005 20:39
von Salami
Ich hab ein großes Problem!
Also ich hab ein Programm gemacht und da gibt es im Menu Optionen und und wenn man draufklickt soll sich ein 2. Fenster mit den Optionen öffnen. Wenn man das wieder schliesst, soll man im "normalen" Fenster weitermachen können.
Das mit dem öffnen funktioniert ja auch, aber sobald das Optionen-Fenster geöffnet wird, verschwinden die Gadgets im ersten Fenster und das bleibt so auch wenn ich die Optionen wieder schliesse.
Im Optionsfenster ist eigetnlich auch das:

Code: Alles auswählen

If OptionsWEvent=#PB_Event_CloseWindow
UseWindow(0):ActivateWindow()
CloseWindow(1)
EndIf
:freak:

Verfasst: 07.04.2005 21:21
von zigapeda
Probier das mal:

Code: Alles auswählen

OpenWindow(0,0,0,200,200,#pb_window_systemmenu,"test")
CreateGadgetList(WindowID(0))
ButtonGadget(0,50,50,100,100,"neues fenster")

OpenWindow(1,200,200,200,200,#pb_window_systemmenu,"test")
CreateGadgetList(WindowID(1))
ButtonGadget(1,50,50,100,100,"schließen")

HideWindow(1,1)

Repeat

If WaitWindowEvent() = #pb_event_gadget
  Select eventGadgetID()
    Case 0
      HideWindow(1,0)
    Case 1
      HideWindow(1,1)
  EndSelect
endif

Until WaitWindowEvent() = #pb_event_closewindow

Verfasst: 07.04.2005 21:30
von Salami
Also... ich geb dir einfach mal den ganzen Code.
Deine Methode ist zwar gut, geht aber nicht so richtig...
Ich glaub es hat was mit den gadgets zu tun.....

Code: Alles auswählen

Procedure OpenOptionWindow(ScreenWidth, ScreenHeight)
  OpenWindow(1, ScreenWidth-350, ScreenHeight-300, 310, 100, #PB_Window_SystemMenu, "Optionen")
  
  If OpenPreferences("prefs.ini")
    screenshotdir$=ReadPreferenceString("screenshotdir", "C:\")
    screenshotres=ReadPreferenceLong("screenshotres", 1)
    screenshotquality=ReadPreferenceLong("screenshotquality", 7)
    ClosePreferences()
  EndIf
  
  CreateGadgetList(WindowID(1))
  TextGadget(0, 5, 5, 300, 15, "Verzeichnis in dem die Screenshots gespeichert werden sollen:")
  StringGadget(1, 5, 22, 200, 20, screenshotdir$)
  ButtonGadget(2, 210, 22, 90, 20, "Durchsuchen...")
  TextGadget(3, 5, 47, 90, 15, "Bildqualität(1-10):")
  StringGadget(4, 95, 45, 30, 20, Str(screenshotquality))
  TextGadget(5, 135, 47, 90, 15, "Bildgrösse:")
  ComboBoxGadget(6, 200, 45, 100, 100)
    AddGadgetItem(6,-1,"320x240")
    AddGadgetItem(6,-1,"640x480")
    AddGadgetItem(6,-1,"800x600")
    AddGadgetItem(6,-1,"1024x768")
  ButtonGadget(7, 5, 72, 90, 20, "Übernehmen")
  ButtonGadget(8, 100, 72, 90, 20, "Schliessen")
  
  SetGadgetState(6, screenshotres)
  
  Repeat
    
    OptionsWEvent=WaitWindowEvent()
    
    If OptionsWEvent=#PB_Event_Gadget
      If EventGadgetID()=7
        DisableGadget(7, 1)
      EndIf
      If EventGadgetID()=2
        file$=PathRequester("Pfad angeben", "C:\")
        If file$
          SetGadgetText(1, file$)
        EndIf
      EndIf
      If EventGadgetID()=8
        CloseWindow(1)
      EndIf
    EndIf
    
    If OptionsWEvent=#PB_Event_CloseWindow
      UseWindow(0):ActivateWindow()
      CloseWindow(1)
    EndIf
    
  ForEver
EndProcedure

Procedure MakeDesktopSCREENSHOT(ImageNr,x,y,Width,Height) 
  hImage = CreateImage(ImageNr,Width,Height) 
  hdc    = StartDrawing(ImageOutput()) 
  DeskDC = GetDC_(GetDesktopWindow_()) 
  BitBlt_(hdc,0,0,Width,Height,DeskDC,x,y,#SRCCOPY) 
  StopDrawing() 
  ReleaseDC_(GetDesktopWindow_(),DeskDC) 
  ProcedureReturn hImage 
EndProcedure 

If OpenPreferences("prefs.ini")=0
  If CreatePreferences("prefs.ini")
    WritePreferenceString("screenshotdir", "C:\")
    WritePreferenceLong("screenshotres", 1)
    WritePreferenceLong("screenshotquality", 7)
    MessageRequester("Bitte lesen! Erster Programmstart!", "Du startest dieses Programm das erste Mal."+Chr(10)+Chr(13)+"Bitte Stelle zuerst alles in den Optionen auf deine Wünsche ein. (nicht viel Arbeit)"+Chr(10)+Chr(13)+"Das Programm erstellt ein Tray-Icon (rechts unten in der Taskleiste)."+Chr(10)+Chr(13)+"Wenn du das Fenster geschlossen hast läuft das Programm immer noch im Hintergrund weiter."+Chr(10)+Chr(13)+"Klicke auf das Tray-Icon um das Fenster wieder aufzudecken."+Chr(10)+Chr(13)+"Falls du das Programm beenden willst, öffne das Fenster und Klicke im Menü auf Optionen und dann auf beenden."+Chr(10)+Chr(13)+"Viel Spass!")
    ClosePreferences()
  Else
    MessageRequester("Fehler", "Konnte keine Config-Datei erstellen!")
    End
  EndIf
Else
  ClosePreferences()
EndIf

ExamineDesktops()

ScreenWidth=DesktopWidth(0)
ScreenHeight=DesktopHeight(0)
i=1

OpenWindow(0, ScreenWidth-320, ScreenHeight-250, 300, 150, #PB_Window_SystemMenu, "ScreenshotGrabber by Salami")

LoadImage(0, "icon4.ico")
UseImage(0)
AddSysTrayIcon(0, WindowID(), ImageID())

CreateMenu(0, WindowID(0))
MenuTitle("Optionen")
MenuItem(0, "Optionen")
MenuBar()
MenuItem(1, "Beenden")
MenuTitle("Hilfe")
MenuItem(2, "Hilfe/About")

CreateGadgetList(WindowID(0))
TextGadget(0, 5, 5, 290, 15, "Gemachte Screenshots:")
ListViewGadget(1, 5, 23, 290, 100)

;-Hauptschleife

Repeat
  
  WEvent=WaitWindowEvent()
  
  If WEvent=#PB_Event_CloseWindow
    HideWindow(0, 1)
  EndIf
  
  If WEvent=#PB_Event_SysTray
    HideWindow(0, 0)
  EndIf
  
  If WEvent=#PB_Event_Menu
    If EventMenuID()=0
      OpenOptionWindow(ScreenWidth, ScreenHeight)
    EndIf
    If EventMenuID()=1
      End
    EndIf
    If EventMenuID()=2
      MessageRequester("About ScreenshotGrabber", "Gemacht von Salami, www.codingtuts.dl.am"+Chr(10)+Chr(13)+Chr(10)+Chr(13)+"Einfach das Programm im Hintergrund laufen lassen und so viele Screenshots machen wie gewünscht."+Chr(10)+Chr(13)+"Die Dateien befinden sich dann in dem bei den Optionen angegebenen Ordner."+Chr(10)+Chr(13)+Chr(10)+Chr(13)+"Anleitung(wird auch beim ersten Programmstart gezeigt):"+Chr(10)+Chr(13)+"Bitte Stelle zuerst alles in den Optionen auf deine Wünsche ein. (nicht viel Arbeit)"+Chr(10)+Chr(13)+"Das Programm erstellt ein Tray-Icon (rechts unten in der Taskleiste)."+Chr(10)+Chr(13)+"Wenn du das Fenster geschlossen hast läuft das Programm immer noch im Hintergrund weiter."+Chr(10)+Chr(13)+"Klicke auf das Tray-Icon um das Fenster wieder aufzudecken."+Chr(10)+Chr(13)+"Falls du das Programm beenden willst, öffne das Fenster und Klicke im Menü auf Optionen und dann auf beenden.")
    EndIf
  EndIf
  
  If GetAsyncKeyState_(#VK_SNAPSHOT)
    UseJPEGImageEncoder()
    MakeDesktopSCREENSHOT(1, 0, 0, ScreenWidth, ScreenHeight)
    ResizeImage(1, 640, 480)
    SaveImage(1, "C:\screenshot_"+Str(i)+".jpg", #PB_ImagePlugin_JPEG, 5)
    AddGadgetItem(1, -1, "Screenshot "+Str(i))
    i+1
  EndIf
  
ForEver
<)

Verfasst: 07.04.2005 21:48
von zigapeda
Ich glaube ich finde keinen fehler in deinem code. sry

Verfasst: 08.04.2005 11:46
von NicTheQuick
Ist doch ganz klar.
Du darfst eine GadgetID nicht zweimal vergeben. Auch nicht in zwei verschiedenen Fenstern.
Da du im Hauptfenster (WindowID = 0) Gadgets mit den IDs 0 und 1 erstellst, darfst du im Optionenfenster (WindowID = 1) nicht wieder Gadgets mit den IDs 0 und 1 erstellen.
Das ist auch logisch so, denn wir sonst solltest du mit den weiteren Gadgetbefehlen wie z.B. [c]GetGadgetState()[/c] das richtige Gadget benutzen können?

Verfasst: 08.04.2005 13:28
von Salami
Oh, hab gedacht das gilt immer nur fürs aktive Fenster... Danke!!!!!!! :D

Verfasst: 13.10.2005 01:27
von AND51
Tipp:
Versuchs mal mit der automatischen, ultimativen, coolen, Nummeration in PB.

Code: Alles auswählen

Enumeration
#hauptfenster
#hauptfenster_knopf
#optionsfenster
#optionsfenster_speichern
EndNumeration

OpenWindow(#hauptfenster, 0, 0, 100, 100, #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
CreateGadgetList(#hauptfenster)
  ButtonGadGet(#hauptfenster_knopf, ...parameter...)
OpenWindow(#optionsfenster, 0, 0, 50, 50, |#PB_Window_WindowCentered, #hauptfenster)
CreateGadgetList(#optionsfenster)
  ButtonGadget(optionsfenster_speichern, ...bblabla, andere parameter...)
Steht auch in der Hilfe. zwischen Enumeration und EndNumeration wird jeder Konstanten, die du als ID f. d. gadgets nehmen kannst, eine laufende Nummer zugewiesen. #hauptfenster wäre hier 1, #hauptfenster_knopf wäre hier 2, usw... In der Hilfe steht sogar, wie du statt 1, 2, 3... sozusagen eine 2er Reihe vergeben kannst uvm...

MfG, AND51