Innerhalb von Memo suchen - C++
-
iss zwar auf englisch, aber danke^^
-
Hi,
versuchs mal mit EM_FINDTEXT un diesem Link:
http://www.c-plusplus.net/forum/viewtopic-var-t-is-39172-and-view-is-next.htmlEdit:
Falls der Benutzer deines Programmes eine Suchfunktion bekommen soll, nimm einen
TFindDialog.mfg
kpeter
-
wenn ich den FindDialog nehme, kann ich ihn ja aber nur benutzen, wenn ich im bearbeitungsmodus bin
denn bei en eigenschaften finde ich nichts, womit ich diesen dialog im quellcode mit einbinden kann
-
Geh doch einfach bei TMemo::Lines::Strings die einzelnen Strings durch und suche darin mit AnsiString::Pos.
-
Cyber-Space schrieb:
wenn ich den FindDialog nehme, kann ich ihn ja aber nur benutzen, wenn ich im bearbeitungsmodus bin
Du meinst sicher Laufzeit oder Runtime.
Cyber-Space schrieb:
denn bei en eigenschaften finde ich nichts, womit ich diesen dialog im quellcode mit einbinden kann
Du willst zur Entwurfszeit in dem Memo Begriffe suchen ?
-
ok, da hab ich mich evtl. ein bisschen falsch ausgedrückt
also, wenn ich alles gespeichert habe, drücke ich F9. dann startet ja nun das programm (mit fertiger benutzeroberfläche).
wenn das programm gestartet ist, öffne ich eine vorhandene textdatei (oder andere formate), wo ich per FindDialog einen Begriff suchen lassen möchte.
aber ich hab keinen blassen schimmer wie ich das anstellen kann
hoffe, nun versteht man, was ich für ein problem habe
-
am besten mit einem Button oder einer EditBox
bloß, was ist besser
hoffe, ihr könnt mir nen tipp geben
-
Mit F9 startest du das Programm im Debuggermodus, das weist du ?
Falls du keine FindDialog-Komponente auf dem Formular hast, zieh eine drauf.
In der Hilfe des BCB ist auch ein kleines Beispiel zu diesem Dialog.mfg
kpeter
-
jo, dad weiß ich, das ich anch drücken der F9-Taste im Debuggermodus bin
ich habe auch den FindDialog schon in meinem Bearbeutungsfenster (in C++ standardmäßig TForm1)
also die hilfedatei hab ich auch schon durchgestöbert, aber nichts gefunden
-
Tip,
nimm anstatt des Memo eine TRichEdit-Kompo. Die ist von TCustomMemo abgeleitet, hat mehr
Eigenschaften und direkt eine Methode FindText.Hier das Listing aus meiner F1:
void __fastcall TForm1::Button1Click(TObject *Sender) { FindDialog1->Position = Point(RichEdit1->Left + RichEdit1->Width, RichEdit1->Top); FindDialog1->Execute(); } void __fastcall TForm1::FindDialog1Find(TObject *Sender) { int FoundAt, StartPos, ToEnd; // Suchbeginn nach der aktuellen Markierung // (falls vorhanden) // andernfalls beim Textanfang starten if (RichEdit1->SelLength) StartPos = RichEdit1->SelStart + RichEdit1->SelLength; else StartPos = 0; // ToEnd ist die Länge von StartPos bis zum Ende des Textes // im RTF-Eingabefeld ToEnd = RichEdit1->Text.Length() - StartPos; FoundAt = RichEdit1->FindText(FindDialog1->FindText, StartPos, ToEnd, TSearchTypes()<< stMatchCase); if (FoundAt != -1) { RichEdit1->SetFocus(); RichEdit1->SelStart = FoundAt; RichEdit1->SelLength = FindDialog1->FindText.Length(); } }
Müsste auf Anhieb gehen
-
danke dir
es funktioniert alles einwandfrei
super, danke
-
bin stolz auf dich
darfst dir auf die schultern klopfen
-
Danke für die Blumen.
Hier wird immer gerne geholfen.
mfg
kpeter
-
is das bei dir auch, das das RichEdit nicht automatisch zum angezeigten Wort/Text scrollt?
-
Das Fenster muss noch gescrollt werden.
Wenn eine Position im Text gefunden wurde, die ober- oder unterhalb des sichtbaren Bereiches liegt,
schickt man ein Message an die TRichEdit:RichEdit1->Perform(EM_SCROLLCARET, 0, 0);
Diese Zeile hängst du ganz unten als letze ein.
Das funktioniert aber nur solange, wie Text markiert (selektiert) ist.
-
jo, thx
das läuft wie ne sahne^^
dankeschön
-
ich denke mal, das kann zu den FAQ`s
von meiner seite ist es geschlossen