Projekt NDW Near Delphi Work
Verfasst: 06.07.2013 12:21
Wollte euch kurz mein aktuelles PureBasic-Projekt vorstellen.
Da mein Ideal PureBasic mit dem Komfort von Delphi oder Gambas wäre, habe ich mir mal Gedanken gemacht, wie man den FormDesigner mit dem Programmcode verbinden kann und zwar automatisch.
Wer weiterhin alles eintippen will kann/soll das tun. Mit NDW gibt es allerdings neben VisualGeneratDeluxe nun eine Möglichkeit wie Standardarbeiten automatisch erledigt werden können und die Navigation zur Procedure eines Buttons automatisch ablaufen kann.
Das Progrämmchen habe ich als PB-Anfänger geschrieben und daher ist es mit Sicherheit noch verbesserungsfähig!
Auch deshalb stelle ich es hier ein!
NDW einrichten:
Es wird zunächst einmal für das System (Linux oder Windows) kompiliert und dann als Werkzeug konfiguriert:
- Argumente: %FILE %WORD
- Warten bis zum Beenden des Werkzeugs
- Tastenkürzel Alt + G
- Tastenkürzel für "Form -> Ansicht umschalten" Alt + F
- Tastenkürzel für "Datei -> neu laden" Crtl + Alt + G
Arbeit mit NDW:
- neues Formular erzeugen und abspeichern (z.B. prog1.pbf)
- z.B. Button per drag and drop einfügen
- Beschriftung eintragen z.B. "testbutton"
- Ereignisprozedure eintragen z.B. "testbutton"
- mit Alt + F in die Codeansicht wechseln und "testbutton" markieren
- mit Alt + G wird nun prog1.pb erzeugt, der Standardcode sowie IncludeFile "prog1.pbf" und die "Procedure testbutton(EventType)" eingefügt und der Cursor befindet sich direkt in der noch leeren Procedure
- gewünschte Funktion eintippen z.B. "End"
- abspeichern. Damit ist ein Primitivprogramm erzeugt
Jetzt können neue Elemente auf die gleiche Weise eingefügt werden, wobei die Proceduren dann ans Ende des Progs angehängt werden und ebenfalls der Cursor an diese Stelle positioniert wird damit der Code eingegeben werden kann.
Wenn das .pb bereits geladen ist muss zum "neu laden" einmal Ctrl + Alt + G gedrückt werden!!!
Was mir noch nicht gefällt sind die Tastenkürzel!
Ich würde gerne nach dem Eingeben der Procedurebezeichnung im Ereignis-Procedure-Feld mit einem Doppelklick auf die Bezeichnung mein NDW starten! Dann würden die Kürzel Alt + F und Alt + G komplett weg fallen!
Oder wenn es wenigstens möglich wäre nicht mit einem Doppelklick sondern mit Alt + G zu starten.
Geht leider an der Stelle nicht, weil der Text aus dem Ereignisfeld wohl nicht nach %WORD übernommen wird!
Weiterhin bleibt das Problem des "neu ladens" wenn bereits das .pb geladen ist.
Man könnte in den Editor-Einstellungen "offene Dateien auf Änderungen auf Disk überwachen" aktivieren.
Dann muss man aber jedes Mal bestätigen und das nervt auch!
Vielleicht besteht ja hier auch noch die Möglichkeit bei den Editoreinstellungen noch einen Parameter einzubauen: "offene Dateien bei Änderungen automatisch laden" einzubauen? Sollte nicht so ein Problem sein da es ja in der aktuellen Funktion schon enthalten ist!
Bin schon auf eure Meinung gespannt!
Viel Spaß beim Testen!
Da mein Ideal PureBasic mit dem Komfort von Delphi oder Gambas wäre, habe ich mir mal Gedanken gemacht, wie man den FormDesigner mit dem Programmcode verbinden kann und zwar automatisch.
Wer weiterhin alles eintippen will kann/soll das tun. Mit NDW gibt es allerdings neben VisualGeneratDeluxe nun eine Möglichkeit wie Standardarbeiten automatisch erledigt werden können und die Navigation zur Procedure eines Buttons automatisch ablaufen kann.
Das Progrämmchen habe ich als PB-Anfänger geschrieben und daher ist es mit Sicherheit noch verbesserungsfähig!
Auch deshalb stelle ich es hier ein!
NDW einrichten:
Es wird zunächst einmal für das System (Linux oder Windows) kompiliert und dann als Werkzeug konfiguriert:
- Argumente: %FILE %WORD
- Warten bis zum Beenden des Werkzeugs
- Tastenkürzel Alt + G
- Tastenkürzel für "Form -> Ansicht umschalten" Alt + F
- Tastenkürzel für "Datei -> neu laden" Crtl + Alt + G
Arbeit mit NDW:
- neues Formular erzeugen und abspeichern (z.B. prog1.pbf)
- z.B. Button per drag and drop einfügen
- Beschriftung eintragen z.B. "testbutton"
- Ereignisprozedure eintragen z.B. "testbutton"
- mit Alt + F in die Codeansicht wechseln und "testbutton" markieren
- mit Alt + G wird nun prog1.pb erzeugt, der Standardcode sowie IncludeFile "prog1.pbf" und die "Procedure testbutton(EventType)" eingefügt und der Cursor befindet sich direkt in der noch leeren Procedure
- gewünschte Funktion eintippen z.B. "End"
- abspeichern. Damit ist ein Primitivprogramm erzeugt
Jetzt können neue Elemente auf die gleiche Weise eingefügt werden, wobei die Proceduren dann ans Ende des Progs angehängt werden und ebenfalls der Cursor an diese Stelle positioniert wird damit der Code eingegeben werden kann.
Wenn das .pb bereits geladen ist muss zum "neu laden" einmal Ctrl + Alt + G gedrückt werden!!!
Was mir noch nicht gefällt sind die Tastenkürzel!
Ich würde gerne nach dem Eingeben der Procedurebezeichnung im Ereignis-Procedure-Feld mit einem Doppelklick auf die Bezeichnung mein NDW starten! Dann würden die Kürzel Alt + F und Alt + G komplett weg fallen!
Oder wenn es wenigstens möglich wäre nicht mit einem Doppelklick sondern mit Alt + G zu starten.
Geht leider an der Stelle nicht, weil der Text aus dem Ereignisfeld wohl nicht nach %WORD übernommen wird!
Weiterhin bleibt das Problem des "neu ladens" wenn bereits das .pb geladen ist.
Man könnte in den Editor-Einstellungen "offene Dateien auf Änderungen auf Disk überwachen" aktivieren.
Dann muss man aber jedes Mal bestätigen und das nervt auch!
Vielleicht besteht ja hier auch noch die Möglichkeit bei den Editoreinstellungen noch einen Parameter einzubauen: "offene Dateien bei Änderungen automatisch laden" einzubauen? Sollte nicht so ein Problem sein da es ja in der aktuellen Funktion schon enthalten ist!
Bin schon auf eure Meinung gespannt!
Viel Spaß beim Testen!
Code: Alles auswählen
EnableExplicit
;##################################################################
;## Programm: NDW (Near Delphi Work) ##
;## Erzeugung einer neuen Codedatei aus einer pbf - Datei ##
;## automatische Navigation zur Procedure eines pbf-Elements ##
;## ##
;## schnellere Programmentwicklung und einfachere Navigation ! ##
;## Version 1.0 von W.Schmidt ##
;## Start als externes Werkzeug mit Aufrufparameter: %FILE %WORD ##
;## Die Parameter genau in dieser Reihenfolge angeben!! ##
;## Den neuen Procedurnamen im pbf markieren und NDW starten ##
;##################################################################
Define event, EventGadget, EventType, EventMenu, EventWindow, prglauf
Define progverz$, proz$, pb_path$, pb_name$
Global NewList Dateinhalt.s()
progverz$=ProgramParameter() ;lese ersten übergebenen Parameter
proz$=ProgramParameter() ;lese den zweiten Parameter
;progverz$ = "/mnt/sda1/PureBasic/turbo/testprog.pbf" ;########## Linux-test
;progverz$ = "C:\PureBasic\turbo\testprog.pbf" ;########## windows-test
;proz$="taste_1" ;########## test
pb_path$=GetPathPart(progverz$) ;Path der *.pbf ermitteln
pb_name$=ReplaceString(GetFilePart(progverz$),".pbf","") ;name ermitteln und Endung .pbf löschen
;prüft ob string_datei (.pb) vorhanden ist sonst erzeugen und Standardkopf einfügen sowie die leere Procedure
;------------------------------------------------------------------------------------------------------------
Procedure lese_pbf(string_path$,string_datei$,string_proz$)
Define string_hilf$, zeilennr, gefundennr, i
#DATEI_REPORT = 1
If FileSize(string_path$ + string_datei$ + ".pb") = -1 ;prüfen ob Datei.pb vorhanden ist -> nicht vorhanden
;Datei.pb nicht vorhanden, wird neu erzeugt!
If CreateFile(#DATEI_REPORT, string_path$ + string_datei$ + ".pb")
WriteStringN(#DATEI_REPORT, "EnableExplicit")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, "IncludeFile " + Chr(34) + string_datei$ + ".pbf" + Chr(34))
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, "Define event, EventGadget, EventType, EventMenu, EventWindow, prglauf")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, "OpenWindow_0()")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, "; ----- hier etwas das sofort beim Start erledigt werden soll eintragen")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, "Repeat")
WriteStringN(#DATEI_REPORT, " Event = WaitWindowEvent()")
WriteStringN(#DATEI_REPORT, " EventGadget = EventGadget()")
WriteStringN(#DATEI_REPORT, " EventType = EventType()")
WriteStringN(#DATEI_REPORT, " EventMenu = EventMenu()")
WriteStringN(#DATEI_REPORT, " EventWindow = EventWindow()")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, " prglauf=Window_0_Events(Event)")
WriteStringN(#DATEI_REPORT, "Until prglauf=#False")
WriteStringN(#DATEI_REPORT, "End")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, ";-------- ab hier die Proceduren für Buttons, etc. -----------------")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, "Procedure " + string_proz$ +"(EventType)")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, "EndProcedure")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, " ")
WriteStringN(#DATEI_REPORT, "; IDE Options = PureBasic 5.11 (Linux - x86)")
WriteStringN(#DATEI_REPORT, "; CursorPosition = 24")
WriteStringN(#DATEI_REPORT, "; FirstLine = 1")
WriteStringN(#DATEI_REPORT, "; Folding = -")
WriteStringN(#DATEI_REPORT, "; EnableThread")
WriteStringN(#DATEI_REPORT, "; EnableXP")
WriteStringN(#DATEI_REPORT, "; Executable = " + string_datei$)
CloseFile(#DATEI_REPORT)
EndIf
Else
zeilennr=0 ;Datei.pb ist vorhanden
gefundennr=0
If ReadFile(#DATEI_REPORT, string_path$ + string_datei$ + ".pb")
While Eof(#DATEI_REPORT) = #False
AddElement(Dateinhalt())
zeilennr = zeilennr + 1
string_hilf$ = ReadString(#DATEI_REPORT)
If FindString(string_hilf$,"Procedure " + string_proz$) > 0 ;Procedure wurde bei Gefundennr gefunden
gefundennr=zeilennr
EndIf
Dateinhalt() = string_hilf$
Wend
CloseFile(#DATEI_REPORT)
EndIf
If gefundennr = 0 ;----------------------------Procedure ist noch nicht vorhanden
;---------------- neue Procedure am Ende des Prog einbauen
LastElement(Dateinhalt())
PreviousElement(Dateinhalt())
Repeat
PreviousElement(Dateinhalt())
string_hilf$ = Trim(Dateinhalt())
Until string_hilf$= ""
InsertElement(Dateinhalt())
Dateinhalt() = " "
InsertElement(Dateinhalt())
Dateinhalt() = "EndProcedure"
InsertElement(Dateinhalt())
Dateinhalt() = " "
InsertElement(Dateinhalt())
Dateinhalt() = "Procedure " + string_proz$ +"(EventType)"
zeilennr=0 ;Datei.pb ist vorhanden
gefundennr=0
ForEach Dateinhalt()
zeilennr = zeilennr +1
If FindString(Dateinhalt(),"Procedure " + string_proz$) > 0 ;Procedure wurde bei Gefundennr gefunden
gefundennr=zeilennr
EndIf
Next
EndIf
If CreateFile(#DATEI_REPORT, string_path$ + string_datei$ + ".pb") ;neue Cursorposition abspeichern
ForEach Dateinhalt()
If FindString(Dateinhalt(),"; CursorPosition =") = 1
Dateinhalt() = "; CursorPosition = " + Str(gefundennr )
EndIf
If FindString(Dateinhalt(),"; FirstLine =") = 1
Dateinhalt() = "; FirstLine = 1"
EndIf
WriteStringN(#DATEI_REPORT, dateinhalt())
Next
CloseFile(#DATEI_REPORT)
EndIf
EndIf
EndProcedure
;------------------------------------------------------------------
lese_pbf(pb_path$,pb_name$,proz$)
If FindString(pb_path$,"\") > 0 ;Test ob Windows oder Linux
RunProgram(#PB_Compiler_Home + "PureBasic.exe",pb_path$ + pb_name$ + ".pb","")
Else
RunProgram(#PB_Compiler_Home + "compilers/purebasic",pb_path$ + pb_name$ + ".pb","")
EndIf
End