Umgang mit pureFORM

Anfängerfragen zum Programmieren mit PureBasic.
moin
Beiträge: 59
Registriert: 03.07.2007 08:38
Wohnort: Norddeutschland

Umgang mit pureFORM

Beitrag von moin »

Hallo,
seit langer Zeit versuch ich mich mal wieder mit pureBasic und pureForm.

Wie bau ich sinnvoll den Code in das Programm ein, damit ich auch in einem späteren Stadium die Programmoberfläche mit pureForm überarbeiten kann.

Hier mein Entwurf der Programmoberfläche mit pureForm. PureColor wird benötigt.

Habt ihr vielleicht ein Beispielprojekt, an dem ich sehen kann wie mit eigenem Code umgegangen wird?

Gruß Jörn

Code: Alles auswählen


;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Status bars
Enumeration
  #StatusBar_Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Text_0
  #String_1
  #Button_2
  #Text_3
  #Text_4
  #String_5
  #Button_6
  #Frame3D_7
  #Frame3D_8
  #Button_9
  #Button_10
  #Button_11
EndEnumeration
;}
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
;}
Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 413, 8, 556, 478, "VNWA  --  Excel-Datei_Erzeuger  für  das  CrystalTest-Tool  Ver001", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    If CreateStatusBar(#StatusBar_Window_0, WindowID(#Window_0))
      AddStatusBarField(70)
      StatusBarText(#StatusBar_Window_0, 0, "Dateiname:")
      AddStatusBarField(200)
      StatusBarText(#StatusBar_Window_0, 1, "NameDerDatei")
    EndIf
    TextGadget(#Text_0, 300, 0, 166, 40, "Zuerst den Dateinamen festlegen. Erst dann können Daten übernommen werden!")
    StringGadget(#String_1, 15, 5, 235, 20, "NameDerDatei")
    ButtonGadget(#Button_2, 15, 30, 235, 20, "Dateiname übernehmen")
    TextGadget(#Text_3, 295, 60, 250, 87, "Nachdem die Quartdaten mit dem Crystal-Tool ermittelt worden sind, können sie in eine Exceldatei übernommen werden. Die Daten werden flüchtig gespeichert. Wenn die Messungen beendet worden sind, kann eine .xls-Datei erzeigt werden.")
    TextGadget(#Text_4, 15, 80, 98, 29, "Name des Quarzes (nur Integer-Zahlen)")
    StringGadget(#String_5, 15, 115, 95, 20, "Gadget_5")
    ButtonGadget(#Button_6, 125, 85, 130, 50, "Quarz-Daten übernehmen")
    Frame3DGadget(#Frame3D_7, 15, 180, 235, 125, "Letzte Messung")
    Frame3DGadget(#Frame3D_8, 15, 140, 236, 35, "Info")
    ButtonGadget(#Button_9, 15, 310, 235, 20, "Letzte Messung löschen")
    ButtonGadget(#Button_10, 15, 375, 235, 25, "Excel-Datei erzeugen")
    ButtonGadget(#Button_11, 15, 430, 235, 26, "neue Excel-Datei erzeugen und die alten Daten löschen", #PB_Button_MultiLine)
    ; Gadget Colors
    PureCOLOR_SetButtonColor(#Button_6, #PureCOLOR_SystemColor, $2C5FD, #PureCOLOR_SystemColor, $4080FF)
    PureCOLOR_SetButtonColor(#Button_10, #PureCOLOR_SystemColor, $2C5FD, #PureCOLOR_SystemColor, $4080FF)
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Event = WaitWindowEvent()
  Select Event
    ; ///////////////////
    Case #PB_Event_Gadget
      EventGadget = EventGadget()
      EventType = EventType()
      If EventGadget = #Text_0
      ElseIf EventGadget = #String_1
      ElseIf EventGadget = #Button_2
      ElseIf EventGadget = #Text_3
      ElseIf EventGadget = #Text_4
      ElseIf EventGadget = #String_5
      ElseIf EventGadget = #Button_6
      ElseIf EventGadget = #Frame3D_7
      ElseIf EventGadget = #Frame3D_8
      ElseIf EventGadget = #Button_9
      ElseIf EventGadget = #Button_10
      ElseIf EventGadget = #Button_11
      EndIf
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
ForEver
;
;}


Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

Beitrag von Fluid Byte »

Weder PureForm noch PureColor sind Bestandteile von PureBasic. Die Wenigsten haben überhaupt eins davon installiert, kann man also nicht voraussetzten. Guckt mal im Englischen Forum, dort gibts extra ein Forum für gnozal's Tools.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
Captn. Jinguji
Beiträge: 397
Registriert: 07.06.2005 19:47
Computerausstattung: PB 4.73x64, i7, WIN 10x64, ATI NVidia RTX 2070
Wohnort: Witten

Beitrag von Captn. Jinguji »

An sich beherrscht PureForm schon einigermassen das Einmischen eigenen Codes, hat dabei aber so seine Eigenheiten (dafür empfiehlt sich wirklich, VORHER das englische Forum zu durchstöbern); ansonsten musst Du halt bloss im Tab "Designer 2" "Add Code Tags ...." markieren.

Eine rustikale, aber sichere Methode ist:
Normalerweise die Eventloop Generation ABSCHALTEN, das generierte File einfach nur per (X)IncludeFile einbinden, Größen-, Positionsänderungen etc. werden dann in Deinem Programm richtig berücksichtigt.

Am Anfang und bei grundsätzlichen Hinzufügen/Entfernen von Gadgets die Eventloop generieren lassen, ausschneiden (!) , diese ins Hauptprogramm einfügen und entweder den eingefügten Code selbst wieder dazwischen kopieren oder, wenn nur ein Gadget hinzugekommen ist, die entsprechende CASE-Zeile in Deine vorhandene Eventloop einkopieren und dann die entsprechende Behandlung coden.

Nicht vergessen, danach wieder die Eventloopgenerierung abzuschalten,
sonst wundert man sich beim nächsten Programmlauf etwas ;)))
Ist das Kunst hier, oder kann das weg ?
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Beitrag von Kurzer »

Japp, so mache ich das auch.
Ich lasse nur die Fensterproceduren von PureFORM generieren und binde den Code per IncludeFile in meinen Source ein. Den Eventloop baue ich per Hand.

Vom workflow her geht das dann recht fix, weil man bei Änderungen nur kurz "Update code" in PureFORM wählen muß und dann auch schon sein Programm in PB compilieren kann.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.12 x64, OS: Win 11 24H2 x64, Desktopscaling: 150%, CPU: I7 12700 H, RAM: 32 GB, GPU: Intel(R) Iris(R) Xe Graphics | NVIDIA GeForce RTX 3070
Useralter in 2025: 57 Jahre.
Antworten