Tipy a triky v Delphi, díl 198. - další vylepšení Mema

Dva dnešní tipy se týkají komponenty Memo. V prvním tipu se naučíme označovat celý řádek textu po kliknutí myší, druhý příklad pak ukazuje, jak nastavit odsazení textu od okraje.

Označování řádku myší

První tip se týká označení celého řádku textu, pokud na něj uživatel klikne. Je to obvyklá funkce textových editorů, samozřejmě se liší způsob a místo, kam je třeba kliknout. V našem případě to bude přímo do textu a daný řádek se celý označí.

Jak na to? Začneme nejprve vytvořením nového projektu. Jelikož se oba dnešní tipy týkají komponenty Memo, použijeme jeden společný program. Na formulář pak už stačí umístit jen Memo. Příklad s označováním řádku bude "navěšen" na událost OnClick této komponenty. Ta spustí funkci SelectMemoLine, kterou si pro tento účel připravíme.

Jak jinak, opět půjde o zprávy systému. Funkci pošleme jako parametr pouze jméno komponenty Memo, o kterou se nám jedná. Funkce si pak sama zjistí, na kterém řádku se nacházíme a pomocí vlastností SelStart a SelLength označíme text řádku. Vše je velmi názorně vidět ve zdrojovém kódu (viz dále)

Pravý a levý okraj

Pro druhý příklad budeme potřebovat tlačítko, které celou akci spustí, takže jej přidáme na formulář. Co bude umět? Nastaví v komponentě Memo okraje, které si sami zvolíme. Implicitně jsou nulové a text se píše od levého horního rohu. Jednoduchým způsobem můžeme zařídit odsazení celého textu zleva i zprava a to opět s využitím zpráv Windows. V ukázce jsou použity hodnoty 20 a 10 pixelů. Nyní již tedy slibovaný zdrojový kód:


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure Memo1Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SelectMemoLine(Memo: TCustomMemo) ;
var
   Line: integer;
begin
   with Memo do
   begin
     Line := Perform(EM_LINEFROMCHAR, SelStart, 0) ;
     SelStart := Perform(EM_LINEINDEX, Line, 0) ;
     SelLength := Length(Lines[Line]);
   end;
end;

procedure TForm1.Memo1Click(Sender: TObject);
begin
  SelectMemoLine(Memo1);
end;

procedure TForm1.Button1Click(Sender: TObject) ;
var
  R: TRect;
  LeftMargin, RightMargin: integer;
begin
  LeftMargin := 20;
  RightMargin := 10;
  R := Memo1.ClientRect;
  R.Left := R.Left + LeftMargin;
  R.Top := R.Top + 2;
  R.Bottom := R.Bottom - 2;
  R.Right := R.Right - RightMargin;
  SendMessage(Memo1.Handle, EM_SETRECT, 0, Longint(@R)) ;
end;

end.

Program by měl bez problému běžet i ve starších Windows, ale opět připomínám, že zde je kapacita komponenty Memo omezena na 64 kB. Pro skutečný textový editor tak není tato komponenta příliš vhodná. Pro krátké informační texty je však dostačující.

Témata článku: Software, Windows, Programování

1 komentář

Nejnovější komentáře

  • gully, gully 31. 8. 2005 0:57:53
    http://tipy-a-triky-v-delphi.wz.cz
Určitě si přečtěte

Kde nejlevněji uložit 1 TB dat: Srovnali jsme aktuální ceny cloudových úložišť

Kde nejlevněji uložit 1 TB dat: Srovnali jsme aktuální ceny cloudových úložišť

** Srovnali jsme známá cloudová úložiště podle toho, kolik měsíčně zaplatíte za 1TB ** Ceny se pohybují od dvou stovek až po tisíc korun ** Google umožní uložit až 30 TB dat

18.  3.  2017 | Stanislav Janů | 113

Pojďme programovat elektroniku: Meteostanice, která bude díky Sigfoxu posílat stav počasí třeba z vrcholu Sněžky

Pojďme programovat elektroniku: Meteostanice, která bude díky Sigfoxu posílat stav počasí třeba z vrcholu Sněžky

** Příští roky budou ve znamení internetu věcí ** Podívali jsme se podrobně na síť Sigfox ** Takhle s ní komunikují krabičky z celé Evropy

19.  3.  2017 | Jakub Čížek | 18

Obří Mechroboti jsou realitou, měří čtyři metry a mají hmotnost přes 1,5 tuny

Obří Mechroboti jsou realitou, měří čtyři metry a mají hmotnost přes 1,5 tuny

** Jihokorejská společnost Hankook Mirae Technology vyrábí obří Mechroboty ** Jsou určené pro ovládání člověkem uvnitř ** V prodeji se objeví koncem tohoto roku za 200 milionů korun

20.  3.  2017 | Karel Javůrek | 18

Google představil nový Android O. Na co se můžeme těšit?

Google představil nový Android O. Na co se můžeme těšit?

** Google vypustil vývojářskou verzi nového Androidu ** Přinese lepší notifikace nebo prodlouženou výdrž ** K uživatelům se dostane na podzim

Včera | Stanislav Janů | 53


Aktuální číslo časopisu Computer

Supertéma o počítačové bezpečnosti

AMD Ryzen přichází

Velké testy kinoprojektorů a levných sluchátek

Příslušenství do USB-C