TRichEdit - String gefunden an die Positon + 10 Zeilen weiter gehen



  • joa da geht

    ich versuche es noch zu verstehen aber eine riesendicken dank
    leider gibt es keinen knutsch smiley :=



  • Joe_M. schrieb:

    int anzahl_sichtbarer_zeilen = RichEdit1->Height / Form1->Canvas->TextHeight(Edit1->Text);
    zeile = RichEdit1->Lines->IndexOf(Edit1->Text);

    sorry aber ich verstehe das nicht. Edit1 doesnt exist bei mir.
    ich klicke ja doppelt in die listbox wo die fehler ausgegeben werden 😕



  • Sorry. Das ist der Suchtext, der gefunden werden soll. Kannst auch eine belibiege Zeile aus dem RE nehmen. Es geht nur darum, die Größe einer Zeile in Pixel zu erhalten, um berechnen zu können, wie viele Zeilen in dem RE sichtbar sind.



  • ja und ich kriege es net hin eine aussem richedit zu nehmen
    also das geth schon erstmal nur wenn ich die font veränder klappt es net mehr



  • Joe_M. schrieb:

    Du solltest auch nicht den Canvas von Form1 nehmen, sondern einen eigenen erstellen und diesem die Texteigenschaften aus dem RichEdit zuweisen. So funktioniert das nur mit der Standardschriftart und garantiert nicht mehr, wenn Du die Schriftart oder -größe änderst.

    Verwendest Du denn einen eigenen Canvas? Weist Du diesem die richtige Schriftart und Größe zu?



  • da weiß ich ehrlich geasgt nix mit anzufangen^^

    ich habe halt meine richedit und kann via fontdialog auch den font verändern



  • Tja, dann schau mal in der Hilfe unter TCanvas nach.

    Versuchs erst mal selbst. Wenn Du es nicht hinbekommst, kannst Du ja einen neuen Thread zu diesem Thema erstellen.



  • das habe ich doch getan
    ich habe auch statt "edit1-Text"
    dem Ausgabe->Strings[i].Text
    etc. zugewiesen

    aber das klappte net

    ich weiß auch net wieso....
    in der hilfe habe ich acuh nachgeschaut
    ich bin zwar dern00b aber net dumm 😉



  • habe einafch / 10 geasgt - das geht schon^^

    wenn der string aber am ende ist (so zeile 40.000 oder so)
    dauert es bi zu 18 sekunde. das ist net gut oder?



  • Habe bisher noch nicht ganz verstanden, was dein Programm genau machen soll.

    Halten wir mal fest:
    1. Du hast in einer ListBox alle möglichen Fehlerarten drin.
    2.In der ListBox wählst du einen Eintrag aus, und suchst in deiner Logdatei genau diesen Fehler ?

    Sind die Einträge in der Logdatei absolut identisch mit den Fehlerarten in deiner ListBox, oder hast du da Datum,Zeit etc. mit dranhängen.
    Die Frage ist, ob es überhaupt erforderlich ist, die komplette Logdatei einzulesen, oder ob es reicht nur einen Ausschnitt einzulesen, der dann angezeigt wird.



  • hallo ;
    ich gebe mal eine beispiel wie die logdatei aufgebaut ist:

    2005-11-08 12:09:28: Remote open task for Study Instance UID 1.2.276.0.24.276.121315825.4.0.1
    2005-11-08 12:09:30: Opening Hanging "CT Standard" for" ******,*****, 1511621, 1945-07-18, 1.2.276.0.24.276.121315825.4.0.1, "
    2005-11-08 12:12:08: Failed to create GL context: Ungültiges Handle für Gerätekontext (DC).
     (591)
    2005-11-08 12:20:05 (MD-JADE) [3448]: Using workspace "Default"
    2005-11-08 12:20:05: Allocated 1024 MB of virtual memory at 0x10020000
    2005-11-08 12:20:06: Starting MD-JADE v2.14 SR5 -  Build 96 (Mo 24.10.2005).
    2005-11-08 12:20:06: Current workspace Default on host MP276JWB
    2005-11-08 12:20:06: ####### Unclean exit from previous MD-JADE session ######
    2005-11-08 12:20:12: Received request for remote login of user hel
    2005-11-08 12:20:12: Remote login of user hel
    2005-11-08 12:20:12: Using workspace "Default"
    2005-11-08 12:20:13: Logging in user hel@MP276JWB [Default]
    

    wie du siehst ist das programm gecrasht.
    nun muss ich die letzen 4 zeilen zum beispiel VOR dem crash ausgeben. das tue ich in der listbox. somit hat der user die tatsächlichen abstürze vor sich.
    wenn er nun den error anklickt springt er da auch hin^^

    es sind in der listbox auch die ganzen zeilen wie oben ausgegeben

    ------------------------------------------------------------

    IndexOf() - kann es sein das das voll müll ist? wenn der error so in zeile 40.000 liegt, dauert das so elendich lange. habe es in einer schleife gemacht und das geht viel schneller 😃



  • dern00b schrieb:

    IndexOf() - kann es sein das das voll müll ist? wenn der error so in zeile 40.000 liegt, dauert das so elendich lange. habe es in einer schleife gemacht und das geht viel schneller 😃

    Das glaube ich nicht. Du hast garantiert die Schleife über die StringList gemacht, aber das IndexOf des RichEdit verwendet. Wenn Du das IndexOf der StringList verwendest, ist das nochmal 50% schneller, als die Schleife.
    Operationen auf dem RichEdit sind fürchterlich langsam, das ist richtig.



  • naja ich gfehe jetzt die stringlist durch :

    for(int i=0 ; i<RichEditText->Count ; i++)
                    {
                            if(RichEditText->Strings[i] == ErrorString)
                            {
                                    int sichtbare_zeilen = Ausgabe->Height / 12;
                                    Ausgabe->SelStart = Ausgabe->Perform(EM_LINEINDEX, 0, 0);
                                    Ausgabe->Perform(EM_SCROLLCARET, 0, 0);
                                    Ausgabe->SelStart = Ausgabe->Perform(EM_LINEINDEX, i + sichtbare_zeilen / 2, 0);
                                    Ausgabe->Perform(EM_SCROLLCARET, 0, 0);
                                    Ausgabe->SelStart = Ausgabe->Perform(EM_LINEINDEX, i, 0);
                                    Ausgabe->SelLength = Ausgabe->Lines->Strings[i].Length();
                                    Ausgabe->Perform(EM_SCROLLCARET, 0, 0);
                                    delete RichEditText;
                                    return;
                            }
                    }
    

    so ist dat doch schick
    wobei oben die zeile mit dem teilen noch ausgebessert werden muss 😮



  • Must du unbedingt die ganze Logdatei im RichEdit anzeigen ?
    Oder reicht ein Ausschnitt um den ausgewählten Fehler ?



  • naja - es ist sinnvoll. denke ich.
    weil sonst muss ich sie ja auch jedesmal neu laden^^

    also das ist schon ok so - mein betreuer (der chefprogarmmierer) hat da auch nix groß gegen gesagt



  • Du musst sie nicht immer neu laden.
    Du lädst die Logdatei in eine normale TStringList (Wo natürlich Texteigenschaften flöten gehen) und suchst darin deinen Fehler.
    Dann kopierst du alle Fehler (z.B. +100 -100 um den gefundenen) in die RichEdit.
    Das dürfte erheblich schneller sein.



  • Ich habs gerade mal ausprobiert. Das Suchen und Springen in Zeile 50000 dauert 91 ms unter Verwendung einer Schleife und 34 ms unter Verwendung von IndexOf (jeweils über eine TStringList).

    @remark: Dann mußt Du ihm jetzt auch erklären, wie man das macht.



  • dann kann der suer aber nur 100 zeilen scrollen
    ist das sinnvoll?
    ich meine die müssen oft auch weiter weil dadurch analysieren die ihre programmabstürze.

    habe das eben besprrochen die meinten auch net das das so gut wäre.



  • Joe_M. schrieb:

    Ich habs gerade mal ausprobiert. Das Suchen und Springen in Zeile 50000 dauert 91 ms unter Verwendung einer Schleife und 34 ms unter Verwendung von IndexOf (jeweils über eine TStringList).

    @remark: Dann mußt Du ihm jetzt auch erklären, wie man das macht.

    wie etstet man denn zeiten von sowas?



  • dern00b schrieb:

    wie etstet man denn zeiten von sowas?

    siehe sein erstes Posting hier

    mfg
    BigNeal


Anmelden zum Antworten