SplitterGadget im FormDesigner friert IDE ein

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

SplitterGadget im FormDesigner friert IDE ein

Beitrag von matbal »

Ich konnte ein weiteres Problem im Zusammenhang mit dem FormDesigner einkreisen. Der Fehler hängt mit dem SplitterGadget zusammen und läßt sich so reproduzieren:

1. beliebiges Gadget1 erstellen
2. beliebiges Gadget2 erstellen
3. SplitterGadget mit den beiden Gadgets erstellen

bis hierher gibt es noch keine Probleme

4. weiteres beliebiges Gadget3 auf der Form erstellen.

Form speichern und wieder laden - oder in Quellcode-Ansicht wechseln und wieder zur FormAnsicht zurück -, und die IDE friert ein.

Offenbar hat der Designer beim Parsen des FormCodes ein Problem, wenn nach dem SplitterGadget weitere Gadgets kommen. Verschiebt man im Quellcode der PBF die Gadgets, die hinter dem Splitter liegen, an den Anfang, dann läßt sich die Form wieder öffnen.

Hier noch ein BeispielsCode: Diese Form kann der Designer nicht mehr öffnen - IDE friert bei mir ein (WinXP).

Code: Alles auswählen

; Form Designer for Purebasic - 5.20
; Warning: this file uses a strict syntax, if you edit it, make sure to respect the Form Designer limitation or it won't be opened again.

Enumeration #PB_Compiler_EnumerationValue
  #FormSettings
EndEnumeration

Enumeration #PB_Compiler_EnumerationValue
  #Tree_Select
  #Container_Main
  #Splitter
  #Button_OK
  #Button_Cancel
EndEnumeration

Declare ResizeGadgetsFormSettings()


Procedure OpenFormSettings(x = 0, y = 0, width = 600, height = 400)
  OpenWindow(#FormSettings, x, y, width, height, "", #PB_Window_SystemMenu)
  TreeGadget(#Tree_Select, 5, 5, 172, 345)
  AddGadgetItem(#Tree_Select, -1, "Grundeinstellungen")
  AddGadgetItem(#Tree_Select, -1, "Seite 1", 0, 1)
  ContainerGadget(#Container_Main, 186, 5, 409, 345, #PB_Container_Raised)
  CloseGadgetList()
  SplitterGadget(#Splitter, 5, 5, 590, 345, #Tree_Select, #Container_Main, #PB_Splitter_Vertical)
  SetGadgetState(#Splitter, 172)
  ButtonGadget(#Button_OK, 360, 360, 90, 25, "OK")
  ButtonGadget(#Button_Cancel, 465, 360, 90, 25, "Abbrechen")
EndProcedure

Procedure ResizeGadgetsFormSettings()
  Protected WindowWidth, WindowHeight
  WindowWidth = WindowWidth(#FormSettings)
  WindowHeight = WindowHeight(#FormSettings)
  ResizeGadget(#Splitter, 5, 5, WindowWidth - 10, WindowHeight - 55)
  ResizeGadget(#Button_OK, WindowWidth - 240, WindowHeight - 40, 90, 25)
  ResizeGadget(#Button_Cancel, WindowWidth - 135, WindowHeight - 40, 90, 25)
EndProcedure

Procedure FormSettings_Events(event)
  Select event
    Case #PB_Event_SizeWindow
      ResizeGadgetsFormSettings()
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure

Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SplitterGadget im FormDesigner friert IDE ein

Beitrag von Kiffi »

Habe dasselbe Problem (B15)

http://www.purebasic.fr/english/viewtop ... 22&t=56326

Grüße ... Kiffi
a²+b²=mc²
matbal
Beiträge: 261
Registriert: 30.03.2011 20:53

Re: SplitterGadget im FormDesigner friert IDE ein

Beitrag von matbal »

Mit PB5.20b18 friert die IDE nicht mehr ein. Die Form, die Kiffi im englischen Forum gepostet hat, wird korrekt geladen und im Designer angezeigt.

Wenn man die Form aber in anderer Reihenfolge erstellt (Button0 + Button1 + Splitter0 + Button2 + Splitter1) wird die Form nicht korrekt eingeladen. Sie wird falsch angezeigt.

Code: Alles auswählen

Enumeration FormWindow
  #Window_1
EndEnumeration

Enumeration FormGadget
  #Button_0
  #Button_1
  #Splitter_0
  #Button_2
  #Splitter_1
EndEnumeration


Procedure OpenWindow_1(x = 0, y = 0, width = 325, height = 205)
  OpenWindow(#Window_1, x, y, width, height, "", #PB_Window_SystemMenu)
  ButtonGadget(#Button_0, 10, 10, 150, 80, "Button 0")
  ButtonGadget(#Button_1, 10, 99, 150, 91, "Button 1")
  SplitterGadget(#Splitter_0, 10, 10, 150, 180, #Button_0, #Button_1)
  SetGadgetState(#Splitter_0, 80)
  ButtonGadget(#Button_2, 169, 10, 146, 180, "Button 2")
  SplitterGadget(#Splitter_1, 10, 10, 305, 180, #Splitter_0, #Button_2, #PB_Splitter_Vertical)
  SetGadgetState(#Splitter_1, 150)
EndProcedure

Procedure Window_1_Events(event)
  Select event
    Case #PB_Event_CloseWindow
      ProcedureReturn #False

    Case #PB_Event_Menu
      Select EventMenu()
      EndSelect

    Case #PB_Event_Gadget
      Select EventGadget()
      EndSelect
  EndSelect
  ProcedureReturn #True
EndProcedure
Offenbar gibt es immer noch ein Problem mit Gadgets, die nach dem Splitter eingefügt werden. Im den Eigenschaften-Fenster stimmt die Baumstruktur der Gadgets nicht mehr. Für Button2 und Spltter1 ist Splitter0 als "Ubergeordnert" eingetragen.

Hier sind zwei Screenshots. 1. Editor nach dem Erstellen der Form und 2. nach dem erneuten Öffnen der Form.
form_erstellt.png
form_geoeffnet.png
Antworten