Seite 1 von 1

Gadgets etc. an Windowsgröße anpassen

Verfasst: 13.01.2006 20:33
von Zomtec
Hallo zusammen,

ich bin noch absoluter Newbie in Sache PB, habe aber bereits etwas Programmiererfahrungen mit anderen Basic-Dialekten. Zur Eingewöhnung habe ich ein kleines Anwendungsprojekt begonnen. Nun bin ich schon auf die ersten Fragen/Probleme gestoßen:
  • Wenn ich in OpenWindow das #PB_Window_SizeGadget Flag setze, werden bei Größenänderung des Fensters die Gadgets nicht an die neue Größe angepasst. Gibt es eine Funktion die das automatisch macht, oder muss ich das Event der Size-Änderung abfangen und alles neu berechnen und aufbauen?
  • Beim Versuch mit dem VisualDesigner im ScrollAreaGadget ein CreateGadgetList anzulegen stürzt die ganze Sch**** ab. Ist das ein Bug von VD oder ist diese Kombination in PB generell nicht möglich?
  • Ich habe einen von VD generierten Quelltext, den ich zum Aufbau meines Programms benutzen möchte. Dafür wurde eine Main und eine Include-Datei erzeugt. Jetzt habe ich in der Include folgende Zeile eingefügt:

    Code: Alles auswählen

    Else MessageRequester("Fehler!", "Menus konnten nicht angelegt werden") : Goto Ende
    Beim kompilieren erhalte ich folgende Fehlermeldung: Zeile xx: Garbage to the end of line
    Die gleiche Zeile im Main funktioniert einwandfrei. Nach der Hilfe wird die Include doch beim Kompilieren eingefügt und sollte auch die Sprunmarken in der Main kennen?!
Danke schon mal für eure Hilfe.

Re: Gadgets etc. an Windowsgröße anpassen

Verfasst: 13.01.2006 20:46
von ts-soft
Zomtec hat geschrieben:
  • Wenn ich in OpenWindow das #PB_Window_SizeGadget Flag setze, werden bei Größenänderung des Fensters die Gadgets nicht an die neue Größe angepasst. Gibt es eine Funktion die das automatisch macht, oder muss ich das Event der Size-Änderung abfangen und alles neu berechnen und aufbauen?
Wirste wohl müssen, alternativ kannste aber als Designer gDesign, PureVision XP verwenden, oder eine Userlib von Gnozal, die Dir die Arbeit etwas erleichtern.
Zomtec hat geschrieben: [*]Ich habe einen von VD generierten Quelltext, den ich zum Aufbau meines Programms benutzen möchte. Dafür wurde eine Main und eine Include-Datei erzeugt. Jetzt habe ich in der Include folgende Zeile eingefügt:

Code: Alles auswählen

Else MessageRequester("Fehler!", "Menus konnten nicht angelegt werden") : Goto Ende
Beim kompilieren erhalte ich folgende Fehlermeldung: Zeile xx: Garbage to the end of line
Die gleiche Zeile im Main funktioniert einwandfrei. Nach der Hilfe wird die Include doch beim Kompilieren eingefügt und sollte auch die Sprunmarken in der Main kennen?![/list]Danke schon mal für eure Hilfe.
Die Sprungmarke wird er Wohl kennen, da ist ein anderer Fehler. Aber ohne Code kann ich nur raten. Evtl. fehlt die If Zeile oder EndIf?

Re: Gadgets etc. an Windowsgröße anpassen

Verfasst: 13.01.2006 20:58
von Zomtec
ts-soft hat geschrieben:Wirste wohl müssen, alternativ kannste aber als Designer gDesign, PureVision XP verwenden, oder eine Userlib von Gnozal, die Dir die Arbeit etwas erleichtern.
Die beiden Programme habe ich mir bereits angesehen. Von der Benutzerführung etwas gewöhnungsbedürftig. Dann werde ich halt versuchen das selbst umzusetzen - ideal zum lernen... ;-)
Die Sprungmarke wird er Wohl kennen, da ist ein anderer Fehler. Aber ohne Code kann ich nur raten. Evtl. fehlt die If Zeile oder EndIf?
Das ist der betreffende Code, der von VD erzeugt wurde. Die Else-Zeile wurde von mir hinzugefügt:

Code: Alles auswählen

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar , "SharesManager")
    If CreateMenu(#MenuBar_0, WindowID())
      MenuTitle(Language$(0))           ;Datei
      MenuItem(#MENU_11, Language$(1))  ;Öffnen
      MenuItem(#MENU_10, Language$(2))  ;Speichern
      MenuItem(#MENU_9, Language$(3))   ;Beenden
      MenuItem(#MENU_3, Language$(4))   ;Test
      MenuTitle(Language$(5))           ;Bearbeiten
      MenuItem(#MENU_13, Language$(6))  ;Noch leer
      Else MessageRequester("Fehler!", "Menus konnten nicht angelegt werden") : Goto Ende
      EndIf

      If CreateGadgetList(WindowID())
        ButtonGadget(#Button_Neu, 10, 10, 50, 30, Language$(7))     ;Neu
        ButtonGadget(#Button_Del, 70, 10, 50, 30, Language$(8))     ;Löschen
        ButtonGadget(#Button_Change, 130, 10, 50, 30, Language$(9)) ;Ändern
        
        ;-
        ScrollAreaGadget(#ScrollArea_0, 0, 50, 590, 240, 1180, 480, 10)
        CloseGadgetList()
        
      EndIf
    EndIf
EndProcedure

Verfasst: 13.01.2006 21:20
von ts-soft
Sollte so gehen:

Code: Alles auswählen

Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 600, 300,  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar , "SharesManager")
    If CreateMenu(#MenuBar_0, WindowID())
      MenuTitle(Language$(0))           ;Datei
      MenuItem(#MENU_11, Language$(1))  ;Öffnen
      MenuItem(#MENU_10, Language$(2))  ;Speichern
      MenuItem(#MENU_9, Language$(3))   ;Beenden
      MenuItem(#MENU_3, Language$(4))   ;Test
      MenuTitle(Language$(5))           ;Bearbeiten
      MenuItem(#MENU_13, Language$(6))  ;Noch leer
    Else 
      MessageRequester("Fehler!", "Menus konnten nicht angelegt werden") : Goto Ende
    EndIf

    If CreateGadgetList(WindowID())
      ButtonGadget(#Button_Neu, 10, 10, 50, 30, Language$(7))     ;Neu
      ButtonGadget(#Button_Del, 70, 10, 50, 30, Language$(8))     ;Löschen
      ButtonGadget(#Button_Change, 130, 10, 50, 30, Language$(9)) ;Ändern
     
      ;-
      ScrollAreaGadget(#ScrollArea_0, 0, 50, 590, 240, 1180, 480, 10)
      CloseGadgetList()
     
      EndIf
    EndIf
EndProcedure
Oder hinter Else einen Doppelpunkt

Verfasst: 13.01.2006 21:25
von Zomtec
Ähmm, das war ja einfach. ;)
Danke für die Hilfe, so funktioniert's einwandfrei...

Verfasst: 13.01.2006 21:49
von ts-soft
Aber einen Fehler hat es noch. Du solltest niemals mit Goto aus einer Procedure rausspringen. Statt Goto Ende mach lieber einfach End

Verfasst: 13.01.2006 21:50
von Zomtec
Werde ich machen - danke für den Tipp.

EDIT: Noch eine Frage. Wenn im Falle eines Falles die o. g. Zeile zum Zug kommt, bleibt der MessageRequester dann offen oder wird er mit der darauf folgenden End-Anweisung mit beendet?

Verfasst: 13.01.2006 22:02
von ts-soft
Der MessageRequester hält das Programm an, bis Du Ok gedrückt hast, die
Meldung siehste also in jedem Fall. Aber eine Debug-Meldung wäre hier
wahrscheinlich sinnvoller, da es ja nur eine Fehlerprüfung für Dich sein soll.

Code: Alles auswählen

Debug "Menus konnten nicht angelegt werden"

Verfasst: 13.01.2006 22:03
von Macros
Der bleibt offen, da das Programm
nicht weiterläuft, bis du ihn bestätigt hast.