Seite 1 von 1

Nach öffnen vom 2ten Window gibt es Gadget init. Fehler

Verfasst: 20.10.2012 00:17
von Mike-a_de
Hallo allerseits,

ich habe wieder ein Problem (ist eigentlich gelogen, denn es sind zwei) bei dem ich nicht weiter komme. Der Code ist inzwischen ein wenig angewachsen, aus dem Grund würde ich denken, dass ein Upload sinnvoller wäre, aber da ich hier diese Funktionalität nicht gefunden habe, muss wohl der Code 'rein. Ich erkläre wohl am besten zuerst wo ich mein Problem habe bevor ich den Code einfüge.

Wenn ich im Main Window über das Button die Grafik aufrufe, kann ich, nach dem Schließen der Grafik, über das Menü eine Datei weder laden noch kann ich sie speichern. Die Fehlermeldung lautet in beiden Fällen: "Das angegebene #Gadget wurde nicht initialisiert". Einmal ist der Fehler in der Prozedur Data_save und einmal in Data_load, je nach gewähltem Menüpunkt. Schaue ich mir die Grafik nicht vorher an, kann ich ohne Fehler so oft laden und speichern wie ich möchte.

Das zweite Problem ist, dass ich die Grafik nur einmal anschauen kann. Beim zweiten öffnen schließt das Fenster mit der Grafik sofort wieder.

Ich bedanke mich bereits im voraus für Eure Unterstützung ;)

Liebe Grüße

Mike

Jetzt zu dem angedrohten Code :), nun denn, hier ist er:

Code: Alles auswählen

EnableExplicit


;- Window Constants
;
Enumeration
  #Window_Main_1
  #Window_Picture_Workflow
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_File
EndEnumeration

Enumeration
  #MENU_File_Load_file
  #MENU_File_Save_file
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Text_Project_Name
  #String_Project_Name
  #Text_Customer_name
  #String_Customer_name
  #Text_Project_No_
  #String_Project_No
  #Text_Project_ID
  #StringProject_ID
  #Date_Start_date
  #Date_End_date
  #Text_Start_date
  #Text_End_date
  #Frame_project_details
  #Frame_Project_Typ
  #Text_Project_type_Project
  #Radio_Project_type_Project
  #Text_Project_type_Small_project
  #Radio_Project_type_Small_project
  #Text_Project_type_Smal_work
  #Radio_Project_type_Small_work
  #Text_Project_type_Consultancy
  #Radio_Project_type_Consultancy
  #Text_Project_type_Component_project
  #Radio_Project_type_Componentproject
  #Text_Project_lead
  #String_Project_lead
  #Text_Project_manager_t_systems
  #String_Project_manager_t_systems
  #Text_Project_manager_att
  #String_Project_manager_hp
  #Text_Project_manager_hp
  #String_Project_manager_att
  #Text_Project_sponsor_shell
  #String_Project_sponsor_shell
  #Button_Save_data
  #Button_Load_data
  #Button_Quit
  #Button_open_workflow_picture
  #Image_workflow
  
 EndEnumeration

 ;- Fonts
 
Global FontID1
FontID1 = LoadFont(1, "Arial", 18, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Arial", 18)
Global FontID3
FontID3 = LoadFont(3, "Arial", 12, #PB_Font_Bold)
Global FontID4
FontID4 = LoadFont(4, "Arial", 12)
Global FontID5
FontID5 = LoadFont(5, "Arial", 10, #PB_Font_Bold)


OpenWindow(#Window_Main_1, 355, 50, 1326, 927, "Project",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
  
  If CreateMenu(#MenuBar_File, WindowID(#Window_Main_1))
    
      MenuTitle("File")
      MenuItem(#MENU_File_Load_file, "Load Project")
      MenuItem(#MENU_File_Save_file, "Save Project")
      
  EndIf

        TextGadget(#Text_Project_Name, 10, 165, 105, 30, "Project", #PB_Text_Center)                          ; Beginning of project frame data mask
        SetGadgetFont(#Text_Project_Name, FontID1)
        StringGadget(#String_Project_Name, 120, 160, 505, 30, "")
        GadgetToolTip(#String_Project_Name, "Please insert the name of the project here!")
        SetGadgetFont(#String_Project_Name, FontID2)
        TextGadget(#Text_Customer_name, 650, 165, 120, 30, "Customer", #PB_Text_Center)
        SetGadgetFont(#Text_Customer_name, FontID1)
        StringGadget(#String_Customer_name, 785, 165, 505, 30, "")
        GadgetToolTip(#String_Customer_name, "Please insert the name of the project here!")
        SetGadgetFont(#String_Customer_name, FontID2)
        TextGadget(#Text_Project_No_, 20, 200, 90, 20, "Project No.")
        SetGadgetFont(#Text_Project_No_, FontID3)
        StringGadget(#String_Project_No, 120, 200, 185, 20, "")
        GadgetToolTip(#String_Project_No, "Insert the prject Number here")
        SetGadgetFont(#String_Project_No, FontID4)
        TextGadget(#Text_Project_ID, 345, 200, 80, 20, "Project ID")
        SetGadgetFont(#Text_Project_ID, FontID3)
        StringGadget(#StringProject_ID, 440, 200, 185, 20, "")
        GadgetToolTip(#StringProject_ID, "Insert the project ID here (if available)")
        SetGadgetFont(#StringProject_ID, FontID4)
        DateGadget(#Date_Start_date, 785, 205, 185, 20, "%dd.%mm.%yyyy")
        GadgetToolTip(#Date_Start_date, "Insert the project start date here")
        TextGadget(#Text_End_date, 1015, 205, 75, 20, "End Date")
        SetGadgetFont(#Text_End_date, FontID3)
        DateGadget(#Date_End_date, 1105, 205, 185, 20, "%dd.%mm.%yyyy")
        GadgetToolTip(#Date_End_date, "Insert the planned project end date here")        
        TextGadget(#Text_Start_date, 660, 205, 80, 20, "Start Date")
        SetGadgetFont(#Text_Start_date, FontID3)
        TextGadget(#Text_End_date, 1015, 205, 75, 20, "End Date")
        SetGadgetFont(#Text_End_date, FontID3)                                                                ; End of project frame data mask
        
        Frame3DGadget(#Frame_project_details, 10, 415, 1280, 230, "Project Details")                          ; Beginning of Frame "Project Details"
        SetGadgetFont(#Frame_project_details, FontID1)
        
        Frame3DGadget(#Frame_Project_Typ, 30, 450, 210, 185, "Project type")                                  ; Beginning of Frame "Project Details / Project Tape
        SetGadgetFont(#Frame_Project_Typ, FontID3)
        
        OptionGadget(#Radio_Project_type_Project, 40, 475, 180, 20, "")                                       ; Beginning of radio buttons for project type
        SetGadgetFont(#Radio_Project_type_Project, FontID5)
        SetGadgetText(#Radio_Project_type_Project, "Project")
        OptionGadget(#Radio_Project_type_Small_project, 40, 505, 180, 20, "")
        SetGadgetFont(#Radio_Project_type_Small_project, FontID5)
        SetGadgetText(#Radio_Project_type_Small_project, "Small Project")
        OptionGadget(#Radio_Project_type_Small_work, 40, 535, 180, 20, "Small Work")
        SetGadgetFont(#Radio_Project_type_Small_work, FontID5)
        SetGadgetText(#Radio_Project_type_Small_work, "Small Work")
        OptionGadget(#Radio_Project_type_Consultancy, 40, 565, 180, 20, "Consultancy")
        SetGadgetFont(#Radio_Project_type_Consultancy, FontID5)
        SetGadgetText(#Radio_Project_type_Consultancy, "Consultancy")
        OptionGadget(#Radio_Project_type_Componentproject, 40, 595, 180, 20, "Component Project")
        SetGadgetFont(#Radio_Project_type_Componentproject, FontID5)
        SetGadgetText(#Radio_Project_type_Componentproject, "Component Project")                              ; End of radio buttons for project type
        
        TextGadget(#Text_Project_lead, 260, 440, 175, 20, "Project Lead")                                     ; Beginning of project management mask
        SetGadgetFont(#Text_Project_lead, FontID4)
        StringGadget(#String_Project_lead, 455, 440, 190, 20, "")
        TextGadget(#Text_Project_manager_t_systems, 260, 470, 175, 20, "Project Man. T-Systems")
        SetGadgetFont(#Text_Project_manager_t_systems, FontID4)
        StringGadget(#String_Project_manager_t_systems, 455, 470, 190, 20, "")
        TextGadget(#Text_Project_manager_att, 260, 530, 175, 20, "Project Manager ATT")
        SetGadgetFont(#Text_Project_manager_att, FontID4)
        StringGadget(#String_Project_manager_hp, 455, 500, 190, 20, "")
        TextGadget(#Text_Project_manager_hp, 260, 500, 175, 20, "Project Manager HP")
        SetGadgetFont(#Text_Project_manager_hp, FontID4)
        StringGadget(#String_Project_manager_att, 455, 530, 190, 20, "")
        TextGadget(#Text_Project_sponsor_shell, 260, 560, 175, 20, "Project Sponsor Shell")
        SetGadgetFont(#Text_Project_sponsor_shell, FontID4)
        StringGadget(#String_Project_sponsor_shell, 455, 560, 190, 20, "")                                    ; End of project management mask
        
        ButtonGadget(#Button_Quit, 1150, 720, 125, 40, "Quit")                                                ; End of operational buttons
        ButtonGadget(#Button_open_workflow_picture, 350, 595, 190, 25, "open workflow picture")
                        
Procedure Data_save()                                                                                        ; Procedure for saving made entries
  
  Define FileName.s
  Define File.i
  
  FileName = GetGadgetText(#String_Project_Name) + ".txt"
  File = CreateFile ( #PB_Any , FileName )
  
  If File
    
    WriteStringN (File , GetGadgetText(#String_Project_Name))
    WriteStringN (File , GetGadgetText(#String_Customer_name))
    WriteStringN (File , GetGadgetText(#String_Project_No))
    WriteStringN (File , GetGadgetText(#StringProject_ID))
    WriteStringN (File , GetGadgetText(#Date_Start_date))
    WriteStringN (File , GetGadgetText(#Date_End_date))
    WriteStringN (File , GetGadgetText(#String_Project_lead))
    WriteStringN (File , GetGadgetText(#String_Project_manager_t_systems))
    WriteStringN (File , GetGadgetText(#String_Project_manager_hp))
    WriteStringN (File , GetGadgetText(#String_Project_manager_att))
    WriteStringN (File , GetGadgetText(#String_Project_sponsor_shell))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Project))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Small_project))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Small_work))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Consultancy))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Componentproject))
    CloseFile ( File )
    
  Else
    
    Debug " Could not create the file : " + FileName
    
  EndIf

EndProcedure

Procedure Data_load()                                                                                      ; Procedure for loading previously saved entries
  
  Define ProgramDirectory.s
  Define Load_file$
  Define File.i
  
  ProgramDirectory.s = Space(#MAX_PATH)
  GetCurrentDirectory_(#MAX_PATH, ProgramDirectory)                                                          ;alternativ
  ;ProgramDirectory = GetPathPart(ProgramFilename())
  Load_file$ = OpenFileRequester("Bitte Datei zum Laden auswählen",ProgramDirectory + "\","Text-Dateien | *.txt",0)
  File = ReadFile ( #PB_Any , Load_file$ )

  If File
    
    SetGadgetText (#String_Project_name, ReadString (File))
    SetGadgetText (#String_Customer_name, ReadString (File))
    SetGadgetText (#String_Project_No, ReadString (File))    
    SetGadgetText (#StringProject_ID, ReadString (File))    
    SetGadgetState(#Date_Start_date, ParseDate("%dd.%mm.%yyyy", ReadString (File)))
    SetGadgetState(#Date_End_date, ParseDate("%dd.%mm.%yyyy", ReadString (File)))
    SetGadgetText (#String_Project_lead, ReadString (File)) 
    SetGadgetText (#String_Project_manager_t_systems, ReadString (File))
    SetGadgetText (#String_Project_manager_hp, ReadString (File)) 
    SetGadgetText (#String_Project_manager_att, ReadString (File)) 
    SetGadgetText (#String_Project_sponsor_shell, ReadString (File)) 
    SetGadgetState (#Radio_Project_type_Project,ReadInteger (File))
    SetGadgetState (#Radio_Project_type_Small_project,ReadInteger (File))
    SetGadgetState (#Radio_Project_type_Small_work,ReadInteger (File))
    SetGadgetState (#Radio_Project_type_Consultancy,ReadInteger (File))
    SetGadgetState (#Radio_Project_type_Componentproject,ReadInteger (File))
    CloseFile ( File )
    
  Else
    
    Debug " Could not load the file : " + Load_file$
    
  EndIf

EndProcedure

Procedure Load_workflow_picture()                                                                          ; Procedure for loading previously saved entries
  
  UseJPEGImageDecoder()
  
  Enumeration
    #Project_type_show
    #Button_Workflow_Quit
  EndEnumeration

  Define event
  Define ProgramDirectory.s
  Define Picture_File.s
  Define Radio_Button_No.i
  
  ProgramDirectory.s = Space(#MAX_PATH)
  GetCurrentDirectory_(#MAX_PATH, ProgramDirectory) 
  
  If GetGadgetState(#Radio_Project_type_Project) = 1
    Radio_Button_No = 1
  ElseIf GetGadgetState(#Radio_Project_type_Small_project) = 1
    Radio_Button_No = 2
  ElseIf GetGadgetState(#Radio_Project_type_Small_work) = 1
    Radio_Button_No = 3
  ElseIf GetGadgetState(#Radio_Project_type_Consultancy) = 1  
    Radio_Button_No = 4
  Else
    Radio_Button_No = 5
  EndIf  

  OpenWindow(#Window_Picture_Workflow, 355, 50, 1326, 927, "Workflow Picture",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar, #Window_Main_1 )
  ButtonGadget(#Button_Workflow_Quit, 1150, 720, 125, 40, "Quit")
  
  UseJPEGImageDecoder()

    Select Radio_Button_No  
      Case 1
        LoadImage(0, ProgramDirectory + "\Projects.jpg")
        ImageGadget(0,  150, 150, 1000, 700, ImageID(0))
      Case 2  
        LoadImage(0, ProgramDirectory + "\Small Projects.jpg")
        ImageGadget(0,  150, 150, 1000, 700, ImageID(0))      
      Case 3      
        LoadImage(0, ProgramDirectory + "\Small Works.jpg")
        ImageGadget(0,  150, 150, 1000, 700, ImageID(0))      
      Case 4
        LoadImage(0, ProgramDirectory + "\Consultancy.jpg")
        ImageGadget(0,  150, 150, 1000, 700, ImageID(0))      
 
    EndSelect
    
    SetGadgetState(#Button_Workflow_Quit, 0)
    Event = 0
    Debug event
        
  Repeat

    Event = WaitWindowEvent()                                                                             ; This line waits until an event is received from Windows
  
    If EventGadget() = #Button_Workflow_Quit
      Event = #PB_Event_CloseWindow
    EndIf   
   
  Until Event = #PB_Event_CloseWindow
  Debug event
  CloseWindow (#Window_Picture_Workflow)
  
EndProcedure

Define Event
Define WindowID
Define GadgetID
Define EventType

Repeat ; Start of the event loop
  
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  GadgetID = EventGadget() ; Is it a gadget event?
  EventType = EventType() ; The event type
  
  Select event
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0
          Data_Load()
        Case 1
          Data_save()
    EndSelect
  EndSelect
  
  If EventGadget()= #Button_Quit
    Event = #PB_Event_CloseWindow
  EndIf   
 
  If EventGadget()= #Button_open_workflow_picture
    Load_workflow_picture()
  EndIf  
  
Until Event = #PB_Event_CloseWindow ; End of the event loop

Re: Nach öffnen vom 2ten Window gibt es Gadget init. Fehler

Verfasst: 20.10.2012 00:29
von STARGÅTE
So wie ich das sehe, verwendest du im "Workflow Picture"-Fenster ein Gadget mit der Nummer 0:
ImageGadget(0, 150, 150, 1000, 700, ImageID(0))

Diese Nummer wird aber bereits im Hauptfenster vom Gadget #Text_Project_Name verwendet.
Somit wird das Gadget im Hauptfenster überschrieben/gelöscht.
Nachdem du dann das "Workflow Picture"-Fenster schließt, wird auch das Gadget mit der Nummer 0 gelöscht.

Außerdem werden auch die Kostanten im "Workflow Picture"-Fenster selbst auch mit 0 und 1 definiert und überschneiden ebenfalls, die Gadget-Nummern des Hauptfensters:

Code: Alles auswählen

  Enumeration
    #Project_type_show ; Ist 0 (also wie das ImageGadget und #Text_Project_Name)
    #Button_Workflow_Quit ; Ist 1 (also wie #String_Project_Name)
  EndEnumeration
deswegen kommt es danach hier:
SetGadgetText (#String_Project_name, ReadString (File))
und
WriteStringN (File , GetGadgetText(#String_Project_Name))
zum Fehler, weil ja die Gadgets nicht mehr existieren.

Deswegen: Immer alle Gadget-Konstanten zusammen definieren und nicht in mehrere Enumeration aufteilen, weil dann immer mit 0 begonnen wird.

Edit: Thx Kiffi, dass hab ich übersehen ^^

Re: Nach öffnen vom 2ten Window gibt es Gadget init. Fehler

Verfasst: 20.10.2012 00:31
von Kiffi
EventGadget() solltest Du nur bei einem #PB_Event_Gadget abfragen:

Code: Alles auswählen

  Select event
    Case #PB_Event_Menu
      Select EventMenu()
        Case 0
          Data_Load()
        Case 1
          Data_save()
      EndSelect

; Hier!

    Case #PB_Event_Gadget
      
      If EventGadget()= #Button_Quit
        Event = #PB_Event_CloseWindow
      EndIf   
      
      If EventGadget()= #Button_open_workflow_picture
        Load_workflow_picture()
      EndIf  
      
  EndSelect
(entsprechend auch in Deiner Load_workflow_picture()-Proc)

Außerdem sollten alle Gadgets in eine Enumeration.

Grüße ... Kiffi

Re: Nach öffnen vom 2ten Window gibt es Gadget init. Fehler

Verfasst: 20.10.2012 00:44
von ts-soft
Sind schon wieder dieselben Fehler, wie bei Deiner letzten Frage :wink:

Enumerationen haben in Proceduren nichts zu suchen.
Protected eignet sich in einer Procedure besser als Define.
Im EventLoop ist immer erst die Art des Events zu berücksichtigen, also z.B. #PB_Event_Gadget und
dann erst EventGadget()!

GetCurrentDirectory wird nicht immer funktionieren! Nimm die Alternative.

Hier der korrigierte Code, guck Dir die Änderungen an!

Code: Alles auswählen

EnableExplicit

;- Window Constants
;
Enumeration
  #Window_Main_1
  #Window_Picture_Workflow
EndEnumeration

;- MenuBar Constants
;
Enumeration
  #MenuBar_File
EndEnumeration

Enumeration
  #MENU_File_Load_file
  #MENU_File_Save_file
EndEnumeration

;- Gadget Constants
;
Enumeration
  #Project_type_show
  #Button_Workflow_Quit
  #Text_Project_Name
  #String_Project_Name
  #Text_Customer_name
  #String_Customer_name
  #Text_Project_No_
  #String_Project_No
  #Text_Project_ID
  #StringProject_ID
  #Date_Start_date
  #Date_End_date
  #Text_Start_date
  #Text_End_date
  #Frame_project_details
  #Frame_Project_Typ
  #Text_Project_type_Project
  #Radio_Project_type_Project
  #Text_Project_type_Small_project
  #Radio_Project_type_Small_project
  #Text_Project_type_Smal_work
  #Radio_Project_type_Small_work
  #Text_Project_type_Consultancy
  #Radio_Project_type_Consultancy
  #Text_Project_type_Component_project
  #Radio_Project_type_Componentproject
  #Text_Project_lead
  #String_Project_lead
  #Text_Project_manager_t_systems
  #String_Project_manager_t_systems
  #Text_Project_manager_att
  #String_Project_manager_hp
  #Text_Project_manager_hp
  #String_Project_manager_att
  #Text_Project_sponsor_shell
  #String_Project_sponsor_shell
  #Button_Save_data
  #Button_Load_data
  #Button_Quit
  #Button_open_workflow_picture
  #Image_workflow
 
EndEnumeration

;- Fonts

Global FontID1
FontID1 = LoadFont(1, "Arial", 18, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Arial", 18)
Global FontID3
FontID3 = LoadFont(3, "Arial", 12, #PB_Font_Bold)
Global FontID4
FontID4 = LoadFont(4, "Arial", 12)
Global FontID5
FontID5 = LoadFont(5, "Arial", 10, #PB_Font_Bold)


OpenWindow(#Window_Main_1, 355, 50, 1326, 927, "Project",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )

If CreateMenu(#MenuBar_File, WindowID(#Window_Main_1))
 
  MenuTitle("File")
  MenuItem(#MENU_File_Load_file, "Load Project")
  MenuItem(#MENU_File_Save_file, "Save Project")
 
EndIf

TextGadget(#Text_Project_Name, 10, 165, 105, 30, "Project", #PB_Text_Center)                          ; Beginning of project frame data mask
SetGadgetFont(#Text_Project_Name, FontID1)
StringGadget(#String_Project_Name, 120, 160, 505, 30, "")
GadgetToolTip(#String_Project_Name, "Please insert the name of the project here!")
SetGadgetFont(#String_Project_Name, FontID2)
TextGadget(#Text_Customer_name, 650, 165, 120, 30, "Customer", #PB_Text_Center)
SetGadgetFont(#Text_Customer_name, FontID1)
StringGadget(#String_Customer_name, 785, 165, 505, 30, "")
GadgetToolTip(#String_Customer_name, "Please insert the name of the project here!")
SetGadgetFont(#String_Customer_name, FontID2)
TextGadget(#Text_Project_No_, 20, 200, 90, 20, "Project No.")
SetGadgetFont(#Text_Project_No_, FontID3)
StringGadget(#String_Project_No, 120, 200, 185, 20, "")
GadgetToolTip(#String_Project_No, "Insert the prject Number here")
SetGadgetFont(#String_Project_No, FontID4)
TextGadget(#Text_Project_ID, 345, 200, 80, 20, "Project ID")
SetGadgetFont(#Text_Project_ID, FontID3)
StringGadget(#StringProject_ID, 440, 200, 185, 20, "")
GadgetToolTip(#StringProject_ID, "Insert the project ID here (if available)")
SetGadgetFont(#StringProject_ID, FontID4)
DateGadget(#Date_Start_date, 785, 205, 185, 20, "%dd.%mm.%yyyy")
GadgetToolTip(#Date_Start_date, "Insert the project start date here")
TextGadget(#Text_End_date, 1015, 205, 75, 20, "End Date")
SetGadgetFont(#Text_End_date, FontID3)
DateGadget(#Date_End_date, 1105, 205, 185, 20, "%dd.%mm.%yyyy")
GadgetToolTip(#Date_End_date, "Insert the planned project end date here")       
TextGadget(#Text_Start_date, 660, 205, 80, 20, "Start Date")
SetGadgetFont(#Text_Start_date, FontID3)
TextGadget(#Text_End_date, 1015, 205, 75, 20, "End Date")
SetGadgetFont(#Text_End_date, FontID3)                                                                ; End of project frame data mask

Frame3DGadget(#Frame_project_details, 10, 415, 1280, 230, "Project Details")                          ; Beginning of Frame "Project Details"
SetGadgetFont(#Frame_project_details, FontID1)

Frame3DGadget(#Frame_Project_Typ, 30, 450, 210, 185, "Project type")                                  ; Beginning of Frame "Project Details / Project Tape
SetGadgetFont(#Frame_Project_Typ, FontID3)

OptionGadget(#Radio_Project_type_Project, 40, 475, 180, 20, "")                                       ; Beginning of radio buttons for project type
SetGadgetFont(#Radio_Project_type_Project, FontID5)
SetGadgetText(#Radio_Project_type_Project, "Project")
OptionGadget(#Radio_Project_type_Small_project, 40, 505, 180, 20, "")
SetGadgetFont(#Radio_Project_type_Small_project, FontID5)
SetGadgetText(#Radio_Project_type_Small_project, "Small Project")
OptionGadget(#Radio_Project_type_Small_work, 40, 535, 180, 20, "Small Work")
SetGadgetFont(#Radio_Project_type_Small_work, FontID5)
SetGadgetText(#Radio_Project_type_Small_work, "Small Work")
OptionGadget(#Radio_Project_type_Consultancy, 40, 565, 180, 20, "Consultancy")
SetGadgetFont(#Radio_Project_type_Consultancy, FontID5)
SetGadgetText(#Radio_Project_type_Consultancy, "Consultancy")
OptionGadget(#Radio_Project_type_Componentproject, 40, 595, 180, 20, "Component Project")
SetGadgetFont(#Radio_Project_type_Componentproject, FontID5)
SetGadgetText(#Radio_Project_type_Componentproject, "Component Project")                              ; End of radio buttons for project type

TextGadget(#Text_Project_lead, 260, 440, 175, 20, "Project Lead")                                     ; Beginning of project management mask
SetGadgetFont(#Text_Project_lead, FontID4)
StringGadget(#String_Project_lead, 455, 440, 190, 20, "")
TextGadget(#Text_Project_manager_t_systems, 260, 470, 175, 20, "Project Man. T-Systems")
SetGadgetFont(#Text_Project_manager_t_systems, FontID4)
StringGadget(#String_Project_manager_t_systems, 455, 470, 190, 20, "")
TextGadget(#Text_Project_manager_att, 260, 530, 175, 20, "Project Manager ATT")
SetGadgetFont(#Text_Project_manager_att, FontID4)
StringGadget(#String_Project_manager_hp, 455, 500, 190, 20, "")
TextGadget(#Text_Project_manager_hp, 260, 500, 175, 20, "Project Manager HP")
SetGadgetFont(#Text_Project_manager_hp, FontID4)
StringGadget(#String_Project_manager_att, 455, 530, 190, 20, "")
TextGadget(#Text_Project_sponsor_shell, 260, 560, 175, 20, "Project Sponsor Shell")
SetGadgetFont(#Text_Project_sponsor_shell, FontID4)
StringGadget(#String_Project_sponsor_shell, 455, 560, 190, 20, "")                                    ; End of project management mask

ButtonGadget(#Button_Quit, 1150, 720, 125, 40, "Quit")                                                ; End of operational buttons
ButtonGadget(#Button_open_workflow_picture, 350, 595, 190, 25, "open workflow picture")

Procedure Data_save()                                                                                        ; Procedure for saving made entries
 
  Protected FileName.s
  Protected File.i
 
  FileName = GetGadgetText(#String_Project_Name) + ".txt"
  File = CreateFile ( #PB_Any , FileName )
 
  If File
   
    WriteStringN (File , GetGadgetText(#String_Project_Name))
    WriteStringN (File , GetGadgetText(#String_Customer_name))
    WriteStringN (File , GetGadgetText(#String_Project_No))
    WriteStringN (File , GetGadgetText(#StringProject_ID))
    WriteStringN (File , GetGadgetText(#Date_Start_date))
    WriteStringN (File , GetGadgetText(#Date_End_date))
    WriteStringN (File , GetGadgetText(#String_Project_lead))
    WriteStringN (File , GetGadgetText(#String_Project_manager_t_systems))
    WriteStringN (File , GetGadgetText(#String_Project_manager_hp))
    WriteStringN (File , GetGadgetText(#String_Project_manager_att))
    WriteStringN (File , GetGadgetText(#String_Project_sponsor_shell))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Project))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Small_project))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Small_work))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Consultancy))
    WriteInteger (File , GetGadgetState(#Radio_Project_type_Componentproject))
    CloseFile ( File )
   
  Else
   
    Debug " Could not create the file : " + FileName
   
  EndIf
 
EndProcedure

Procedure Data_load()                                                                                      ; Procedure for loading previously saved entries
 
  Protected ProgramDirectory.s
  Protected Load_file$
  Protected File.i
 
  ProgramDirectory = GetPathPart(ProgramFilename())
  Load_file$ = OpenFileRequester("Bitte Datei zum Laden auswählen",ProgramDirectory,"Text-Dateien | *.txt",0)
  File = ReadFile ( #PB_Any , Load_file$ )
 
  If File
   
    SetGadgetText (#String_Project_name, ReadString (File))
    SetGadgetText (#String_Customer_name, ReadString (File))
    SetGadgetText (#String_Project_No, ReadString (File))   
    SetGadgetText (#StringProject_ID, ReadString (File))   
    SetGadgetState(#Date_Start_date, ParseDate("%dd.%mm.%yyyy", ReadString (File)))
    SetGadgetState(#Date_End_date, ParseDate("%dd.%mm.%yyyy", ReadString (File)))
    SetGadgetText (#String_Project_lead, ReadString (File))
    SetGadgetText (#String_Project_manager_t_systems, ReadString (File))
    SetGadgetText (#String_Project_manager_hp, ReadString (File))
    SetGadgetText (#String_Project_manager_att, ReadString (File))
    SetGadgetText (#String_Project_sponsor_shell, ReadString (File))
    SetGadgetState (#Radio_Project_type_Project,ReadInteger (File))
    SetGadgetState (#Radio_Project_type_Small_project,ReadInteger (File))
    SetGadgetState (#Radio_Project_type_Small_work,ReadInteger (File))
    SetGadgetState (#Radio_Project_type_Consultancy,ReadInteger (File))
    SetGadgetState (#Radio_Project_type_Componentproject,ReadInteger (File))
    CloseFile ( File )
   
  Else
   
    Debug " Could not load the file : " + Load_file$
   
  EndIf
 
EndProcedure

Procedure Load_workflow_picture()                                                                          ; Procedure for loading previously saved entries
 
  UseJPEGImageDecoder()
 
  Protected event
  Protected ProgramDirectory.s
  Protected Picture_File.s
  Protected Radio_Button_No.i
 
  ProgramDirectory = GetPathPart(ProgramFilename())
 
  If GetGadgetState(#Radio_Project_type_Project) = 1
    Radio_Button_No = 1
  ElseIf GetGadgetState(#Radio_Project_type_Small_project) = 1
    Radio_Button_No = 2
  ElseIf GetGadgetState(#Radio_Project_type_Small_work) = 1
    Radio_Button_No = 3
  ElseIf GetGadgetState(#Radio_Project_type_Consultancy) = 1
    Radio_Button_No = 4
  Else
    Radio_Button_No = 5
  EndIf
 
  OpenWindow(#Window_Picture_Workflow, 355, 50, 1326, 927, "Workflow Picture",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar, #Window_Main_1 )
  ButtonGadget(#Button_Workflow_Quit, 1150, 720, 125, 40, "Quit")
 
  UseJPEGImageDecoder()
 
  Select Radio_Button_No
    Case 1
      If LoadImage(0, ProgramDirectory + "Projects.jpg")
        ImageGadget(0,  150, 150, 1000, 700, ImageID(0))
      EndIf
    Case 2
      If LoadImage(0, ProgramDirectory + "Small Projects.jpg")
        ImageGadget(0,  150, 150, 1000, 700, ImageID(0))
      EndIf
    Case 3     
      If LoadImage(0, ProgramDirectory + "Small Works.jpg")
        ImageGadget(0,  150, 150, 1000, 700, ImageID(0))
      EndIf
    Case 4
      If LoadImage(0, ProgramDirectory + "Consultancy.jpg")
        ImageGadget(0,  150, 150, 1000, 700, ImageID(0))
      EndIf 
     
  EndSelect
 
 
  Repeat
   
    Event = WaitWindowEvent()
   
    Select Event
      Case #PB_Event_Gadget
        If EventGadget() = #Button_Workflow_Quit
          CloseWindow (#Window_Picture_Workflow)
          Break
        EndIf
    EndSelect                                                                            ; This line waits until an event is received from Windows
   
  ForEver   
EndProcedure

Define Event
Define WindowID
Define GadgetID
Define EventType
Define MenuID

Repeat ; Start of the event loop
 
  Event = WaitWindowEvent() ; This line waits until an event is received from Windows
  WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
  GadgetID = EventGadget() ; Is it a gadget event?
  MenuID = EventMenu()
  EventType = EventType() ; The event type
 
  Select Event
    Case #PB_Event_Menu
      Select MenuID
        Case 0
          Data_Load()
        Case 1
          Data_save()
      EndSelect
     
    Case #PB_Event_Gadget
      Select GadgetID
        Case #Button_Quit
          Break
        Case #Button_open_workflow_picture
          Load_workflow_picture()
      EndSelect
  EndSelect
 
Until Event = #PB_Event_CloseWindow ; End of the event loop 
Gruß
Thomas

Re: Nach öffnen vom 2ten Window gibt es Gadget init. Fehler

Verfasst: 20.10.2012 11:22
von Mike-a_de
Hallo Stargate, Kiffi und Thomas,

Erstmal herzlichen Dank für die schnellen Antworten. Ich hatte mich, gleich nach dem Aufwachen an die Änderungen gesetzt. Hier im Einzelnen meine Kommentare und eventuelle erweiterte Fragen.

Stargate: Ich hatte gedacht ich wäre schlau und habe alle Gadgets mit sprechenden und vor allem eindeutigen Namen belegt. Das Pb diese intern immer noch auf Nummern reduziert war mir nicht bekannt. Ich denke ich habe aus diesem Grund diesen Fehler begangen. Aber ich habe es mir (hoffentlich) gemerkt: Alle Gadget-Konstante immer zusammen in einer einzigen Enumeration definieren.

Kiffi: Wie oben beschrieben sind jetzt alle Gadgets in einer einzigen Enumeration definiert.

Ich frage jetzt auch über ein Event_Gadget() im „Load_Workflow_Picture“, #PB_Event_CloseWindow ab, wie empfohlen.

Thomas: Wie bereits erwähnt, habe ich alle enumerations aus den Prozeduren verbannt!

Ich dachte wenn ich alle Variablen in den Prozeduren zentral über Define deklariere sieht das etwas strukturierter aus. Zumindest zwinge ich mich zur Deklaration durch „Enable Explicit“. Das ist doch eine Verbesserung gegenüber dem ersten Code, oder ;)

Protected war mir komplett neu. Da musste ich erst mal hineinlesen um zu verstehen was Protected für Auswirkungen hat. Ich glaube ich habe es jetzt kapiert. Eine Variable „Zahl“ die übergeordnet definiert und mit einem Wert „x“ belegt wird hat innerhalb einer Prozedur, wenn die Variable „Zahl“ mit „Protected“ definiert wurde und mit „y“ belegt wurde, eben den Wert „y“. Sobald man die Prozedur verlässt ist „Zahl“ wieder mit „x“ belegt.

Ich glaube langsam dämmert es mir was Du mit „zuerst Art des Events abhandeln und dann das Event selbst“. Ich hatte es das erste Mal wohl nicht kapiert. Vielleicht habe ich es jetzt gerafft ;): Bei den EventLoops immer erst #PB_Event "einschleifen" oder "EinCasen", dann die einzelnen Events innerhalb der #PB_Events-Schleife abfragen.

Ich habe „GetCurrentDirectory“ genommen, weil ich mit GetPathPart immer in meinem Temp-Verzeichnis die Suche starten muss, anstelle in dem Verzeichnis wo ich die gespeicherten Daten habe, nämlich in dem Programmverzeichnis. Das wird sich sowieso (zumindest gehe ich davon aus) dahingehend ändern, dass es sich auf ein statisches Verzeichnis auf einem Netzlaufwerk beziehen wird.

Nochmals vielen lieben Dank euch Dreien

Gruß

Mike

Re: Nach öffnen vom 2ten Window gibt es Gadget init. Fehler

Verfasst: 20.10.2012 12:52
von ts-soft
Mike-a_de hat geschrieben: Ich habe „GetCurrentDirectory“ genommen, weil ich mit GetPathPart immer in meinem Temp-Verzeichnis die Suche starten muss, anstelle in dem Verzeichnis wo ich die gespeicherten Daten habe, nämlich in dem Programmverzeichnis.
Du solltest in den Einstellungen zum Compiler einstellen: "Temporäre Executable im Quellcode-Verzeichnis erstellen!"
Dann funktioniert das. Aber wenn Du weiterhin darauf bestehst, nimm wenigsten nicht unnötiger Weise die API,
PB kennt den Befehl: "GetCurrentDirectory()".

Die nativen PB Befehle haben gegenüber der API auch noch den Vorteil, das sie alle Verzeichnisse immer mit einem
abschließendem Slash/BackSlash zurückgeben (habe deshalb auch die Pfade in Deinem Source angepasst)

Gruß
Thomas

Re: Nach öffnen vom 2ten Window gibt es Gadget init. Fehler

Verfasst: 20.10.2012 13:27
von Mike-a_de
Hi Thomas,

wenn das so ist und daran liegt, dass ich bei den Compiler-Einstellungen ein Häkchen setzen muss, dann tue ich das natürlich. War mir nicht bekannt. Vielen Dank für den Tipp. Habe ich schon umgesetzt.

Lieben Gruß

Mike

Re: Nach öffnen vom 2ten Window gibt es Gadget init. Fehler

Verfasst: 20.10.2012 13:54
von ts-soft
Hier noch ein paar von mir empfohlene Standard-Einstellungen für den Compiler:

Code: Alles auswählen

; COMPILER OPTIONS:
;  [x] Create unicode executable
;  [ ] Create threadsafe executable
;  [ ] Enable inline ASM support
;  [ ] Enable OnError lines support
;  [x] Enable XP skin support
;  [ ] Request Administrator mode for Windows Vista
;  [x] Request User mode for Windows Vista (no virtualization)

; File Format:        UTF-8
Bei Bedarf sind diese natürlich anzupassen, aber meistens sollte das passen :wink: