ich habe für mich ein Log-/Statusprogramm geschrieben, womit ich eigenständig laufende Programme mitlogge. Das funktioniert soweit auch problemlos. Ich möchte nun die Auswertung dieser LogFiles komfortabler gestalten. Bei Single-Thread-Applications würde ein VirtualStringTree (siehe Bild) den Job machen. Allerdings würde ich gern die Parallelläufigkeit, wie sie im Log ist, gern auch zur Ansicht erhalten.
Ein LogFile sieht bei mir in etwa so aus:
Code: Alles auswählen
1;1;TForm1.FormCreate;Form Created
1;1;TForm1.Button2Click;Geklickt!
4636;1;TMyThread.Create;Thread mit ID[4636] wird erstellt
5868;1;TMyThread.Create;Thread mit ID[5868] wird erstellt
3584;1;TMyThread.Create;Thread mit ID[3584] wird erstellt
4504;1;TMyThread.Create;Thread mit ID[4504] wird erstellt
6732;1;TMyThread.Create;Thread mit ID[6732] wird erstellt
1;1;TForm1.Button2Click;Habe [5] Threads erstellt!
4636;2;TMyThread.Execute;Thread mit ID[4636] wird ausgeführt
4636;3;TMyThread.Execute;Thread-Execute-Schleife
5868;2;TMyThread.Execute;Thread mit ID[5868] wird ausgeführt
5868;3;TMyThread.Execute;Thread-Execute-Schleife
4636;4;TMyClass.Addiere;Addiere Zahl1[59] mit Zahl2[54]
3584;2;TMyThread.Execute;Thread mit ID[3584] wird ausgeführt
3584;3;TMyThread.Execute;Thread-Execute-Schleife
5868;4;TMyClass.Addiere;Addiere Zahl1[84] mit Zahl2[71]
4504;2;TMyThread.Execute;Thread mit ID[4504] wird ausgeführt
4504;3;TMyThread.Execute;Thread-Execute-Schleife
5868;4;TMyClass.Addiere;Zahl1[84] und Zahl2[71] ergeben zusammen[155]
4636;4;TMyClass.Addiere;Zahl1[59] und Zahl2[54] ergeben zusammen[113]
4504;4;TMyClass.Addiere;Addiere Zahl1[84] mit Zahl2[54]
4504;4;TMyClass.Addiere;Zahl1[84] und Zahl2[54] ergeben zusammen[138]
6732;2;TMyThread.Execute;Thread mit ID[6732] wird ausgeführt
6732;3;TMyThread.Execute;Thread-Execute-Schleife
3584;4;TMyClass.Addiere;Addiere Zahl1[85] mit Zahl2[60]
4636;4;TForm1.UnterProc;Eine Unterprocedure wurde gestartet, sie startet per Zufall mindestens noch 12 weitere Unterproceduren
4636;5;TForm1.UnterProc;Eine Unterprocedure wurde gestartet, sie startet per Zufall mindestens noch 11 weitere Unterproceduren
4636;6;TForm1.UnterProc;Eine Unterprocedure wurde gestartet, sie startet per Zufall mindestens noch 10 weitere Unterproceduren
4636;7;TForm1.UnterProc;Eine Unterprocedure wurde gestartet, sie startet per Zufall mindestens noch 9 weitere Unterproceduren
4636;8;TForm1.UnterProc;Eine Unterprocedure wurde gestartet, sie startet per Zufall mindestens noch 8 weitere Unterproceduren
4636;9;TForm1.UnterProc;Eine Unterprocedure wurde gestartet, sie startet per Zufall mindestens noch 5 weitere Unterproceduren
6732;4;TMyClass.Addiere;Addiere Zahl1[43] mit Zahl2[38]
5868;4;TForm1.UnterProc;Eine Unterprocedure wurde gestartet, sie startet per Zufall mindestens noch 8 weitere Unterproceduren
5868;5;TForm1.UnterProc;Eine Unterprocedure wurde gestartet, sie startet per Zufall mindestens noch 7 weitere Unterproceduren
5868;E;TForm1.UnterProc;Zufallsfehler generiert für UnterProcedure 7
...Zur Zeit kann ich wunderbar die einzelnen Threads als Node und Nachfolgeaufrufe als deren Child gruppieren, allerdings geht dabei die Parallelläufigkeit verloren (siehe Bild). Ebenfalls Fehlertexte und besondere Hinweise (da sie mich am meisten interessieren), kann ich derzeit nur nach einem Thread oder/und im Thread-Child (und darauf verlinkt), darstellen. Günstiger wäre es, an der Stelle, wo so ein Fehler-/Hinweistext generiert wurde, die Node-Child-Folge aufzubrechen und diesen dort zu zeigen.
Kennt jemand eine Komponente, mit der ich die Nodes bzw. deren Childs so aufsplittern kann, wie sie im oben gezeigten LogText notwendig wäre?
Falls nein, wäre mein nächster Ansatz die Verwendung eines Drawgrids, in dessen erste Spalte ich die Eigenschaft der Naviagtion (wie vom TreeView) mit den Icons[+][-] nachzubilden versuchen würde. Allerdings schätze ich den Aufwand für mehrere Tage/Wochen dafür ein, bevor das einigermaßen vernünftig funktionieren würde.
Bevor ich erst in eine falsche Richtung renne, kennt jemand eine alternative Komponente, die ich mir nochmal dafür anschauen könnte?
Wenn Ihr sowas vor hättet, wie würde Euer alternativer Ansatz aussehen?