C++ & C# Programming page
 

 

# Úvod
# Tvůrci
# C++
# C#
# Linky





Textový editor - 2.díl

V dnešním díle o textovém editoru si ukážeme jak naprogramovat funkci hledání slov. Tuto funcki má téměř každý textový editor. Proto nesmí chybět ani v tom našem.

Ve našem projektu si vytvoříme nový ovládací panel. Umístit ho můžete kde chcete, já si ho umístil těsně nad spodní lištu. Panel si v nastavení přichytíme pomocí Anchor k levé a pravé straně, a ke spodku. Na něj umístímě textbox do kterého budeme zadávat hledaný string (řetezec písmen, česky je to slovo, ale tohle zní víc programátorsky :)) a navíc to může obsahovat i mezery). Pak nějaké tlačítko pro zahájení vyhledávání. A jeden checkbox, který bude určovat jestli se mají hledat pouze celá slova nebo i části slov.(např. pokud hledáte výraz "lahvy", když je checkbox zaškrtnutý tak by to našlo jen slova jako "Lahvy" "lahvy" "LAHVY" apod., ale pokud není zaškrtnutý, nacházelo by to i slova jako "alahvy" "lahvyborec" atd...). Proto do textu checkboxu napíšeme "pouze celé slova" nebo tak něco. Všechy součásti přichitíme pouze ke spodku. U panelu potom v nastavení u visibility nastavíme false, aby standartně nebyl vidět.
V menu v úpravách si vytvoříme novou položku "Hledat" a přiřadíme k ní zkratku Ctrl + F.

Kód položky "Hledat" bude vypadat asi takto:
private void FindMenu_Click(object sender, System.EventArgs e)
{
     if (FindPanel.Visible == false)
          Poznamky.Height -= FindPanel.Height;
     else
          Poznamky.Height += FindPanel.Height;
     FindPanel.Visible = !FindPanel.Visible;
}

Pokud není hledací panel vidět - zmenši výšku RichTextBoxu o výšku Hledacího panelu a na vzniklém místě ho zobraz.
Pokud hledací panel vidět je - zvětši výšku RichTextBoxu o výšku Hledacího panelu a pak panel skryj.

Kód součástí hledacího panelu:
private void FindBox_TextChanged(object sender, System.EventArgs e)
{
     //pokud se změní text v Textboxu na vyhledávání 
     //v poznámkách se vybere text od indexu 0 do indexu 0 
     //čili žádný :) a kurzor se přesune na začátek
 
     Poznamky.Select(0, 0);
}

int i; //deklarace pomocné proměnné i 
     //bude udávat odkud se má začít hledat
int c; //deklarace pomocné proměnné c 
     //bude sloužit ke zjištění posledního nalezeného výrazu v textu

private void FindButton_Click(object sender, System.EventArgs e)

     //do i se uloží pozice kurzoru, popř. koncová pozice označeného textu 
     //odkud se má začít hledat

      i = Poznamky.SelectionStart + Poznamky.SelectionLength; 
     
     //do c se uloží hodnota i 
     c = i; 
     
     //pokud se i rovná délce celého textu, 
     //vyběhne MsgBox o tom že hledaný výraz nelze najít 
     //pokud by tu nebyla tahle pomnínka, po nalezení slova, které je zárověn posledním slovem v celém textu, by se začalo hledat zase od začátku
     //my však potřebujeme aby po nalezení posledního slova, při pokusu o další hledání objevila hláška že nic dalšího už nalézt nelze

     if (i == Poznamky.TextLength) 
     { 
          MessageBox.Show(FindBox.Text +" nelze najít", "Hledání...", 
          MessageBoxButtons.OK, 
          MessageBoxIcon.Information); 
          return; //ukončí se provádění příkazů metody FindButton_Click 
     }
 
     if (FindCheckBox.Checked == true) //pokud je v checkboxu vybráno "celá slova" 
          //hledej jenom celá slova od indexu i 
          Poznamky.Find(FindBox.Text, i, RichTextBoxFinds.WholeWord); 
     else //jinak
          //hledej i části slov od indexu i   
          Poznamky.Find(FindBox.Text, i, RichTextBoxFinds.None); 

     Poznamky.Select(); //nalezené slovo označ 

     i = Poznamky.SelectionStart + Poznamky.SelectionLength; //koncovou pozici slova ulož do i 

     if (c == i) 
          //pokud bude i obsahovat stejnou hodnotu jako při předchozím hledání 
          //vyběhne MsgBox, že už nic dalšího nenašel 
          MessageBox.Show(FindBox.Text +" nelze najít", "Hledání...", 
          MessageBoxButtons.OK, 
          MessageBoxIcon.Information);
}

Funkce hledání je hotova.


[ EXEcko ] [ zdrojáky ]



Správce sekce: Lahvy



14.2 2005

C++: pridano par odkazu na clanky o OpenGL, IRC, POP3 a BMP
14.8 2004

C++: přidán klient pro Internet Relay Chat (IRC)
11.7 2004

C++: opravil jsem zdrojak WebServeru, byla tam navic jedna funkce kterou jsem nepridal a mnoho zacatecniku by si s tim nemuselo vedet rady...
27.6 2004

Vytvořen IRC kanál #c-prog na serveru Quakenet
10.6 2004

C++: přidán program WebServer, stojí za prohlédnutí!
5.6 2004

C++: přidán článek o CheckBoxu
29.5 2004

C++: přidán program WinSock Mail
28.5 2004

C#: přidán program DNStoIP
Vaše IP je 54.80.236.48
Stránka byla načtena za 0.01314 sekund.