Programmieren - alles kontrollieren 4.939 Themen, 20.671 Beiträge

Power++ - Suchen/Ersetzen

Tweety4 / 4 Antworten / Flachansicht Nickles

Hallo
brauche schon wieder Hilfe. Habe mit nachfolgendem Programmteil ein Problem. Es läuft nicht so wie es soll. Beim Suchen mit der Option "Groß-/Kleinschreibung beachten" reagiert es nicht und beim Aktivieren von "nach oben" soll es von einer beliebigen Textposition aus nach oben suchen. Beim Erreichen soll es wieder von hinten anfangen zu suchen.
Was muss noch rein, damit das Programm dies alles bewerkstelligt?
Kann mir hier jemand helfen?

WBool Form1::Suchen_Ersetzen_Dialog_1_FindReplace(
WObject * source,
WFindReplaceEventData * event )
{
WLong position;
WString suchtext;
WRange zeichen_index;
WLong text_laenge;
WBool ganzwort, grossklein;

ganzwort = event->wholeWord;
grossklein = event->matchCase;

if (event->findNext)
{
suchtext = Suchen_Ersetzen_Dialog_1->GetFindText();
if (event->searchDown)
{
position = Richtextfeld_1->FindText( suchtext, FALSE, ganzwort, grossklein, beginAt );
if (position {
position = Richtextfeld_1->FindText(suchtext);
}
text_laenge = suchtext.GetLength();
zeichen_index.start = position;
zeichen_index.end = position + text_laenge;
beginAt = zeichen_index.end;

Richtextfeld_1->SetFocus( );
Richtextfeld_1->SetEditSelection( zeichen_index );
}
else
{}
if (event->searchDown)
{
position = Richtextfeld_1->FindText (suchtext, TRUE, ganzwort, grossklein, position);
if (position > 0)
{
position = Richtextfeld_1->FindText (suchtext);
}
text_laenge = suchtext.GetLength();
zeichen_index.start = position;
zeichen_index.end = position - text_laenge;
beginAt = zeichen_index.end;

Richtextfeld_1->SetFocus( );
Richtextfeld_1->SetEditSelection( zeichen_index );
}
else
{}
}
return FALSE;
}

bei Antwort benachrichtigen
Andreas42 Tweety4 „Power++ - Suchen/Ersetzen“
Optionen

Hi!

Ich denke das wichtigste wird die Methode findtext() sein. Kannst du hierzu mal eine Referenz aus der onlinehilfe posten? Die Standarddefinitionen, die ich gefunden habe (on der MSDN-Library) gehen von drei Parametern aus.

Bisher kann ich noch nicht erkennen, wo und wie in findtext() bei dir die Suchrichtung festgelegt wird. Soll das im zweiten Parameter erfolgen, dass du einmal mit TRUE und einmal mit FALSE belegst?
Ich erwarte auch, dass irgendwo eine event->Attribut für die Suchrichtung abgefragt werden muss.

Ich vermute, dass findtext, die Position der gesuchten zeichenkette zurückgibt. Das Ergebnis dürfte >0 sein, wenn die Zeichenkette gefunden wurde.

Du willst offenbar zuerst reagieren, wenn die Zeichenkette nicht gefunden wurde. Dabei soll der Suchbeginn dann mit dem Anfang des zu durchsuchenden Textes belegt werden.

Ich denke, du verwaltest in der globalen Variablen BeginAT die Position, an der die Suche im Text beginnen soll.

der M;ehfachaufruf von findtext() verwirrt mich etwas. Du suchst zuerst mit allen Parametern und direkt danach nur mit dem ersten. Kann es sein, dass dann Standardvorgaben genutzt werden und dabei dann z.B. die Gross/Kleinschreibung immer ignoriert wird, weil das die Voreinstellung ist, wenn man das Parameter nicht angibt?

Mein Vorschlag ist, dass du zuerst einmal die Grundstruktur vereinfachst:

if (event->findNext)
{
suchtext = Suchen_Ersetzen_Dialog_1->GetFindText();
if (event->searchDown)
{
position = Richtextfeld_1->FindText( suchtext, FALSE, ganzwort, grossklein, beginAt );
if (position > 0)
{
// position braucht hier nicht mehr gelesen zuw erden, da es schon bekannt ist.
text_laenge = suchtext.GetLength();
zeichen_index.start = position;
zeichen_index.end = position + text_laenge;
//Hier fehlt noch die Prüfung, ob das Ende des Textes überschritten wurde!
beginAt = zeichen_index.end;
{
else // postion {}
} // end of event->searchDown
//Hier dann auf Rückwärtssuche regaieren (searchUP?)
//if (event->searchUP)
//{
// ...
//}
Richtextfeld_1->SetFocus( );
Richtextfeld_1->SetEditSelection( zeichen_index );
}


Bis dann
Andreas

Hier steht was ueber mein altes Hard- und Softwaregedoens.
bei Antwort benachrichtigen