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, Sloupec, DEL, Trik, TRI, Díl, Buňka, Jednoduchý trik


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

Bankovní identita bude jednotná. K České spořitelně, ČSOB a KB se připojí menší banky
Lukáš Václavík
Portál občanaBankaeGovernment
Cableporn: Podívejte se na úžasná díla umělců z podnikových serveroven

Cableporn: Podívejte se na úžasná díla umělců z podnikových serveroven

** Uspořádání kabelů můžete vnímat i jako podivný druh umění ** To nejkrásnější se skrývá v datacentrech a serverovnách ** Podívejte se na skutečné „cableporn“ z optiky i kroucené dvojlinky

Vojtěch Malý | 53

Vojtěch Malý
DatacentraServery
Čekali jsme skoro šest let. Android Auto jede do Česka i na Slovensko
Lukáš Václavík
Android AutoNavigaceGoogle
26 užitečných rozšíření pro Chrome: Naučte prohlížeč nové věci

26 užitečných rozšíření pro Chrome: Naučte prohlížeč nové věci

** Prohlížeč Chrome obsahuje širokou škálu funkcí, neumí ale všechno ** Jeho schopnosti můžete rozšířit pomocí rozšíření ** Vybrali jsme pro vás zajímavé a užitečné doplňky

Karel Kilián | 47

Karel Kilián
Doplňky do prohlížečeChromeProhlížeče
Pozor na tyto doplňky pro Chrome a Edge. Mohou obsahovat malware, varuje Avast
Jakub Čížek
MalwareProhlížeče
Můžete mít dvakrát rychlejší VDSL? Mapa Cetinu ukazuje, kde je dostupný bonding
Lukáš Václavík
CETINPřipojení k internetu
Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

** Vybrali jsme nejlepší monitory na práci i pořádné hraní ** Nejlevnější monitor s kvalitním panelem nestojí ani tři tisíce ** Rozlišení 4K a větší obrazovka už není nedostupný luxus

David Polesný | 31

David Polesný
Monitory

Aktuální číslo časopisu Computer

Megatest rychlých Wi-Fi 6 routerů

Jak ztišit počítač

Velký test mATX skříní