Tipy a triky v Delphi, díl 68.

Jak určit souřadnice kurzoru v komponentě Memo a jak zařídit, aby každá buňka komponenty StringGrid měla vlastní bublinkovou nápovědu ? Přesně to si dnes ukážeme.

Pozice kurzoru v komponentě Memo

Ukážeme si velmi jednoduchý trik, jak zjistit pozici kurzoru v komponentě Memo. Následujících několik řádků kódu nám zjistí, na kterém řádku se kurzor nachází, na kolikáté pozici daného řádku je kurzor umístěn a kolik znaků daný řádek obsahuje. Pozice kurzoru, vlastně jakési souřadnice X a Y, jsou počítány od nuly a počátek této "souřadnicové soustavy" je v levém horním rohu Mema. Levý horní roh má tedy souřadnice [0, 0]. Dále je třeba zdůraznit, že souřadnice jsou vždy absolutní, neposouvají se relativně vzhledem k počátku, takže pokud je komponenta Memo plná textu, který je odrolován mimo viditelnou část komponenty, vždy se souřadnice počítají od "odrolovaného" počátku a ne jen z viditelné části.

procedure TForm1.Button1Click(Sender: TObject);
var
  PoziceRadku, PoziceKurzoru, DelkaRadku: integer;
begin
  PoziceRadku := SendMessage(Memo1.Handle, EM_LINEFROMCHAR, Memo1.SelStart, 0);
  PoziceKurzoru := SendMessage(Memo1.Handle, EM_LINEINDEX, PoziceRadku, 0);
  DelkaRadku := SendMessage(Memo1.handle, EM_LINELENGTH, PoziceKurzoru, 0);
  PoziceKurzoru := Memo1.SelStart - PoziceKurzoru;
  ShowMessage(`Řádek: ` + IntToStr(PoziceRadku) + #13 + `Pozice kurzoru na řádku: ` + IntToStr(PoziceKurzoru) + #13 + `Délka řádku: ` + IntToStr(DelkaRadku));
end;

Každá buňka ve StringGrid s vlastním Hintem

I náš druhý dnešní tip souvisí vzdáleně se souřadnicemi. Předvedeme si velmi jednoduchý postup, pomocí kterého zajistíme, aby každá jednotlivá buňka komponenty StringGrid měla svojí vlastní bublinkou nápovědu (Hint). Jistě dobře víte, že standardně je zobrazena pro všechny buňky stejná nápověda, což ale není moc výhodné. Text nápovědy by se měl dynamicky měnit například na základě obsahu buňky, nad kterou se kurzor zrovna nachází a právě to si teď ukážeme.

Celá věc je vlastně náramně jednoduchá. Nejprve nadefinujeme v události OnCreate formuláře počáteční hodnotu nápovědy (v našem případě podle první buňky) a poté do události OnMouseMove komponenty StringGrid přidáme jednoduchý kód. Ten vždy nejprve zjistí, zda se kurzor nachází na jiné buňce než v předchozím případě (souřadnice jsou uloženy v globálních proměnných) a pokud tomu tak je, změní text nápovědy a ta se poté sama zobrazí. V naší malé ukázce se jako text nápovědy vždy zobrazí souřadnice buňky, nad kterou se kurzor právě nachází.

.
.
.
private
    { Private declarations }
    Sloupec: integer;
    Radek: integer;
.
.
.

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Hint := `[0,0]`;
  StringGrid1.ShowHint := True;
end;

procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
var
  r: integer;
  s: integer;
begin
  StringGrid1.MouseToCell(x, y, s, r);
  if ((Radek <> r) or (Sloupec <> s)) then
  begin
    Radek := r;
    Sloupec := s;
    Application.CancelHint;
    StringGrid1.Hint := `[`+ IntToStr(r) + `,` + IntToStr(s) + `]`;
  end;
end;

Nezapomeňte, že i v tomto případě se souřadnice počítají od nuly a začínají v levém horním rohu.

Diskuze (1) Další článek: SiS oficiálně uvádí grafický čip Xabre 600

Témata článku: Software, Programování, Jednoduchá pozice, Jednoduchý trik, Sloupec, Buňka, TRI, Trik, Díl, DEL


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

Nejlepší notebooky do 20 000 Kč. Tipy, co se dnes vyplatí koupit

Nejlepší notebooky do 20 000 Kč. Tipy, co se dnes vyplatí koupit

** S cenou do 20 tisíc lze vybrat solidní notebook na práci i hry ** Přenosné notebooky nabídnou i kovová těla a rychlý hardware ** Na hraní se hodí více peněz, ale na použitelný základ dvacet tisíc stačí

Tomáš Holčík, David Polesný | 47

Pozor, na Česko v těchto dnech útočí falešné Tesco, Penny Market a Lidl

Pozor, na Česko v těchto dnech útočí falešné Tesco, Penny Market a Lidl

** Máme tu další českou phishingovou vlnu ** Podle průzkumů máme stále problém s kybernetickou gramotností ** Nebezpečím jsou děti, které opouštějí rodiče

Jakub Čížek | 34

Co je TikTok: Svérázná sociální síť chytla mladé uživatele, už jich má už 1,5 miliardy

Co je TikTok: Svérázná sociální síť chytla mladé uživatele, už jich má už 1,5 miliardy

** Sociální síť TikTok získala stamiliony uživatelů a stále roste ** Jaký obsah na ní najdete a co můžete v jejím rámci čekat? ** Je to zábava pro mladé, nebo platforma pro úchyláky?

Karel Kilián | 34

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

Vyzkoušeli jsme chytrou čínskou zásuvku Sonoff S26 za tři stovky. Nevyhořeli jsme

** Je sice z Aliexpressu, ale funguje ** Můžete ji ovládat hlasem přes Amazon Echo nebo Google Home ** Za tři stovky zautomatizuje menší 230V spotřebič

Jakub Čížek | 109


Aktuální číslo časopisu Computer

Megatest: 20 powerbank s USB-C

Test: mobily do 3 500 Kč

Radíme s výběrem routeru

Tipy na nejlepší vánoční dárky