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


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

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

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 | 60

Windows 10 už jsou na 700 milionech počítačů, ale není to jen labutí píseň?

Windows 10 už jsou na 700 milionech počítačů, ale není to jen labutí píseň?

** Windows 10 překonaly hranici 700 milionů instalací ** To je úctyhodné číslo a miliarda se blíží ** Analýzy ale i tak ukazují proměnu, jak používáme počítače a mobily

Jakub Čížek | 49

Inteligentní akvárium Bluenero se o rybičky postará samo

Inteligentní akvárium Bluenero se o rybičky postará samo

** Chcete chovat akvarijní rybičky, ale nemáte čas se o ně starat? ** Chytré akvárium je samo nakrmí a postará se o jejich komfort ** Projekt Bluenero zatím sbírá finance na Indiegogo

Karel Kilián | 20

PortraitPro: Vyzkoušeli jsme program, který prý udělá z každé „žáby“ krasavici

PortraitPro: Vyzkoušeli jsme program, který prý udělá z každé „žáby“ krasavici

** V digitálním světě nemůžete věřit všemu ** Nová generace 3D fotoeditorů zvládne divy ** Vyzkoušeli jsme PortraitPro, který vám změní i kontaktní čočky

Jakub Čížek | 10


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