Vyhledavani v kompinentě MEMO (Delphi)
Zdravím.
Už 2 dny se trapim s vyhledavaním textu v komponentě Memo.
Da se toho vygoglit hodně ale bud to nefunguje spolehlině nebo to furt dokola najde první text od vrchu.
Nevite o něčem spolehlivem co mate odskoušene.
Toto třeby furt dokola nachazi první text od vrchu a fal nejde.
procedure TForm1.Button3Click(Sender: TObject);
var
I, L: Integer;
begin
Memo1.WordWrap:= False;
Memo1.Lines.LoadFromFile('Windows.pas');
I:= Pos('finalization', Memo1.Text);
if I > 0 then begin
L := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, I - 1, 0);
ShowMessage('Found at line ' + IntToStr(L));
// if you need to select the text found:
Memo1.SelStart := I - 1;
Memo1.SelLength := Length('finalization');
Memo1.SetFocus;
end;
end;
Chci něco jak třeba v PSPadu
Zadam text do editu a pak třeba klikanim na buton prolezu cely text a postupně se obarvuje vybrany text.
Tak v tom kodu nehledej od prvniho radku, ale od radku, na kterem stojis.
Kod mas od pme o prispevek vys, jen si zmen radek:
za
a bude ti hledat od radku na kterem stojis do konce
Dik.
MyMemo.CaretPos.Y
To je vončo, funguje
Ještě dotaz.
Jak vyhledavat text, tak aby nerozlišoval velka a mala posmena.
UpperCase Převede řetězec na velká písmena
LowerCase Převede řetězec na malá písmena
Takže hledany text si lehce převedu třeba jen na mala ale to prohledavaní.
nejak takto by to mohlo fungovat
Alebo rovno previesť na veľké písmená aj čo sa má hľadať:
No je mi to jasné.
V tom mem přikladu jsem hledal text v celém dokumentu.
V tom Vašem to postupně proleze řádek po řádku a v nich to hledá text.
I ty mala a velká písmena chápu.
Převedu hledaný text na mala a prohledávány řádek také a pak hledám.
Jak pak však označit vyhledaný text přes SetFocus.
V Memo1.SelStart se zadává počet znaku od začátku řetězce.
Když budu mít hledaný text na 10 řádku a třeba bude začínat na tom řádku na 20 pozici, jak zjistím X
A ještě jeden dotaz doufam že poslední.
Da se zabarvit nějaky řadek.
Třžeba kdybych chtěl 10 řadek žlutě.
to X ti vrati prave ta funkcia pos
No jsem jen lama.
Delphi mam ve škole jen 3 měsice ale řek bych že mi to vreti pozici na konkretním řadku.
Do Memo1.SelStart však musim zadat pozici od začatku textu ne.
Co to obarvovani řadku ??
Jde třeba 10 řadek vybarvit žlutě.
Ne pismo, to umím ale pozadi.
Je to trosku složitější. SelStart je od začátku textu. Takže si zjistíš SelStart pomocí řádku, na kterém je hledaný text (proměnná i z cyklu) a pak k tomu přičteš počet znaků, které najdeš pomoci POS()
Aj tak si myslím, že na to čo chce/potrebuje spraviť je vhodnejší/lepší TRichEdit, čo povieš JaFi?
S delphi se trapim teprve 4 měsice tak prosim trochu lepe vysvětlit.
Pokud jsem to dobše pochopil tak pomoci cyklu for prolezu všechny řadky od o až po předposlední žadek.
S každeho řadku si připočtu do X kolik ma řadek znaku pomoci length a pak přičtu poskedni přes POS().
Na doporučení pme jsem to překopal s memo do TRichEdit.
Nejde zjistit v teto komponentě ty pozici jednoduchšim zpusobem ??
V cykly pracujes s jednotlivymi radky a prohledavas je - od zacatku radku do konce radku. Tam zjistis, ze hledany text se v tom radku vyskytuje.
Ale pokud chces nalezeny text oznacit, musis pouzit SelStart a SelLength. SelStart urcuje pozici od zacatku textu, ne od zacatku radku.
Takze si musis prevest nalezeny radek na globalni pozici od zacatku (pomoci zpravy) a k tomu prictes pozici, kterou ti vratila funkce POS, abys nastavil SelStart na pozici v radku.
RichEdit je jednodussi, obsahuje i funkci pro hledani. Ale pro uceni bys to mohl zvladnout i pomoci toho MEMO
pme děkují moc.
Po několika upravach docela spokojen.
Jan ještě 2 dotazy.
1. Byl by problem docilit toho aby ta žluta barva podkladu byla přes cely řadek.
2. Jak vratim po ukončeni hledaní vše do puvodniho stavu.
Moh bych znovu načis text soubor ale takto to řešit nechci.
No v 17 rokach si toho člověk moc planovat nemuže.
Pokud napišu rano dotaz, pak škola, povinnosti a k PC se dostanu až večer.
Sobota a neděle Naši řeknou jedem na chatu a jsem v ?????
Vubec je nezajima že musim sedět na netu a čekat až mi pme poradí
Sypem si popol na hlavu, toto som si neuvedomil...
Modifikovaná verzia - pridané ďalšie tlačítko pre vrátenie highlight textu späť.
Uprav si to podľa seba...
Děkují mooc oboum, moc jste mi pomohli.
Jak tak koukam tak našemu učiteli programovani moc radost dělat nebudu
Tak jsem dal do google RichEdit Text Background Color Delphi.
Prolezl jsem všechno.
Všude se řeší to obarveni vybraneho textu.
Co když však nemam vybrany žadny text.
Co když chci změnit barvu pisma v celem 5 řadku.
Nebo.
Co když chci změnit barvu pozadi v celem 5 řadku.
Ako som Ti už dal príklad vyššie s celým riadkom pracuješ v premennej Line - pozeral si to vôbec?
Line sa zisťuje tu: Line := Perform(EM_LINEFROMCHAR, SelStart, 0) ;
Ak chceš, rovno si dosaď hodnotu čísla riadku Line := 5-1 (musíš odpočítať 1, lebo riadky sú číslované od 0)
Zmenit atributy casti textu muzes pouze tak, ze text oznacis, provedes zmenu a text odoznacis.
Je to stejne jako ve Wordu.