Verzweiflung: Fenster reagiert nicht, Fehler nicht auffindba
Verfasst: 29.09.2008 20:23
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
Jetzt das INCLUDE MAIN-GUI:
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.
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
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
