Aktuelle Zeilennummer im TMemo ermitteln



  • Hallo zusammen,
    habe ein Routine zum Ermitteln der Zeilennummer geschrieben (bei Doppelklick auf eine Zeile im Memofeld):

    void __fastcall TForm1::frm1_mem8_HistorieDblClick(TObject *Sender)
    {Integer i2,i3=0,iMax; AnsiString z1,z2;                                        // Vars lokal halten
    
     i2  =frm1_mem8_Historie->SelStart;                                             // aktuelle Cursorposition
     iMax=frm1_mem8_Historie->Lines->Count;                                         // Anzahl Zeilen im Memo
     for(int i1=0;i1<iMax;i1++) {                                                   // alle Zeilen auslesen
      z1=frm1_mem8_Historie->Lines->Strings[i1];                                    // Zeile auslesen
      i3+=z1.Length(); if(i3>=i2) { z2=IntToStr(i1+1); z1=frm1_mem8_Historie->Lines->Strings[i1]; break; } // Zeile erreicht, merken und raus
      i2-=2;                                                                        // CursorPos -2 Zeichen pro Zeile wegen CR+LF
     }                                                                              // ende for(i1
    
     ShowMessage("Zeile: "+z2+"\rCursor: "+IntToStr(i2)+"\r\rText:\r"+z1);          // Info geben
    }
    

    Frage: Geht das nicht einfacher?
    Konnte weder hier noch im Google was dazu finden...

    Gruss Stefan



  • Label1->Caption = IntToStr(SendMessage(Memo1->Handle,EM_LINEFROMCHAR,Memo1->SelStart,0)+1);
    


  • oder einfacher:

    Label1->Caption = IntToStr(Memo1->CaretPos.y+1);
    

    😃



  • 😉

    Die guten alten API Funktionen... 😃
    Ich danke Dir und schäme mich...

    Mit CaretPos ist natürlich noch genialer.
    Da kann ich mich wenigstens rausreden,
    daß ich C++ noch nicht so lange programmiere... 😉

    Gruss Stefan


Anmelden zum Antworten