Die Unit "TraceDx" wird in Projekte eingebunden und stellt die Aufruf-Schnittstelle für Befehle und Anzeigen zur TraceServer-Anwendung zur Verfügung. Aufruf-Vorlagen siehe Datei "TraceDx.txt". Die Kommunikation kann über Windows-Messages, Pipes oder IP erfolgen, letzteres auch Rechner-übergreifend im Netzwerk. Auswahl über die ini-Datei (siehe unten) Die TraceDx-Unit initialisiert sich - je nachdem was zuerst kommt - - im eigenen initialization-Abschnitt bzw. - beim ersten Send-Aufruf Falls vorhanden wird dafür die Datei ".TraceDx.ini" im Projekt-Verzeichnis gelesen. Andernfalls werden Standardwerte benutzt, siehe Vorlage "TraceDx.ini". Die Schnittstelle enthält u.a. folgende Routinen zur Steuerung: - Löschen aller Zeilen im Server (passiert automatisch bei Start wenn vom Server nicht verhindert) - Einfügen einer Trennzeile - Einrückung incrementieren oder decrementieren - Farbe für Ausgaben festlegen (siehe unter ini-Datei) - Ausgabe in Datei bzw zum Server ein-/ausschalten - Interne Anzeige-Komponente für Trace-Zeilen festlegen (zusätzlich oder alternativ) - Filter festlegen (siehe unter ini-Datei) - Steuerung für Aufzeichnung von Windows-Messages (siehe unten) Die Schnittstellen-Routinen zur eigentlichen Ausgabe sind so gedacht, dass sie enthalten: - eine Identifikation des Senders ( String oder sendendes Objekt und String ), - ein oder zwei Wert-Parameter, verschiedene Standard-Typen sind als overloads definiert. Enum- und Set-Typen sind keine overloads sondern durch angehängtes S bzw E (SendE,SendS) gekennzeichnet. Realisierung als overload wäre mehrdeutig. (alternativ kann ein array-of-const-Parameter benutzt werden) - bei Bedarf einen Parameter für Anwendungs-seitige Farben Aufruf-Varianten - Send : Ausgabe einer Textzeile - Call : wie Send, mit Einrückung für weitere Send-Aufrufe bis zum Return - CallRet : wie Call, zusätzlich wird bei Return eine Zeile und ggf ein Wert ausgegeben - CallHide: wie Call, weitere Trace-Ausgaben bis zum Return werden unterdrückt - Add : wie Send, Inhalt wird an die vorige Zeile angehängt Siehe Beispiele in Datei "TraceDx.txt". Einstellungen in der ini-Datei: - Auswahl des Kommunikationskanals zum Server - zusätzliche Ausgabe direkt in Datei "_TraceDx.log(Client)" - automatische Ausgabe einer Trennlinie bei Client-Zustand "Idle" - Anfügen eines Menüs zur Trace-Steuerung: Falls die Applikation ein MainMenu enthält wird dort ein TraceDx-Menü angefügt. Andernfalls wird ans PopupMenu der MainForm engefügt oder ein eigenes erstellt. Achtung: Das kann bei dynamisch erzeugten Menüs im Client problematisch sein! - Farbe für alle Trace-Ausgaben die keine eigene Farb-Angabe enthalten - ...oder diese Farbangabe überschreibend - Filter-Strings zur Reduzierung der realen Traces Anleitung für Trace-Aufrufe aus Delphi-Sourcen heraus (getestet mit RAD 11.3) - Sourcen lokal kopieren - Datei "Sys\System.Variants.pas" löschen oder umbenennen - Suchpfad in Projekt-Optionen auf diese Pfade setzen, zum Beispiel MyVclWin;\_Source\Common;\_Source\Sys;\_Source\Win;\_Source\Vcl;\_Source\Indy10\Core;\_Source\Indy10\Protocols;\_Source\Indy10\System - ggf Gültigkeitsbereiche "System;WinApi;Vcl" usw setzen - zusätzliche Defines, zum Beispiel "CPUX86;CPU32BITS", für 32-Bit-Projekte setzen - Die Unit "TraceDxSys" (statt sonst "TraceDx") unter implementation-uses eintragen - Trace-Aufrufe wie üblich in Source eintragen (es sind hier nicht alle erlaubt!) Trace-Aufrufe aus Delphi-Sourcen für Windows-Messages - Trace kann sich für folgenden Aufrufe installieren und automatisch protokollien (mit Decodierung): - Application.OnMessage - MainWindowHook - .WindowProc - SendMessage (-TimeOut, -CallBack) - PostMessage - Zur Decodierung wird die DLL "WindowsMessages.dll" im Projekt-Verzeichnis benötigt - Send- und PostMessage benötigen eine angepasste WinApi.Windows, siehe oben ("Trace aus Delphi-Sourcen") - Die Protokollierung kann über "SetMessageSelects()" angepasst werden (An/Aus, Farbe, Show-/Hidelist) - Der Decodierung können eigene Messages (WM_USER + x) hinzugefügt werden Trace-Aufrufe in DLLs - Prinzipiell wie in Apps, aber: - Unit-Daten existieren jeweils pro App und DLL mehrfach, deshalb eigene Einrück-Tiefe, Farbe, ... - Schreiben in Datei wäre konkurrierend, ist deshalb aus DLL grundsätzlich ausgeschaltet.