Mehrere Forms nebeneinander + Syntaxhighlight



  • Hey @all,

    und zwar hätte ich zu einem zukünftigen Projekt einigen Fragen.
    Sorry, falls diese Fragen schon gestellt wurden, aber leider funktioniert die Suchfunktion schon längere Zeit nicht.

    1. Ist es möglich/einfach in einem TRichEdit Syntaxhighlight zu realisieren?
    2. Wie kann man es realisieren, das man mehrere Forms nebeneinander hat wie beispielsweise beim BCB, Dreamweaver, usw.

    Vielen Dank im Voraus
    Lg _freeze_





    1. Siehe FAQ unter "RichEdit".
    2. Einfach mehrere Forms in das Projekt einbinden und per Show() anzeigen.
    3. In Zukunft bitte die Faustregel beachten: ein Thema pro Thread, ein Thread pro Thema. Danke!


  • OK, also ich habe mir das jetzt mal durchgelesen, jedoch irgendwie verstehe ich da glaube ich was falsch, hier mal der komplette code:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit2.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm2 *Form2;
    char* Keywords[8] = {"for", "int", "while", "do",
                         "switch", "break", "case", "if"};
    //---------------------------------------------------------------------------
    __fastcall TForm2::TForm2(TComponent* Owner) : TForm(Owner) {
    }
    //---------------------------------------------------------------------------
    .
    .
    .
    //---------------------------------------------------------------------------
    
    int __fastcall TForm2::GetFirstPos(int Line) {
      int Pos = RichEdit1->Perform(EM_LINEINDEX, Line, 0);
      return Pos;
    }
    
    int __fastcall TForm2::GetLastPos(int Line) {
     if(Line == RichEdit1->Lines->Count - 1)
       return RichEdit1->Text.Length();
     else {
       int Pos = RichEdit1->Perform(EM_LINEINDEX, Line + 1, 0);
       return (Pos - 1);
     }
    }
    
    void __fastcall TForm2::highlightText() {
      int CurrentLine = RichEdit1->Perform(EM_LINEFROMCHAR, -1, 0);
      int Start = GetFirstPos(CurrentLine);
      int End = GetLastPos(CurrentLine);
    
      ::FINDTEXT FindText;
      FindText.lpstrText = Keywords[8];
      FindText.chrg.cpMin = Start;
      FindText.chrg.cpMax = End;
      int FoundPos = RichEdit1->Perform(EM_FINDTEXT, FT_WHOLEWORD, (LPARAM)&FindText);
      AnsiString tmp;
      tmp.cat_sprintf("Start: %d, End: %d, FoundPos: %d", Start, End, FoundPos);
      Application->MessageBoxA(tmp.c_str(), "", MB_OK);
      while(FoundPos > -1) {
        int CurrentLine = RichEdit1->Perform(EM_LINEFROMCHAR, -1, 0);
        int Start = GetFirstPos(CurrentLine);
        int End = GetLastPos(CurrentLine);
      }
    }
    
    void __fastcall TForm2::Button1Click(TObject *Sender) {
      highlightText();
    }
    

    Bei mir kommt bei FindPos immer -1 raus.

    Edit: Habe Code etwas gekürzt
    Lg _freeze_



  • freeze schrieb:

    FindText.lpstrText = Keywords[8];
    

    Damit greifst du auf den neunten String zu, dein Array enthält aber nur acht (Index 0 - 7).



  • oik, alles klar, dann werde ich es in einer schleife machen, aber der syntax war etwas neu für mich

    Danke


Anmelden zum Antworten