Programm log



  • Guten Tag,

    ich möchte in meinem Programm interne "Aktivitäten" loggen und anzeigen. Eine Datei kommt nicht in frage da dies zum umständlich für den Nutzer wäre. Die beste Lösung wäre eine art Konsole. Das könnte man natürlich mit AllocConsole() erreichen, allerdings finde ich so eine separate Anzeige nicht besonders gelungen. Desweiteren kann ich so nur eine Konsole öffnen.

    Meine Fragen also:
    1. Ist es möglich so eine art "Logfenster" einigermaßen elegant und kompfortabel in ein Programm einzubauen?

    2. Ist es möglich über einen übergeordneten Prozess mehrere Konsolen zu öffnen? zB. eine Programminterne Funktion mit CreateProcess zu starten oder verschiedenen Threads verschiedene Konsolen zuzuweisen oder sowas?

    Besten Dank für eure Hilfe 😉



  • Wenn du keine Datei willst, mache eine listbox in einem definierten Fenster und trage darin die log-Einträge ein. Mit Multi-Processing geht das auch. In beiden Fällen brauchst du das HWND der listbox zum Senden des log-Strings. Vorschlag: Beginne erst einmal mit einem Single-Process und packe die listbox am besten in einen moduslosen Dialog. Dann hat der Benutzer die Möglichkeit, die log-Einträge beliebig auf dem Bildschirm zu verschieben.



  • Hi,

    danke erstmal für die Antwort.
    Scheint mir sogar ganz gut zu sein das Ganze so aufzubauen, nur leider habe ich da noch einige Fragen:

    1. Wenn viel in der Listbox steht "blitzt" diese bei neuen Einträgen auf, das sieht man besonders dann wenn viel neues in kurzer Zeit hinzu kommt.

    2. Wäre schön wenn die Listbox automatisch mit nach unten scrollen würde.. falls jemand da eine gute Lösung hat immer her damit 😉

    3. Aus einer Listbox kann man so ohne weiteres leider nichts kopieren, wäre schön wenn das gehen würde. Auch hier wäre ich für Vorschläge offen 😃

    Falls jemand einen ganz anderen Ansatz hat kann er den natürlich auch gerne posten.



  • Ok, das Automatische scrollen ist gelöst - LB_SETTOPINDEX und LB_GETCOUNT.
    Bleiben noch die beiden anderen fragen 😉



  • Du könntest vor dem Senden von vielen Strings das ständige Neuzeichnen mittels WM_SETREDRAW vehindern und nach dem Hinzufügen wieder aktivieren.

    Zum Kopierproblem gibt es vielleicht noch elegantere Methoden, aber das Subclassen des Controls, Abfangen der Tastenkombination STRG+C und das anschließende manuelle Kopieren ist schnell gemacht.

    Edit: Eine Alternative zur Tastenkombination wäre natürlich ein einfacher Button "Kopieren" und/oder ein Popup-Menü.



  • Eine listbox soll etwas auflisten, daher der Name. Wenn du mehr willst (kopieren, ...), kannst du stattdessen auch eine multiline-editbox einsetzen.


Log in to reply