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í, Napsaný text, Znak, Díl, Trik


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

Tohle tak jednou zažít: Nová vzducholoď Airlander 10 s prosklenou podlahou

Tohle tak jednou zažít: Nová vzducholoď Airlander 10 s prosklenou podlahou

** Airlander 10 nabídne plavby vzduchem v interiéru s prosklenou podlahou ** Luxusní vzducholoď byla původně vyvíjena pro vojenské účely ** Počítá se s třídenními „kochacími“ výlety za poznáním

Karel Kilián | 7

Moral machine: Už víme, zdali je lepší zabít psy, sebe nebo matky na přechodu

Moral machine: Už víme, zdali je lepší zabít psy, sebe nebo matky na přechodu

** Jak byste se sami vypořádali s tramavajovým dilematem? ** Vědci před lety spustili globální dotazník ** Nyní se pochlubili s výsledky

Jakub Čížek | 153

Pojďme programovat elektroniku: Vyzkoušíme IR, ovládneme světýlko přes Bluetooth a vyšleme zprávu na sto metrů

Pojďme programovat elektroniku: Vyzkoušíme IR, ovládneme světýlko přes Bluetooth a vyšleme zprávu na sto metrů

** Budeme odposlouchávat IR ovladač klimatizace ** Vyrobíme laciný rádiový vysílač ** Vyzkoušíme komunikaci pomocí Bluetooth a v pásmu 433 MHz

Jakub Čížek | 20