Seite 1 von 3

Verzweiflung: Fenster reagiert nicht, Fehler nicht auffindba

Verfasst: 29.09.2008 20:23
von Palandt
Jetzt komm ich ohne die sonst übliche humoristische Einleitung zur Sache: Ich hab ein Riesenproblem, an dem ich bis gestern abend um 3 Uhr nachts - von 22 Uhr beginnend - gesessen hab und zu keiner Lösung gefunden hab, außer die , für mein Projekt doch eine andere Programmiersprache zu nehmen. Ich habe gestern ein Fenster erstellt, innerhalb dessen ich mihilfe der Abfrage der Mauszeigerkoordinaten (WindowMouseX und WindowMouseY) und dem Befehl SetGadgetState einen Rollovereffekt erstellt habe, sobald sich die Mauszeiger innerhalb eines bestimmten Quadrates bewegt hatten, wurde das Hintergrundbild ausgetauscht und die dort gezeigten 3 Buttons zeigten je nach Status ein anderes Erscheinungsbild. Das funktionierte auch wunderbar, doch sobald ich das Fenster (#windwow_Action) geschlossen hatte und erneut öffnete, ließ es keinerlei Interaktion mit dem User, sprich in diesem Fall mit mir, zu. Es wurde das Standardhintergrundbild geladen (alle Buttons im Normalzustand) und obwohl der Mauszeiger die entsprechenden Flächen umkreiste, geschah nichts. Gut, dachte ich mir, dann lass es halt mit dem Rollover-Scheiß, ist ja eh keine Homepage, sondern eine Anwendung, also erstellte ich heute, in eben diesem Fenster (alten Code komplett gelöscht!) 3 Imagebuttons, die 3 coole Icons zeigen und eine Schrift darunter (ist im ICO gespeichert). Sah auch toll aus. Nur es schlich sich das alte Problem wieder ein: Das verdammte Fenster reagiert nicht, wenn ich auf die Buttons drücke. Ich habe auch einen normalen Testbutton in das Fenster integriert, auch der ist von jeglicher Interaktion unbeeindruckt. Das Fenster lässt sich aber problemlos schließen und es öffnet auch ohne Probleme. Auch das weitere Programm funktioniert auch völlig einwandfrei. Wenn ich das bald nicht hinkrieg, dann kann ich mein Projekt - zumindest in der Sprache Pure Basic - in die Tonne treten, bin echt verzweifelt...

Hier ist mein Code; es geht um das Fenster #Window_Action:

MAIN

Code: Alles auswählen

;   PROGRAMM XXXXXX
;   PB Version 4.2
;   Project Propertiers
;   Main Window 900 x 675
;   Faktor 1 1/3 
;   Aktionsfenster 500 x 375

;Pfadangabe auslesen
If ReadFile(0,"C:\Pfadangabe_QM.txt")                                        
	Global sPfad.s  =   ReadString(0)
	Debug sPfad
	CloseFile(0)
Else
	MessageRequester ("Hinweis","Du musst erst das Programm ErsterStart_Pfadeingabe starten!",0) 
EndIf

;   [A.]   Includes

SetCurrentDirectory(sPfad)

IncludePath "Includes" ;relativ zum SPfad
IncludeFile "DatenbankanbindungSQLite.pb"
IncludeFile "MainGUI.pb" ;hier sind alle Interface-Objekte (Windows, Gadgets, Menus etc. definiert) 

;   [B.]   Konstanten
;      I.   Datenbank - Konstanten
Enumeration 
	#DB_QM
EndEnumeration
;        II.   Gadget - Konstanten
;        III.   Action-Fenster-Status
Enumeration
	#AF_Normal
	#AF_Abfrage
	#AF_Mod
	#AF_HM
EndEnumeration

;   [C.]   Strukturen
Structure DB
	sFile.S
	sUser.S
	sPass.S
EndStructure 


;   [D.]   Variablen
;      I.   Globale Variablen
Global QM_DB.DB 
Global sProjektname.s
Global iAction.i
Global iAFStatus.i

With QM_DB
  \sFile = "Database\QM.sqlite"
  \sUser = ""
  \sPass = ""
EndWith

;   II.   Andere Variablen
Define ix.i
Define iy.i
Define SText.s
Define sZS.s
Define sSQL.s
Define sAbfrage.i
Define iMouseX.i
Define iMousey.i
Define lEventID.l
Define lEventID2.l
Define iiExit.i
Define iiExit2.i

;   [E.]   Prozeduren

;   [F.]   *** MAIN ***

; MainGUI öffnen
open_Startwindow()

UseSQLiteDatabase() 



;   Hauptaktionsschleife
iAction = 0 ; Aktionsmodus (Modifikation + Abfrage) off

Repeat                                             
	
	lEventID = WaitWindowEvent()
	
	
	
	If lEventID = #PB_Event_CloseWindow 
		Select EventWindow()
        	Case #Startwindow
          		iExit = 1
        	Case #Window_DBLaden
        		CloseWindow(#Window_DBLaden)
          	Case #Window_Error
          		CloseWindow(#Window_Error)
          	Case #Window_Projektladen
          		CloseWindow(#Window_Projektladen)
          	Case #Window_Action
          		CloseWindow (#Window_Action)
          		
          		
      	EndSelect
    EndIf 
		

	
    ; Hauptmenu abfragen
    If lEventID = #PB_Event_Menu
    	Select EventMenu()
    		Case #MENU_DatenbankLaden
    			Debug "Datenbank soll geladen werden"
    			Open_Window_DBLaden()
    			
    		Case #MENU_ProjektNeu
    			Debug "Neues Projekt"
    			
    			
    		Case #MENU_Projektladen
    			Open_Window_Projektladen()
    			OpenDB(#DB_QM, QM_DB\sFile, QM_DB\sUser, QM_DB\sPass) 
    			sSQL = "SELECT * FROM Projekte"
                 If DatabaseQuery(#DB_QM, sSQL)
                 	ix = 0
				    While NextDatabaseRow(#DB_QM)				    		
				      SText = ""	
				      sText = "Projektname :" + GetDatabaseString(#DB_QM, 1) + "( Projekt-ID:" + GetDatabaseString (#DB_QM,0) +")"
				      AddGadgetItem(#Listview_Projektladen, ix, sText)
				      ix = ix +1
				    Wend
				  EndIf
				  
    		Case #MENU_ProjektLetztgenutzt
    			
    			
    		Case #MENU_ProjektLetzterstellt
    			Debug "Letzterstelltes Projekt aufrufen"
    			
    		Case #MENU_Ende
    			Debug "Programm beenden"
    			Abfrage = MessageRequester ("WARNUNG","Bist du sicher, dass du mich einfach so abschalten willst?",#PB_MessageRequester_YesNo) 
    			If Abfrage = #PB_MessageRequester_Yes 
    				End
    			EndIf
    			
    		Case #MENU_Zeitarchiv
    			Debug "Zeitarchiv aufrufen"
    	EndSelect
    EndIf
    
    ; Gadgets abfragen
    If lEventID = #PB_Event_Gadget
    	Select EventGadget()
    		
    		Case #Button_DBL_Ok
    			Debug "Ok-Button gedrückt"
    		
    		Case #Button_DBL_Cancel
    			Debug "Cancel gedrückt"
    			CloseWindow(#Window_DBLaden)
    		
    		Case #Listview_Projektladen
    			sZS =  GetGadgetText(#Listview_Projektladen)
    			SetGadgetText(#Text_PL_Headline,sZs)
    			sZs = ""
    		
    		Case #Button_PL_ok
    			sZS =  GetGadgetText(#Listview_Projektladen)
    			If sZs <> "" 
    				sProjektname = sZs
    				CloseWindow(#Window_Projektladen)
    			EndIf
    			ix = FindString (sZs, ":",1)
    			ix = Len (sZs) - ix
    			sZs = Right(SZs, ix) ; alles rechts von Projektname:
    			ix = FindString (sZs, "(",1) ;(ID..) wegschneiden
    			sProjektname = Left (sZs,ix-1)
    			    			
    			SetGadgetText(#Text_Projektname, sProjektname)
    			
    			
    			;Aktionsfenster öffnen
    			Open_Window_Action() ; DIESES DRECKSFENSTER IST GEMEINT!!!
    		
    		Case #Button_PL_IDGo
    			sZS.s =  GetGadgetText(#String_PL_ID)
    			If sZs = "Möglichkeit, ProjektID einzugeben" Or sZs = ""
    				Goto CaseEnde
    			EndIf
    			;iZs.i = Val (sZs)
    			sSQL = "SELECT * FROM Projekte WHERE ProjektID=" + sZs
    			
                If DatabaseQuery(#DB_QM, sSQL)
                	ix = 0
                	szS = ""
                 		While NextDatabaseRow(#DB_QM) 
                 			ix = ix +1 
                 			sZs = GetDatabaseString(#DB_QM,1)
    					Wend
    			EndIf
    			If ix = 0 
    				Error ("Es existiert kein Projekt, das eine solche ID als Kennung trägt!")
    				Goto CaseEnde
    			EndIf
    			sAbfrage = MessageRequester ("Hinweis","Soll dieses Projekt geladen werden: " + sZs,#PB_MessageRequester_YesNo) 
    			If sAbfrage = #PB_MessageRequester_Yes 
    				sProjektname = sZs
    				CloseWindow(#Window_Projektladen)
    				SetGadgetText(#Text_Projektname,sProjektname)
    				iAction = 1
    			EndIf
    			
    		Case #ButtonImage_Abfrage 
    			MessageRequester ("Hinweis","Abfrage wurde gedrückt!",0) 
    			
    			    				
    	CaseEnde:
    	EndSelect
    EndIf
    	
    		                  

Until iExit = 1       

End
Jetzt das INCLUDE MAIN-GUI:

Code: Alles auswählen

; User Interfaces 

;Pfadangabe auslesen
If ReadFile(0,"C:\Pfadangabe_QM.txt")                                        
	Global sPfad.s  =   ReadString(0)
	
	CloseFile(0)
Else
	MessageRequester ("Hinweis","Du musst erst das Programm ErsterStart_Pfadeingabe starten!",0) 
EndIf

;   [A]   Includes

;   [B.]   Konstanten
;      I.   Window - Konstanten

Enumeration
  #Startwindow
  #Window_DBLaden
  #Window_Error
  #Window_Projektladen
  #Window_Action
EndEnumeration

;      II.   Menubar - Konstanten

Enumeration
  #MenuBar_2
EndEnumeration

Enumeration
  #MENU_DatenbankLaden
  #MENU_ProjektNeu
  #MENU_Projektladen
  #MENU_ProjektLetztgenutzt
  #MENU_ProjektLetzterstellt
  #MENU_Zeitarchiv
  #MENU_Ende
EndEnumeration

;      III.   Gadget - Konstanten
;   
Enumeration
  #Image_0
  #Image_DBladen
  #Text_DBL_T1
  #ExplorerList_DBLaden
  #Text_1
  #Text_DBL_T2
  #Button_DBL_Ok
  #Button_PL_ok
  #Button_DBL_Cancel
  #Text_Error
  #Image_Error
  #Listview_Projektladen
  #Button_PL_OkEnumeration
  #Text_PL_Headline
  #Button_PL_Cancel
  #Button_PL_IDGo
  #String_PL_ID
  #Image_Projektladen
  #Frame3D_Projektname
  #Text_Projektname
  #Button_Abfrage
  #Image_Action
  #ButtonImage_Abfrage
  #ButtonImage_Bearbeiten
  #ButtonImage_Hauptmenu
  #Button_Test
	
EndEnumeration

;   IV.   Datenbank - Konstanten


;   [C.]   Strukturen

;   [D.]   Variablen
;      I.   Globale Variablen
Global Image0
Global Image_DBLaden
Global ImageError
Global ImageProjektladen
Global ImageAction_normal
Global ImageIconAbfrage
Global ImageIconBearbeiten
Global ImageIconHauptmenu


Global FontID1
FontID1 = LoadFont(1, "Arial", 16, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Arial", 9)
Global FontID_Arial12
FontID_Arial12 = LoadFont(3, "Arial", 12)


;      II.   Andere Variablen
;- Catch Images
Image0 = CatchImage(0, ?Image0)
Image_DBLaden = CatchImage(1, ?Image_DBLaden)
ImageError = CatchImage(2, ?ImageError)
ImageProjektladen = CatchImage (3, ?ImageProjektladen)
ImageAction_normal = CatchImage (4, ?ImageAction_normal)
ImageIconAbfrage = CatchImage(5, ?ImageIconAbfrage)
ImageIconBearbeiten = CatchImage(6, ?ImageIconBearbeiten)
ImageIconHauptmenu = CatchImage(7, ?ImageIconHauptmenu)

SetCurrentDirectory (SPfad)

;- Images

DataSection 
Image0:
  IncludeBinary "K:\VB-Programme\PURE BASIC\QM\Graphics\BG_Main900_675.bmp"
Image_DBLaden:
  IncludeBinary "K:\VB-Programme\PURE BASIC\QM\Graphics\wDatenbankLaden.bmp"
ImageError:
  IncludeBinary "K:\VB-Programme\PURE BASIC\QM\Graphics\Error.bmp"
ImageProjektladen:
  IncludeBinary  "K:\VB-Programme\PURE BASIC\QM\Graphics\wProjektladen.bmp"
ImageAction_normal:
  IncludeBinary  "K:\VB-Programme\PURE BASIC\QM\Graphics\BG_Action_normal.bmp"
  ImageIconAbfrage:
  IncludeBinary "K:\VB-Programme\PURE BASIC\QM\Graphics\Abfrage2.ico"
ImageIconBearbeiten:
  IncludeBinary "K:\VB-Programme\PURE BASIC\QM\Graphics\Bearbeiten.ico"
ImageIconHauptmenu:
  IncludeBinary "K:\VB-Programme\PURE BASIC\QM\Graphics\Hauptmenu.ico"
EndDataSection

;   [E.]   Prozeduren

Procedure Open_Startwindow()
 If OpenWindow(#Startwindow, 50, 1, 900, 675, "Start",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar )
    If CreateMenu(#MenuBar_2, WindowID(#Startwindow))
      MenuTitle("Datei")
      MenuItem(#MENU_DatenbankLaden, "Datenbank laden")
      MenuItem(#MENU_ProjektNeu, "Neues Projekt erstellen")
      MenuItem(#MENU_Projektladen, "Projekt laden")
      MenuItem(#MENU_ProjektLetztgenutzt, "Letztgenutzes Projekt laden")
      MenuItem(#MENU_ProjektLetzterstellt, "Letzterstelltes Projekt laden")
      MenuItem(#MENU_Ende, "Programm beenden")
      MenuTitle("Zeitarchiv")
      MenuItem(#MENU_Zeitarchiv, "Zeitarchiv aufrufen")
      MenuTitle("Hilfe")
    EndIf
	If CreateGadgetList(WindowID(#Startwindow))
        TextGadget(#Text_Projektname, 10, 285, 350, 45, "Projektname", #PB_Text_Center | #PB_Text_Border)
        SetGadgetFont(#Text_Projektname, FontID_Arial12)
        ImageGadget(#Image_0, 0, 0, 900, 705, Image0)
        
       
        
        
      EndIf
 EndIf
EndProcedure

Procedure Open_Window_Action()
 If OpenWindow(#Window_Action, 50, 1, 900, 675, "Action",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar )
    
	If CreateGadgetList(WindowID(#Window_Action))
    	ImageGadget(#Image_Action, 0, 0, 900, 705, ImageAction_normal)
    	ButtonImageGadget(#ButtonImage_Abfrage, 165, 420, 123, 70, ImageIconAbfrage)
        ButtonImageGadget(#ButtonImage_Bearbeiten, 165, 495, 123, 70, ImageIconBearbeiten)
        ButtonImageGadget(#ButtonImage_Hauptmenu, 165, 570, 123, 70, ImageIconHauptmenu)
        ButtonGadget(#Button_Test, 195, 330, 105, 45, "Test")
        
      EndIf
 EndIf
EndProcedure



Procedure Open_Window_DBLaden()
  If OpenWindow(#Window_DBLaden, 329, 84, 500, 373, "Datenbank laden",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_DBLaden))
      TextGadget(#Text_DBL_T2, 15, 105, 150, 210, "Wichtig! Ein Laden der Datenbank ist nur erforderlich, wenn eine andere als die Standarddatenbank verwendet werden soll! Wird eine Datenbank ausgewählt, die nicht mit diesem Programm kompatibel ist, wird es zum Absturz des Programms kommen!")
      SetGadgetFont(#Text_DBL_T2, FontID2)
      ButtonGadget(#Button_DBL_Ok, 30, 330, 60, 30, "DB laden", #PB_Button_MultiLine)
      ButtonGadget(#Button_DBL_Cancel, 105, 330, 60, 30, "CANCEL", #PB_Button_MultiLine)
      ExplorerListGadget(#ExplorerList_DBLaden, 180, 105, 315, 255, "", #PB_Explorer_AlwaysShowSelection | #PB_Explorer_AutoSort)
      ImageGadget(#Image_DBladen, 0, 0, 500, 375, Image_DBLaden)
      
    EndIf
  EndIf
EndProcedure

Procedure Open_Window_Projektladen()
  If OpenWindow(#Window_Projektladen, 338, 187, 600, 450, "Projekt laden",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_Projektladen))
      ListViewGadget(#Listview_Projektladen, 255, 195, 330, 240)
      TextGadget(#Text_PL_Headline,240,135,345,45,"")	
      ButtonGadget(#Button_PL_Ok, 15, 405, 60, 30, "OK")
      ButtonGadget(#Button_PL_Cancel, 90, 405, 60, 30, "CANCEL")
      ButtonGadget(#Button_PL_IDGo, 210, 360, 30, 30, ">>")
      StringGadget(#String_PL_ID, 15, 360, 180, 30, "Möglichkeit, ProjektID einzugeben")
      ImageGadget(#Image_Projektladen, 0, 0, 600, 450, ImageProjektladen)
      
    EndIf
  EndIf
EndProcedure

Procedure Error (Errormessage.s)
If OpenWindow(#Window_Error, 306, 104, 500, 375, "FEHLER",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_Error))
      TextGadget(#Text_Error, 210, 165, 270, 180, "Es ist folgender Fehler aufgetreten: "+Errormessage)
      ImageGadget(#Image_Error, 0, 0, 500, 375, ImageError)
      
    EndIf
  EndIf
EndProcedure
Tausend Dank dem, der auch immer mir helfen kann. Spiele schon mit dem Gedanken, doch zu VB zurückzukehren (muss ich halt meine gesamten Jurabücher verticken, damit ich mir das Prog leisten kann :) ), da ich anscheinend zu blöd für PB bin.

Re: Verzweiflung: Fenster reagiert nicht, Fehler nicht auffi

Verfasst: 29.09.2008 20:47
von Kiffi
@Palandt,

bevor ich da jetzt groß herumprobiere: Schreib mal kurz, welches
Fenster nicht reagiert.

Grüße ... Kiffi

Verfasst: 29.09.2008 20:49
von Palandt
#Window_Action. Hab ich aber schon gesagt und im Code markiert. Sag ich aber gerne nochmal, wenn nur der Hauch einer Chance besteht, dass du mir helfen kannst, bin ich echt am Boden, da ich ja auch mittlerweile son bisschen Feeling für die Sprache habe und echt NULL Schimmer hab, woran das liegen kann. Dank dir schonmal im Voraus!!!!

Verfasst: 29.09.2008 20:50
von Palandt
Vielleicht hilft noch die Info, dass ich Vista hab, aber komischerweise gehen ja alle anderen Fenster und das Action-Fenster öffnet und schließt ja auch, es kann nur nicht mit User interagieren!

Verfasst: 29.09.2008 20:58
von Kaeru Gaman
was verstehst du unter "nicht mit User interagieren"?

die einzige abfrage die du drin hast, ist der MessageReq auf #ButtonImage_Abfrage, sonst nix.

Verfasst: 29.09.2008 21:02
von Palandt
Ja, aber wenn ich darauf drücke, müsste der MessageRequester "anspringen" . Das geschieht aber nicht. Und es kommt auch nichts, wenn ich dort einen Testbutton installiere und diesen ebenfalls abfrage. Und die Vorgeschichte (Rollover-Buttons) hab ich auch nur deshalb erwähnt, weil es gestern mit diesem verhexten Fenster und dem Nichtreagieren begonnen hat. Erst ging noch alles danach - beim 2. Öffnen - hat es die Userinteraktion völlig ignoriert. Dies tut es jetzt aber bereits beim ersten Öffnen.

Verfasst: 29.09.2008 21:02
von Kiffi
Also, ich habe jetzt mehrfach #Window_Action geöffnet und geschlossen und
zumindest #ButtonImage_Abfrage liefert mir den entsprechenden
MessageRequester ("Hinweis","Abfrage wurde gedrückt!",0). (Für
#Image_Action, #ButtonImage_Bearbeiten und #Button_Test gibt es ja
auch keine Event-Bearbeitung)

Oder meinst Du was anderes?

Dein Code ist ohnehin ziemlich verstrubbelt. Ist schwierig, da
durchzublicken... :?

Grüße ... Kiffi

Verfasst: 29.09.2008 21:04
von Palandt
Ich mache, bevor ich mir nen Wolf programmier, grundsätzlich immer ne MessageReq -Abfrage, um zu testen, ob das jeweilge Gadget funzt, denn dann, so wie hier, kann ich mir ja den Rest Code sparen.

Verfasst: 29.09.2008 21:05
von Palandt
Ich meinte genau das und das geht bei mir eben nicht! Dann liegts an meinem Windows. Ich hab sowas schon geahnt, weil mir der Fehler so völlig nicht erklärbar vorkam. FUCK!

Sind bei PB Probleme mit Vista bekannt?Uund wenn, gibt es Tipps, wie ich die beheben kann, weil so, kann ich mit PB ja nicht mehr weiterprogrammieren, wenn mir ständig irgendein Fenster den Dienst verweigert. Verdammter Mist, echt!

Verfasst: 29.09.2008 21:11
von HeX0R
Palandt hat geschrieben:Dann liegts an meinem Windows.
Das halte ich für mehr als unwahrscheinlich!

Kannst du deinen Code nicht in einen ausführbaren Rumpf pressen, der das Problem darstellt ?
Ausserdem finde ich deine Gotos irgendwie gefährlich. Welchen Sinn haben die denn ?