Schreiben über von Werten in anderes Form schlägt fehl...



  • Hallo auch...

    Vielleicht kann mir jemand hier weiterhelfen, ich weis mir keinen Rat mehr. Ich arbeite mit der Indy Komponente und verschicke damit eine eMail. Dabei lasse ich mir alle Statusmeldungen und eventuelle Fehler in ein Logfile mitschreiben. Zum einen schreibe ich diese Meldungen in ein TRichEdit Feld um Fehler rot hervorheben zu können. Das funktioniert wunderbar, dieses Feld liegt auch im selben Form wie die Indy Komponente. Das Form selbst wird über ShowModal aus dem Hauptformular aufgerufen. Die Meldungen werden zum Teil über eigene Ereignisse als auch aus einem try.. catch... Block heraus geschrieben. Im MainForm liegt ein TStringGrid dort laufen schon andere Logfile Meldungen auf.

    Nun möchte ich aus dem Form mit der Indykomponente die Meldungen ebenfalls in das StringGrid des Main bekommen. Bei allen Meldungen die eigene Routinen (OnWork, OnConnect usw.) haben funktioniert das auch, nur nicht bei Fehlern die mit Catch abgefangen werden, hier landen die Fehler nur im RichEdit, im MainForm erscheint dazu nichts.

    Das sieht dann in etwa so aus:

    catch(EIdProtolReplyError &e)
    {
     TRichEdit->Fehlerschreiben....
     MainForm->TStringGrid1->RowCount++;
     MainForm->TStringGrid1->Cells[0][IrgendneZeile] = Datum;
     MainForm->TStringGrid1->Cells[1][IrgendneZeile] = e.Message;
    }
    

    Was mache ich falsch ?

    Achso nochwas: Ich habe bemerkt, das wenn ich das Form zum Senden erneut aufrufe, dann erscheint mitunter der letzte Fehler dochnoch im StringGrid aber eben erst dann und dann ist es zu spät...

    Wie kriege ich die Fehler direkt ins StringGrid ?



  • catch(EIdProtolReplyError &e) 
    { 
     TRichEdit->Fehlerschreiben.... 
     MainForm->TStringGrid1->RowCount++; 
     MainForm->TStringGrid1->Cells[0][IrgendneZeile] = Datum; 
     MainForm->TStringGrid1->Cells[1][IrgendneZeile] = e.Message; 
     MainForm->TStringGrid1->Update();
    }
    

    Versuch das mal



  • Hmm das funktioniert leider nicht, er wirft mir nun aus:

    [C++ Fehler] mailer.cpp(267): E2247 Zugriff auf '_fastcall TStringGrid::Update(int,int)' nicht möglich

    Auch wenn ich Application->ProcessMessages(); verwende wird nix aus dem Catch Block ins StringGrid geschrieben. Ich habe nun spaßeshalber ein StrinGrid ins gleiche Form aufgenommen um zu sehen ob er da was reinschreibt aber hier ist das selbe Verhalten zu beobachten. Warum kann also ins RichEdit geschrieben werden und nicht ins StringGrid ?



  • MainForm->TStringGrid1->Repaint();

    oder

    MainForm->TStringGrid1->Refresh();



  • Ich glaube die Werte gehen aus dem Catch garnicht in ein StringGrid hinein. In ein RichEdit schon, sonst wären sie ja wenigstens im gleichen Form erschienen.

    Gibt es eigentlich einen generellen Unterschied zwischen dem Datentyp von MainForm->TStringGrid1->Cells[0][IrgendneZeile] und TRichEdit1->Lines->Add() ?

    Tschuldigung für meine andere Frage, ich hatte den Thread zuvor irgendwie übersehen, war gestern überhaupt irgendwie durch den Wind...



  • Nein, beides String (AnsiString)



  • Ich hab den Fehler gefunden, er schreibt es in die Tabelle korrekt rein, nur sehen konnte ich es nicht, da die Zeilen wo er reinschreibt erst mit dem nächsten Lauf erstellt wurden...


Anmelden zum Antworten