Der Editor birgt noch einige Funktionen, die so auf den ersten Blick nicht immer ersichtlich sind.
Da ich das Projekt ernst nehme. Brauche ich auch eine ToDo List und eine CodeInfo . Erstes
damit ich meine Ideen zum Code niederschreiben kann, letzteres damit ich weiss, was ich vergessen könnte.
Ich benutze dazu eine .pbi. Und die Strukturmöglichkeiten, die der Editor bietet.
Die Prozedur Liste rechts, kann auch dafür verwendet werden. Neben den Procedure Namen, die dort aufgelistet sind.
Gibt es auch Formatierungsmöglichkeiten.
";-" Erzeugt dort eine Zeile mit Kommentar Code. Diese kann man prima benutzen um sich eine Interaktive ToDo liste
zu bauen. Hier mal meine Aktuelle.
Code: Alles auswählen
;{ TODO Grundprogramm
;- TUDO Grundprogramm
;
; Bei Desktop Scalierung > 100% funktioniert OpenScreen nicht richtig
; Wird erstmal abgefangen. Die Abfrage kann mit SY_CheckDeskTopSkalingOnOff umgangen werden
; Fenster öffnen ausserhalb des sichbereiches.
; [Done] Fenster wird ausserhalb, unsichtbar erzeugt. ToolWindor ohne TaskIcon.
; Dann in den Sichtbaren Bereich geschoben und eingeschaltet. Es hat sich herausgestellt
; das Positinen in X/Y Grösser 10000 + sowie -, zu Funktions störungen des Event Handling führt.
; Es braucht eine Windows Komforme Event behandlug
; [Done] Standart Eventschleife mit Exit bearbeitung. Event Loop mit 10 MS Delay.
; Sowie ESC Tasten abfrage.
; Das Fenster wird normalerweise ausserhalb des sichtbaren Bereiches sein. Ich brauche eine TastenKombi
; [Done] Mit GetAsyncKey() werden die tasten CTRL+F12 abgefragt. Das funktioniert auch wenn das Fenster
; nicht den Fokus hat.
; [Done] WindowsCallBack um Postmassage zu empfangen SetWindowCallback(@SY_MyWindowCallback())
; [Done] Postmassage Emfangen und an die Mainschleife weitergeben . !! Zur Zeit keine Funktion
;-> Ich brauch eine Komunikation zwischen den Processen, Damit das MultiProcess Konstruckt funkioniert.
; [Done] Parameter bei Aufruf empfangen, Damit der Prozess weis wer ihn gestartet hat
; [Done] Nach dem Namen des Startprogramms suche. SY_FindWindow(WindowText.s)
;- [] Senden einer Antwort an den Aufrufenden Process
;- [] Antwort eines gestarteten Process über Event entgegennehmen
;- [] Senden und Empfangen von Massage zwischen den Prozessen
;- [] Verwenden von SharedMem() für grössere Datenmengen. Das öffen für den Erzeugenden Prozess
; Funktioniert schon, es gab einen Namens Space Conflickt mit CreateMutex_()
;- [] Auswerten der Massage in der Main Event Schleife
;-> Wenn das Fenster mit der Mouse Verschoben wird. Bleibt die Mainschleife stehe. Das ist seid W7 so.
;- [] Meine lösung zur Zeit. Das fenster wird ausserhalb des Sichbaren Bereiches verschoben.
; so kann es nicht angeklickt werden. Fenster und die 3DEngine müssen im HauptProzess geöffnet werden.
; Da bedarf es einer komplett anderen herangehensweise.
;-> Ich brauche eine eigene ErrorMassag() Funktion. Die von Jedem Prozess benutzt werden kann
; [Done] Als Inklude Ausfüren
; [Done] Lock/Unlock für schreibzugriff
; [Done] Alle nötigen angaben wie ZeilenNumemr, ProzedureName, ProgrammName, InkfileName, Zeit und Datums Angaben
; ProzessCompileCounter
; [Done] Ausgabe im Debugger
; [Done] Ausgabe als LogFile
;- [] Postmassage an Debagger Prozess (Vorbereitet)
;- [] Ausgabe an einen Debagger im WLan innerhalb des eigenen Netzwerkes.
; ich möchte verhindern das das Programm merfach läuft.
; [Done] eine einfache Funktion SY_ProgramExists(), die einen Mutex verwendet.
; Bei Programmstart durch RUN() können Paramerter übergeben werden.
; [Done] finden sich als Sring in (SY_PPV1.s)
; Ich brauche die Angaben zur Monitor Auflösung etc
; [Done] (SY_DTSX), (SY_DTSY), (SY_Width), (SY_Height), (SY_Depth), (SY_RefreshRate)
; Ich brauche einen Ort wo ich Programm Variablen Extern Speichern kann
; [Done] Laden von Variablen, Speicher von Variablen, mit angabe einens Defould Wertes
; wenn die Variablen nicht vorhanden ist. (SY_PrefsFilePfad.s)
; Ich brauche einen CompilerCounter um die Versionsnummer zu speichern
; [Done] Abschliesend wird ein Prefs Variable verwendt (SY_CompilerCount.s)
; Da die Zahlen wenn sie in einen String gewandelt werden ein undefinierte Länge haben. Brauche ich eine Funktion.
; [Done] Das macht dies Hier SY_FormatNumber() Die Stringlänge eine Zahl kann angepast werden
; Die Mainschleife muss man überspringen können um Init zu testen
; [Done] Der Schalter (SY_InitBreak), "inc\Exit.pbi" wird berücksichtigt.
;-> SourceCode Archivierung mit einbinden von Process Daten. Via "Grundprogramm_BackUpList.txt"
; [Done] Zip Archivirung Aktiviert durch (SY_UseZip)
; [Done] ArchivePfad wälbar mit (SY_ArchivePfad.s)
; [Done] Die .pbi files aus der Data Liste entnehmen
;- [] Prozess eigene Daten mit archivieren
;-> Das schreiben der Prefenrence kann von anderen Prozessen gleichzeitig geschehen.
; [Done] Lock/Unlock Mutex bei Schreibzugriffen
;- [] Globalen Mutex verwenden CreateMutex_()
;-> Versions Kontrolle, damit die Prozesse erkennen, wenn sich das Grundprogramm geendert hat.
; []
;-> DebugLog() , eine erweiterte Debugausgabe
; []
;-> Process Komunikation via PostMassage ausarbeiten, daten und Empfangs Strukturen festlegen damit alle Prozesse sie Verwenden können.
; []
;
;-> Ein Tool bauen um Strings zusammen zu basteln
; []
;-> Ereignis Verarbeitung Window hat den Fokus nicht
;- [] Sound abschalten
;- [] Mouse position Merken und Bewegung in Game unterbinden
;- [] Einen Idle Modus implementieren.
; Prozess Code muss in das Grundprogramm eingebunden werden können
; [Done] Include Dateien für die einzelnen Code Abschnitte erzeugen und in ein inc\ verzeichniss einlagern.
; [Done] Code Archivierung entsprechend anpassen.
; Programm Teile wie ErroMassage für alle Prozessoren als .pbi einbinden
; [Done] Self Run abfrage mithilfe von #PB_Compiler_IsIncludeFile, erzeugt eine ErroMassage() wenn das Programm ohne
; Grundprogramm leuft.
; Ich brauch ein Log File um die ErrorMassage zu speichern
; [Done] ErrorMassage um diverse Funktionen erweitert.
; ProgrammName_ErrorLog.txt Erzeugen und schreiben
; Parameter für use END
;-> Bei start des Grundprogrammes, muss geprüft werden ob die anderen Processe, Compiliert werden müssen. Und dann mit RUN Starten
; [Done] FileDaten holen in die Erstellung oder Modivizierung zu prüfen.
; [Done] Process Namen als Liste in segment Data / SY_IncProzessStartName:
; [Done] Liste abarbeiten und Prozesse Starten
; [Done] Der Compiler output braucht eine Ausgabe, Der einfache Aufruf wurde ersetzt
;- [] Es braucht eine Schalter Variable, um den Lade und Start Mechanismuss für das MultiProzessing abzuschalten.
;
; Hirzu gab es massive Probleme mit dem Compiler. Die Konstanten die über die IDE deviniert werden
; Existiren nicht, wenn der Compiler direckt verwendet wird. Nachstehender Code
; Beseitigt das Problem. Defined() gibt dabei aus, ob eine Konstate bereits definiert ist.
;
; CompilerIf Not Defined(PB_Editor_CreateExecutable, #PB_Constant)
; #PB_Editor_CreateExecutable = 0
; CompilerEndIf
;-> Ein Anleitung verfassen, damit ich weis wie man aus einem Grundprogramm ein Prozess Program vorbereite.
; [Done] Vorgehen getesttet und Schriftlich niedergelegt. Alle Daten befinden sich in "Anleitung, Ein Projekt anlegen\"
; [Done] Bilder der Einstllungen Für den Compiler und Projekt Manager
;- [] Dockfile angefertigt und ausgearbeitet
; Ich benötigr mer infos im Header Teile jeden einzelnes Codes
; [Done] Code Header ausgearbeitet und alle Includes angepast
;-> Infos zum Code und den Aufrufen und alle Infos muss ich irgendwo sammeln
; [Done] CodeInfo.pbi als Include dasselber nicht lauffähig ist Vorbereitet.
;- [] Diese Daten werden wärend der gesamten Projekt Phase erweitert.
; Ich könnte sichtbare Marker gebrauchen. Um Positionen im Code zu kenzeichen
; [Done] mit ;- läst siech im Prozedure Brouser eine Markirung anzeigen, Die man dann anspringen Kann.
; Zusätzlich kann man MArker setzten und löschen zu denen man hinspringe kann. Die Taste CTRL und F2
; setzt eine Sprungmarke, nur F2 springt durch alle Marker.
; Der Code beginnt langsam unübersichtlich zu werden.
; [Done] Es gibt die möglichkeit Inkludes zu verwenden, Besonderst interesant ist dabei XInclude
; [Done] Mit den zeichen ;{ ;} lassen sich Blöcke zusammen falten.
;-> Ich brauche unter der MainSchleife eine Ende Sektion. Um das Programm ordentlch schliessen zu können
; [Done] Grundlagen zum Korekten Beönden eingefürt. Auch die inc\ um Exit.pbi erweitert.
; [Done] ScharedMem muss beändet werden
;- [] Schlieseen des CallBacks.
; [Done] Fenster Schliessen
; [Done] Speicher der Preverences eingeführt.
; Ich brauche es etwas übersichtlich. ich finde ja keine Varible mer.
; [Done] Veränderbare Variablen zusammengefast
; [Done] Funktions Declarationen zusammengefast
; [Done] Konstanten zusammen gefast
; [Done] Programm funktions Variabnlen zusammengefast.
;-> Ogre kann bei Dateipfaden nicht mit Umlauten umgehen
; [Done] SY_CheckPfadUmlaute(pfad.s) mit Requester und Rückgabe Wert
;- [] Die Anfrage kann über PostMassage erfolgen.
;-> Wenn das Programm weggetabt wird. Also nicht mer den Focus hat. Sollten alle Resourcen Frei gegeben werden
;- [] Freigabe und neu laden der Recourcen in Idle Mode
;-> Bei erstellung eines neuen Projektes ware es Hilfreich den Projektnahmen überall wo es relevant ist zu ändern
;- [] PfadRequester zum setzen der nötigen Pfade
;- [] Eingabe des Projekt namen
;- [] Erzeugen der Ziel Direktory
;- [] Copieren aller daten
;- [] Umbenennen aller Projekt files
;- [] Umbennen aller Variablen und Komentare
;-> Der Name für eine Projekt Vorlage kann durchaus XXXXXXX sein. Das würde verdeutlichen das es ein Dammy ist
;- [] Test ob das so überhaupt Funktioniert.
;-> ich brauch ein Funktions Diagramm das das Zusammenspiel der Prozesse zeigen kann
;- [] In PRESENTATION Angefangen
;-> Ich brauche Asynkrones Laden von Daten via Thread
;- [] Ein lade thread erstellen der Musikläd
;- [] Durch drücken der taste F1 wird der Thread gestartet.
;- [] im Grundprogramm leift ein Ayax Spinner
;- [] Massage system so anlegen das darüber thread nachrichten emfpangen kann.
;- []
; Die BackUp Funktion mus so Umgebaut werden. Das das BackUp immer im Main Verzeichniss erfolgd. Und auf
; wunsch auch in einem Separaten Pfad.
; [Done] SY_ArchivePfad.s = "";"D:\SY_Archive\" ; Wenn kein Pfad angegeben ist. Wird vom Defould ausgegangen
; Verzeichniss strucktur anpassen, da bei mereren Prozesse es sehr schnell unübersichtlich wird
; [Done] Verzeichniss STrucktur ändern
; [Done] Alle Pfad anpassen , auch im ErrorMassage.pbi
;- [] Die Fenster der Processe müssen sich untereinander aufbauen.
;-> Erweiterung der ErrorMassage Funktion um die Möglichkeit dies über das WLan an einen Client zu senden
; [Done] Netzwerk Server/Client funktionalität
; [Done] Das suchen nach einem Server muss über eine Thread erfolgen
;- [] Prozess Programm zum loggen von daten die über WLan kommen
;-> Debug Ausgabe muss aus dem orginal Debug Fenster raus.
; [Done] thread sicher aufbauen , da diese auch von ander threads benutzt wird.
;- [] Erweitern auf die Möglichkeit, die Ausgabe auf den WLan Debugger umzuleiten.
;-> Netzwerk funktionalität einbringen.
; [Done] ReseveData() liest nur die rohen daten. Es kann dazu kommen das es mer als eine Nachricht enthält.
; Wenn zu schnell daten reinkommen und Client seitig die bearbeitung zu lange dauert.
; [Done] Die zu sendenden Strings müssen darauf geprüft werden, ob sie Trenn und Ende Token enthalten []{}
; [Done] Variablen zur festlegung, No/Server/Client bei start
; [done] Daten Struckture für die Client liste anlegen und Verwalten , Add, Suchen, löschen
; [done] Verwendung von Mutex kontrolieren
; [Done] Automatisch nach neuen Server suchen wenn die Verbindung abbricht, Als Thread
; [Done] Anfragen Tokens erstellen #SY_COM_ReseveName = "ReseveName" etc SetName, Ping, RePing
; [Done] Der Name der Client kann mit ReseveName und SetName geändert werden
;- [] Das gleiche für den Server ( Wird aber nicht benötigt zur Zeit, Da es imemr nur einen gibt
; [Done] Setze ein Ping ab mit anzeige der MS durch drücken von Return
; [Done] Diskopneckt und Reconekt für Server und Client
; [Done] Bei Drücken von CTRL und F11 wird ein Consolen Fenster geöffnet. und die Clientliste ausgegeben
; Exit mit Return
; [Done] Consolen Ausgabe muss in einem Thread sein.
; [Done] SY_RunUsServer hat über die Preferenzes priorität , dort kann eingestellt werden, als was der Prozess startet
; Durch die umstruckturierung hat sich SY_RunUsServer = 0 für den Start erübrigt
; [DOne] Test für, Connect Client Server | diskonect | reconect | 2 echte rechner im WLan | Ping beidseitig
; [Done] ToTu und CodeInfo anpassen
; [Done] Die Buffer grösse muss sich einstellen lassen
; [Done] Bei überschreitung der Buffer grösse von ReceveData, muss eine Meldung ausgegene werden.
; [Done] Das Grundprogramm über ServerMSG.pbi ClientMSG.pbi inkludes den Prozessen bereitstellen
;-> Dienstprogramme
;- [] Code Autostarter. Wenn sich der Code auf der Clientseite ändert. Muss der Process sich beänden und neustarten
;- [] Code Copy. Wenn der ClientCode auf der Srever Seite sich geändert hat. Muss dieser ins éffentliche VErzeichniss kopiert werden.
; Damit Client seitig diese änderung erfast werden kann. Und der Code neu gestartet.
; [Done] Um das Grundprogramm für Prozesse blank nutzbar zu machen, brauche ich einen Kontrolle darüber. Die #SY_SelfName = "Grundprogramm" kann dazu genutzt werden
; um zu prüfen of der Code im Testmodus , also als Grundprogramm oder als Prozess leuft. Besonders die Tastatur bearbeitung ist dafon betroffen.
; [Done] Ich brauche zum einfachen Switshen von Variablen 1/0 ein Makro. SY_SwitchVarM()
;-> Server/Client ReseveData MSG
; [Done] ReciveData kann auch merer Nachrichten enthalten, wenn die abholung zu lange dauert.
; [Done] Trennzeichen und End Zeichen als #SY_ Konstanten
; [Done] Prüfen wiefie Nachichten der Buffer enthält
; [Done] Fehler Anzeige bei Buffer überlauf
; [Done] Variable zum Anpassen der Buffer Grösse
;- [] Wenn mehr Daten anliegen als abgeholt wurden, müste ReseveData solang aufgerunfen werden bis alle Daten abgeholt wurden
; Genau wie beim Even Loop
; [Done] Prüfen ob ein Projekt oder das Grunsprogramm läuft. SY_SelfName.s = "Grundprogramm" Define SY_SelfRun = 1 wenn das
Grundprogramm läuft
; [Done] Die Tasten Funktionen wie CTRL + F12 etc funktionieren nur im SelfRun = 1
;
;}
;-
;-XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
;-
Schaut euch das Ergebniss im Procedure Viewer an. Es werden nur noch die Punkte aufgezeigt die noch offen sind.
Ich bleibe dabei. Das PureBasic ziehmlich unterschätzt wird.
Hier geht es zu meinem ersten Beitrag
Gruss TFT