Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ausgabe puffern und später ausgeben (https://www.delphipraxis.net/145852-ausgabe-puffern-und-spaeter-ausgeben.html)

amigage 9. Jan 2010 12:25


Ausgabe puffern und später ausgeben
 
Hallo,

ich stehe irgendwie auf dem Schlauch, vielleicht kann mir jemand einen Tipp geben.

Das Problem
Ich muss bei einer externen Komponente einen Fehler suchen und will dazu einige
Werte ausgeben lassen, am besten in ein Memo-Feld. Mit showmessage() würde man sich
totklicken :) Problem ist, dass die externe Komponente das Memo-Feld ja nicht
ansprechen kann. Deshalb suche ich so etwas wie einen Ausgabepuffer, den ich dann
in meiner Unit ansprechen und ausgeben kann.

bei PHP gibt es z.B.
Code:
ob_start();
ob_get_contents();
ob_end_flush();
ob_end_clean();
Gibt es so etwas auch in der Art für Delphi?
Wenn nicht, wie könnte ich es dann umsetzen?

PS: Das Programm muss dann auf einem anderen Rechner laufen, wo eine Delphi IDE nicht
zur Verfügung steht.

Besten Dank für jedweden Tipp.

mkinzler 9. Jan 2010 12:28

Re: Ausgabe puffern und später ausgeben
 
Du könntest der Komponente eine TStrings-Instanz als Parameter übergeben, an welche diese die Melsungen dann anhängt.
So könntest du <Memo>.Lines übergeben

amigage 9. Jan 2010 12:30

Re: Ausgabe puffern und später ausgeben
 
Danke für die superschnelle Reaktion.
TString wäre super, aber wie übergebe ich die, wenn ich den Code der
Komponente nicht unbedingt ändern will/kann/muss?

mkinzler 9. Jan 2010 12:33

Re: Ausgabe puffern und später ausgeben
 
Da wirst du dann keinen Change haben.
Wie gibt die externe Komponente die Fehler den aus?

amigage 9. Jan 2010 12:48

Re: Ausgabe puffern und später ausgeben
 
Die Komponente speichert Daten in einer Datei. Könnte ich auch machen und dann in meiner Unit einlesen.
Aber ich dachte es geht einfacher.

Ansonsten produziert die Komponente Exceptions.
Delphi-Quellcode:
raise EMyException.Create('Ein Fehler ist aufgetreten...')

mkinzler 9. Jan 2010 12:49

Re: Ausgabe puffern und später ausgeben
 
Dann könntest du die Exceptionmeldungen doch manuell in das Memo verfrachten

amigage 9. Jan 2010 12:54

Re: Ausgabe puffern und später ausgeben
 
Könntest Du das näher erläutern?
Provoziert man dann damit nicht, dass man aus der externen Komponente fliegt?

sx2008 9. Jan 2010 13:09

Re: Ausgabe puffern und später ausgeben
 
Du kannst die Meldungen auch mit OutputDebugString() ausgeben.
Wenn das Programm aus der IDE gestartet wird siehst du die Meldungen im Meldungs-Fenster.
Ausserhalb der IDE kannst du die Meldungen mit DebugView anzeigen.
Diese Technik ist praktisch nebenwirkungsfrei.

amigage 9. Jan 2010 13:27

Re: Ausgabe puffern und später ausgeben
 
@mkinzler

Da die Komponente eh Excpetions abfängt, um bei Excpetions rauszuspringen,
habe ich eine Variable hinzugefügt, die meine Werte sammelt.

Wird eine Exception ausgelöst, übergebe ich meine Werte mit
Delphi-Quellcode:
try
  ...
except
  ...
  raise EMyException.Create(myOutput);
end
und lese sie dann in meiner Unit mit E.Message aus.

@sx2008
Danke für den Tipp. Den werde ich mir auch einmal näher anschauen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz