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, Díl, Znak


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

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

Apple: naše mapy budou nejlepší na světě. Tajně jsme na nich pracovali několik let

** Apple odhalil své plány na zcela nové mapy ** Několik let pracuje na nových mapách, které by měly předběhnout konkurenci ** Objeví se s příchodem iOS 12 pro vybrané státy

Karel Javůrek | 50

Nejlepší služby pro streamovanou hudbu: Není jen Spotify

Nejlepší služby pro streamovanou hudbu: Není jen Spotify

** Za měsíční předplatné je dnes možné získat přístup k desítkám milionů skladeb ** S některými méně známými interprety je ale stále problém ** Cena předplatného může být i jen pár desítek korun

Vladislav Kluska | 45

Jak John Kemeny a Thomas Kurtz stvořili BASIC, základ novodobého programování

Jak John Kemeny a Thomas Kurtz stvořili BASIC, základ novodobého programování

** Programovací jazyk BASIC tvořil základ osobních počítačů ** Původně byl určen vysokoškolským studentům, aby vůbec byli schopni využívat univerzitní počítač ** Jeden ze spoluautorů dělal výpočtáře Einsteinovi

Pavel Tronner | 78

USA se vrací do vesmíru! NASA představila devět statečných pro první lety soukromých lodí

USA se vrací do vesmíru! NASA představila devět statečných pro první lety soukromých lodí

** NASA zveřejnila nové termíny prvních demonstračních letů dvou soukromých kosmických lodí ** Známe už také jména prvních astronautů ** Jako první poletí k ISS Crew Dragon od SpaceX

Petr Kubala | 15

První český Maker Faire: Nadšené děti, skvělí kutilové a obří vzduchové dělo

První český Maker Faire: Nadšené děti, skvělí kutilové a obří vzduchové dělo

** Pražský Průmyslový palác o víkendu patřil kutilům všeho druhu ** Byli tu roboti, drony, chytrá elektronika ** A také nadšená děcka, vzduchové dělo a elektrická formule

Jakub Čížek

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

Jak funguje největší akumulátor v Česku: podívejte se do elektrárny Dlouhé Stráně

** Přečerpávací vodní elektrárna Dlouhé stráně je obdivuhodné technické dílo ** Stejná turbína vyrábí elektřinu i tlačí vodu zpět do horního jezera ** Strojovna elektrárny je zabudována v podzemí

David Polesný | 27


Aktuální číslo časopisu Computer

Jak mobily určují svoji polohu?

Velký test notebooků pro studenty

Nejlepší reproduktory na párty

Služby a aplikace pro výuku angličtiny