Tipy a triky v Delphi, díl 75.

Jak se rychle posunovat v textu u komponenty Memo? A jak upravit komponentu Edit tak, aby mohl uživatel vkládat jen vámi definované znaky? To bude náplní dnešního dílu.

Skokový posun v komponentě Memo

Následující jednoduchý tip umožňuje programově bez zásahu uživatele měnit pozici v komponentě Memo. Efekt bude stejný, jako kdyby uživatel listoval v dlouhém textu pomocí kláves PageUp a PageDown. Princip je jednoduchý a opět je využito systému zpráv Windows. Dvě procedury, sloužící ke skoku dopředu a nebo nazpět v textu, vlastně jen pošlou příslušné komponentě Memo zprávu o tom, že má provést daný skok v textu. Parametrem obou procedur je pouze komponenta Memo, na kterou se má celá akce aplikovat.

Obě procedury s jednoduchým příkladem s využitím dvou tlačítek následují:

procedure MemoPageDown(Memo: TMemo);
begin
  SendMessage(Memo.Handle, WM_VSCROLL, SB_PAGEDOWN, 0);
end;

procedure MemoPageUp(Memo: TMemo);
begin
  SendMessage(Memo.Handle, WM_VSCROLL, SB_PAGEUP, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  MemoPageDown(Memo1);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  MemoPageUp(Memo1);
end;

Omezení rozsahu zadávaného textu v komponentě Edit

Jistě občas potřebuje ve svých aplikacích zajistit to, aby uživatelem vložená data do komponenty Edit splňovala jisté parametry. Někdy jsou data číselná a pak je třeba kontrolovat, zda uživatel nevložil nějaký text a nebo naopak. Vkládaná data je prostě potřeba kontrolovat na správnost vložených údajů či jejich rozsah. A proč to zajišťovat až poté, co uživatel data "odešle" programu? Můžeme to udělat rovnou (tedy alespoň částečně) tím, že omezíme množinu znaků, které bude komponenta akceptovat. Tyto znaky mohou být například jen číslice nebo naopak pouze písmena a nebo třeba jen několik písmen, vše záleží pouze na vás. Pokusí-li se uživatel zadat jiné znaky než povolené, nestane se nic.

Celý kód této jednoduché kontroly vložíme přímo do události OnKeyPress příslušné komponenty Edit. Zde zároveň nadefinujeme konstantu (řetězec), obsahující "povolené" znaky. Následující příklad tedy uživateli dovolí vložit pouze čísla:

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
const
  Chars: string = `0123456789`;
var
  i: Integer;
  OK: Boolean;
begin
  i := 0;
  OK := False;
  if Key = #8 then OK := True;
  repeat
    i := i + 1;
    if Key = Chars[i] then OK := True;
  until (OK) or (i = Length(Chars));
  if not OK then Key := #0;
end;

Kromě znaků definovaných konstantou je ještě povolen jeden "znak" a tím je klávesa BackSpace (reprezentovaná číslem #8). Jinak by totiž nebylo možné napsaný text mazat.

Diskuze (8) Další článek: Finální KDE 3.1 a OpenOffice 1.0.2 CZ RC1

Témata článku: Software, Windows, Programování, Trik, Napsaný text, Znak, Díl


Určitě si přečtěte

Nová americká jaderná puma změní strategii boje

Nová americká jaderná puma změní strategii boje

** Bombardér Northrop Grumman B-2 Spirit amerického letectva nedávno svrhl jadernou pumu ** Šlo o test nové varianty pumy B61-12 ** Ta by měla mít hlavice schopné explodovat se silou 0,3 až 50 kilotun

Stanislav Mihulka | 63

Američtí mariňáci si tisknou kasárna z betonu na 3D tiskárně

Američtí mariňáci si tisknou kasárna z betonu na 3D tiskárně

** Americká námořní pěchota nedávno představila 3D tištěná kasárna pro vojáky ** Ty jim tiskne velká 3D tiskárna na beton ** Výsledkem je solidní obytný prostor, který je slušně chráněný před nepřátelskou palbou

Stanislav Mihulka | 18

Čtyřicet procent je moc. Spalovací motory nedokážou splnit požadavek EU na snížení emisí

Čtyřicet procent je moc. Spalovací motory nedokážou splnit požadavek EU na snížení emisí

** EP nařídil automobilkám snížit o 40 % emise CO2 ** EU chce zvýšit podíl elektromobilů ** Výrobci hrozí ztrátou pracovních míst

Karel Kilián | 254

Musk pošle lidi na oblet Měsíce. Japonský podnikatel Maezawa vezme na cestu až osm umělců

Musk pošle lidi na oblet Měsíce. Japonský podnikatel Maezawa vezme na cestu až osm umělců

** SpaceX chce nejdříve v roce 2023 vyslat lidi na oblet Měsíce ** Hlavním pasažérem bude japonský podnikatel Jusaku Maezawa, který vezme na cestu až 8 umělců ** Pětidenní cesta proběhne v chystané lodi BFS

Petr Kubala | 14

Šmírování kamerami Googlu: Koukněte se, co zachytily na Street View

Šmírování kamerami Googlu: Koukněte se, co zachytily na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 44

Pojďme programovat elektroniku: Jak vlastně funguje akcelerometr a gyroskop nejen ve vašem telefonu

Pojďme programovat elektroniku: Jak vlastně funguje akcelerometr a gyroskop nejen ve vašem telefonu

** Každý současný vybavený mobil má akcelerometr a gyroskop ** Jenže co každé z těchto čidel vlastně dělá a jak vypadá? ** Dnes si to vysvětlíme a do hry zapojíme i Airbus A380 a Arduino

Jakub Čížek | 11


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku