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_
-
für Syntaxhighlighting:http:
http://www.c-plusplus.net/forum/viewtopic.php?t=39173
-
- Siehe FAQ unter "RichEdit".
- Einfach mehrere Forms in das Projekt einbinden und per Show() anzeigen.
- 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