Fensterproblem

Anfängerfragen zum Programmieren mit PureBasic.
Baba_Smurf
Beiträge: 55
Registriert: 01.03.2015 12:05
Wohnort: Saarland / Püttlingen
Kontaktdaten:

Fensterproblem

Beitrag von Baba_Smurf »

Guten Morgen,

ich habe folgendes Problem :

Mein Programm soll per Button-Klick ein weiteres Fenster öffnen, das erste Fenster wird beim Programmstart geladen und angezeigt.
Beim Klick auf den Button wird das zweite Fenster geöffnet und angezeigt ( das zweite Fenster habe ich in einer Procedure laufen ).
Jetzt habe ich auf dem zweiten Fenster einen Button "Fenster schließen", was auch funktioniert.
Nach dem schließen des zweiten Fensters, wird das erste Fenster wieder aktiviert, was auch funktioniert, aber.........
Wenn ich jetzt wieder auf den Button klicke, das das zweite Fenster geöffnet wird, passiert nichts mehr...

Code: Alles auswählen

Procedure fenster_ende()
 CloseWindow(#Material)
  SetActiveWindow(#Haupt)
  EndProcedure
kann mir bitte jemand erklären, was ich falsch mache??
Ich habe das ganze auch schon mit HideWindow gemacht, Problem ist das selbe.

mfg
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fensterproblem

Beitrag von RSBasic »

Kannst du einen vollständigen, lauffähigen Beispielcode posten, der dein Problem zeigt? Die von dir geposteten Zeilen reichen nicht aus, um die Ursache festzustellen.
Ich habe mal für dich einen Beispielcode geschrieben:

Code: Alles auswählen

EnableExplicit

Enumeration
  #Haupt
  #Material
EndEnumeration

Procedure MyWindow()
  If OpenWindow(#Material, 0, 0, 400, 300, "", #PB_Window_WindowCentered)
    ButtonGadget(2, 10, 10, 100, 20, "Fenster schließen", 0)
    
  EndIf
  
EndProcedure

If OpenWindow(#Haupt, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  ButtonGadget(1, 10, 10, 100, 20, "Fenster öffnen", 0)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Gadget
        Select EventGadget()
          Case 1
            MyWindow()
          Case 2
            CloseWindow(#Material)
            SetActiveWindow(#Haupt)
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Baba_Smurf
Beiträge: 55
Registriert: 01.03.2015 12:05
Wohnort: Saarland / Püttlingen
Kontaktdaten:

Re: Fensterproblem

Beitrag von Baba_Smurf »

Hallo, anbei der Code, ist nicht richtig auskommentiert, und die Bilder fehlen, kann ich aber schicken, wenn nötig

Code: Alles auswählen

;
; This code is automatically generated by the FormDesigner.
; Manual modification is possible to adjust existing commands, but anything else will be dropped when the code is compiled.
; Event procedures needs to be put in another source file.
;
EnableExplicit

Declare eckleiste()
Declare neuanlegen()
Declare Terrarium()
Declare ende()
Declare fenster_ende()

Enumeration fenster
   #Haupt
   #Material
 EndEnumeration
 
  

Enumeration FormFont
  #Font_Window_0_0
  #Font_Window_0_1
  #Font_Window_0_2
  #Font_Window_0_3
EndEnumeration

Global Quit.i                         ;Variable zum Fenster schließen
Global Image_0, Image_1               ;Bilderfelder (Canvas) 
Global Text_0                         ;Textfeld Überschrift
Global Button_0                       ;weiter Button
Global Button_3                       ;Fenster schließen Button
Global Option_0, Option_1             ;Auswahlfelder 
Global Img_Window_0_0                 ;Bild mit Terrarium
Global Img_Window_0_1                 ;Bild mit Terrarium
Global Img_Window_0_2                 ;Bild mit Eckleiste
Global Result.i                       ;Variable für Messagebox
Global Resulteck.i
Global aktiv.i                        ;Variable für aktives fenster

Global Image_0, Text_1, Text_2, Text_3, String_0, Text_4, Text_5, Text_6, Text_7, Text_8, String_1, String_2, String_3, String_4, Text_9, Text_10, Text_11, Text_12, Checkbox_0, Text_13, Text_14, Text_15, Text_16, String_5, String_6, String_7, Text_18, Text_19, Text_20, Button_0, Button_1, Button_2

UseJPEGImageDecoder()

Img_Window_0_0 = LoadImage(#PB_Any,"C:\Terrarium\terra1klein.jpg")
Img_Window_0_1 = LoadImage(#PB_Any,"C:\Terrarium\terra2klein.jpg")
Img_Window_0_2 = LoadImage(#PB_Any,"C:\Terrarium\eckprofil.jpg")
Global Font_Window_0_0



LoadFont(#Font_Window_0_0,"Arial", 16)
LoadFont(#Font_Window_0_1,"Arial", 12)
LoadFont(#Font_Window_0_2,"Arial", 11)
LoadFont(#Font_Window_0_3,"Arial", 10)
LoadFont(#Font_Window_0_0,"Arial", 18)

;IncludeFile "terrarium.pb"

If OpenWindow(#Haupt,0,0,800,600, "Terrarium-Material-Rechner V1.0", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  Image_0 = ImageGadget(#PB_Any, 40, 60, 350, 350, ImageID(Img_Window_0_0))
  Image_1 = ImageGadget(#PB_Any, 410, 60, 350, 350, ImageID(Img_Window_0_1))
  Text_0 = TextGadget(#PB_Any, 10, 10, 780, 40, "Terrarium-Material-Rechner ", #PB_Text_Center)
  SetGadgetFont(Text_0, FontID(#Font_Window_0_0))
  Button_0 = ButtonGadget(#PB_Any, 660, 480, 100, 25, "&weiter")
  Option_0 = OptionGadget(#PB_Any, 40, 430, 140, 25, "normales Terrarium")
  Option_1 = OptionGadget(#PB_Any, 410, 430, 180, 25, "Hochterrarium")
  SetGadgetState(Option_0,1)
EndIf

Repeat
Select WaitWindowEvent()
         Case #PB_Event_CloseWindow  ; Benutzer hat Schließen-Button gedrückt
         ende()

    Case #PB_Event_Menu
      Select EventMenu()
    EndSelect
    Case #PB_Event_Gadget
      Select EventGadget()
        Case Button_1
          neuanlegen()
        Case Checkbox_0
          eckleiste()
        Case Button_0
           Terrarium()          ;weiter Button auf fenster #Haupt
         Case Button_3          ;fenster schließen Button auf Fenster #Material
           CloseWindow(#Material)
            SetActiveWindow(#Haupt)
           
             EndSelect
          EndSelect
          
 ForEver
        


;wenn die Checkbox aktiviert wurde, die Eingabefelder anzeigen, andernfalls verstecken
Procedure eckleiste()
  Resulteck = GetGadgetState(Checkbox_0)
  If Resulteck = #PB_Checkbox_Checked
    HideGadget(Text_13,#False)
    HideGadget(Text_14,#False)
    HideGadget(Text_15,#False)
    HideGadget(Text_16,#False)
    HideGadget(Text_18,#False)
    HideGadget(Text_19,#False)
    HideGadget(Text_20,#False)
    HideGadget(String_5,#False)
    HideGadget(String_6,#False)
    HideGadget(String_7,#False)
    HideGadget(Image_0,#False) 
  Else
    HideGadget(Text_13,#True)
    HideGadget(Text_14,#True)
    HideGadget(Text_15,#True)
    HideGadget(Text_16,#True)
    HideGadget(Text_18,#True)
    HideGadget(Text_19,#True)
    HideGadget(Text_20,#True)
    HideGadget(String_5,#True)
    HideGadget(String_6,#True)
    HideGadget(String_7,#True)
   HideGadget(Image_0,#True) 
  EndIf
  
EndProcedure

; wenn neu- Button gedrückt wurde, Eingabefelder leeren andernfalls zurück zur Procedure
Procedure neuanlegen()
  Result = MessageRequester("Information", "Alle Eingaben werden gelöscht", #PB_MessageRequester_YesNo)
  If Result = #PB_MessageRequester_Yes
    SetGadgetText(String_0,"")
    SetGadgetText(String_1,"") 
    SetGadgetText(String_2,"")
    SetGadgetText(String_3,"")
    SetGadgetText(String_4,"")
    SetGadgetText(String_5,"")
    SetGadgetText(String_6,"")
    SetGadgetText(String_7,"")
  Else
    ProcedureReturn
  EndIf
EndProcedure

; Procudure beendet das Programm, wenn der Fenster-schließen Button gedrückt wurde
Procedure ende()
  Result = MessageRequester("Information", "Wollen Sie das Programm wirklich beenden?", #PB_MessageRequester_YesNo)
  If Result = #PB_MessageRequester_Yes
    End
  Else 
    ProcedureReturn
  EndIf
EndProcedure
Procedure Terrarium()
 OpenWindow(#Material, 0, 0, 500, 600, "Materialbedarfs-Rechner", #PB_Window_WindowCentered)
    Image_0 = ImageGadget(#PB_Any, 20, 310, 100, 79, ImageID(Img_Window_0_2))
     HideGadget(Image_0,#True)
  Text_1 = TextGadget(#PB_Any, 10, 10, 480, 30, "Materialbedarfs-Rechner", #PB_Text_Center)
  SetGadgetFont(Text_1, FontID(#Font_Window_0_0))
  Text_2 = TextGadget(#PB_Any, 30, 40, 440, 25, "Alle Maße in Millimeter angeben !!!", #PB_Text_Center)
  SetGadgetFont(Text_2, FontID(#Font_Window_0_1))
  Text_3 = TextGadget(#PB_Any, 110, 90, 100, 25, "Materialstärke :")
  SetGadgetFont(Text_3, FontID(#Font_Window_0_2))
  String_0 = StringGadget(#PB_Any, 220, 90, 130, 20, "", #PB_String_Numeric)
  GadgetToolTip(String_0, "hier die Materialstärke in Millimeter eingeben")
  Text_4 = TextGadget(#PB_Any, 360, 90, 40, 20, "mm")
  SetGadgetFont(Text_4, FontID(#Font_Window_0_2))
  Text_5 = TextGadget(#PB_Any, 110, 120, 100, 20, "Länge :")
  SetGadgetFont(Text_5, FontID(#Font_Window_0_2))
  Text_6 = TextGadget(#PB_Any, 110, 150, 100, 20, "Breite :")
  SetGadgetFont(Text_6, FontID(#Font_Window_0_2))
  Text_7 = TextGadget(#PB_Any, 110, 180, 100, 20, "Höhe :")
  SetGadgetFont(Text_7, FontID(#Font_Window_0_2))
  Text_8 = TextGadget(#PB_Any, 110, 210, 100, 20, "Überlappung :")
  SetGadgetFont(Text_8, FontID(#Font_Window_0_2))
  String_1 = StringGadget(#PB_Any, 220, 120, 130, 20, "", #PB_String_Numeric)
  GadgetToolTip(String_1, "hier die komplette Länge des Terrariums in Millimeter eingeben")
  String_2 = StringGadget(#PB_Any, 220, 150, 130, 20, "", #PB_String_Numeric)
  GadgetToolTip(String_2, "hier die komplette Breite des Terrariums in Millimeter eingeben")
  String_3 = StringGadget(#PB_Any, 220, 180, 130, 20, "", #PB_String_Numeric)
  GadgetToolTip(String_3, "hier die komplette Höhe des Terrariums in Millimeter eingeben")
  String_4 = StringGadget(#PB_Any, 220, 210, 130, 20, "", #PB_String_Numeric)
  GadgetToolTip(String_4, "hier die Überlappung der Scheiben in Millimeter eingeben")
  Text_9 = TextGadget(#PB_Any, 360, 120, 30, 20, "mm")
  SetGadgetFont(Text_9, FontID(#Font_Window_0_2))
  Text_10 = TextGadget(#PB_Any, 360, 150, 40, 20, "mm")
  SetGadgetFont(Text_10, FontID(#Font_Window_0_2))
  Text_11 = TextGadget(#PB_Any, 360, 180, 40, 20, "mm")
  SetGadgetFont(Text_11, FontID(#Font_Window_0_2))
  Text_12 = TextGadget(#PB_Any, 360, 210, 40, 20, "mm")
  SetGadgetFont(Text_12, FontID(#Font_Window_0_2))
  Checkbox_0 = CheckBoxGadget(#PB_Any, 110, 240, 340, 25, " - Terrarium komplett mit Eckleisten versehen")
  SetGadgetFont(Checkbox_0, FontID(#Font_Window_0_3))
  Text_13 = TextGadget(#PB_Any, 10, 270, 480, 30, "Eckprofile", #PB_Text_Center)
   SetGadgetFont(Text_13, FontID(#Font_Window_0_0))
    HideGadget(Text_13,#True)
  Text_14 = TextGadget(#PB_Any, 140, 310, 120, 20, "1. Materialstärke :")
   SetGadgetFont(Text_14, FontID(#Font_Window_0_2))
    HideGadget(Text_14,#True)
  Text_15 = TextGadget(#PB_Any, 140, 340, 120, 25, "2. Schenkellänge :")
   SetGadgetFont(Text_15, FontID(#Font_Window_0_2))
    HideGadget(Text_15,#True)
  Text_16 = TextGadget(#PB_Any, 140, 370, 120, 20, "3. Schenkellänge :")
   SetGadgetFont(Text_16, FontID(#Font_Window_0_2))
    HideGadget(Text_16,#True)
  String_5 = StringGadget(#PB_Any, 260, 310, 90, 20, "", #PB_String_Numeric)
   GadgetToolTip(String_5, "hier die Materialstärke des Profils in Millimeter eingeben")
    HideGadget(String_5,#True)
  String_6 = StringGadget(#PB_Any, 260, 340, 90, 20, "", #PB_String_Numeric)
   GadgetToolTip(String_6, "hier die Schenkellänge des Profils eingeben")
    HideGadget(String_6,#True)
  String_7 = StringGadget(#PB_Any, 260, 370, 90, 20, "", #PB_String_Numeric)
   GadgetToolTip(String_7, "hier die Schenkellänge des Profils eingeben")
    HideGadget(String_7,#True)
  Text_18 = TextGadget(#PB_Any, 360, 310, 50, 25, "mm")
   SetGadgetFont(Text_18, FontID(#Font_Window_0_2))
    HideGadget(Text_18,#True)
  Text_19 = TextGadget(#PB_Any, 360, 340, 40, 25, "mm")
   SetGadgetFont(Text_19, FontID(#Font_Window_0_2))
    HideGadget(Text_19,#True)
  Text_20 = TextGadget(#PB_Any, 360, 370, 40, 25, "mm")
   SetGadgetFont(Text_20, FontID(#Font_Window_0_2))
    HideGadget(Text_20,#True)
  Button_0 = ButtonGadget(#PB_Any, 340, 520, 100, 25, "&berechnen")
  Button_1 = ButtonGadget(#PB_Any, 50, 520, 100, 25, "&neu")
  GadgetToolTip(Button_1, "Eingabefelder werden für eine Neueingabe geleert")
  Button_2 = ButtonGadget(#PB_Any, 200, 520, 100, 25, "&drucken")
  Button_3 = ButtonGadget(#PB_Any, 50, 550, 390, 25, "&Fenster schließen")
  ProcedureReturn
 EndProcedure
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fensterproblem

Beitrag von RSBasic »

Das Problem ist, dass du ID-Variablen überschreibst. Z.B.: Button_0
Du darfst diese Variable nicht in zwei unterschiedlichen Fenstern verwenden, da beide Buttons unterschiedliche IDs haben.
Verwende bitte für jedes Gadget eine einmalige Variable oder Konstante.
Wenn man diese Zeile:

Code: Alles auswählen

Button_0 = ButtonGadget(#PB_Any, 340, 520, 100, 25, "&berechnen")
in:

Code: Alles auswählen

Button_0_2 = ButtonGadget(#PB_Any, 340, 520, 100, 25, "&berechnen")
ändert, dann funktioniert das mehrmaliges Öffnen und Schließen des Fensters.
D.h. du musst darauf achten, dass du für jedes Gadget eine andere Variable erstellst, damit keine gespeicherten IDs überschrieben werden.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Baba_Smurf
Beiträge: 55
Registriert: 01.03.2015 12:05
Wohnort: Saarland / Püttlingen
Kontaktdaten:

Re: Fensterproblem

Beitrag von Baba_Smurf »

Ok, vielen Dank,

meine Problem war ich habe beide Fenster mit dem Formdesigner erstellt und habe die Variabeln von Hand geändert, diesen habe ich wohl übersehen und den Fehler nicht gefunden.

mfg
Antworten