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.
Tipy a triky v Delphi, díl 198. - další vylepšení Mema

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

Jak rozšířit signál Wi-Fi: Extender je nejlevnější a snadná cesta

Jak rozšířit signál Wi-Fi: Extender je nejlevnější a snadná cesta

** Wi-Fi extendery dobře poslouží k rozšíření signálu ** Jsou to malé krabičky do zásuvky s triviálním nastavením ** Zvolte raději výkonnější modely, svůj účel splní lépe

Včera | David Polesný | 27

11 tipů, jak efektivně a přesně sledovat počasí pomocí internetu

11 tipů, jak efektivně a přesně sledovat počasí pomocí internetu

** Sledujte počasí z více zdrojů a podrobněji, přesněji tak určíte, jaké počasí vás potká na dovolené ** Na webu najdete hromadu pokročilých předpovědí počasí, ale i specializované meteorologické služby ** Vybrali jsme 14 služeb na počasí, které se vám můžou hodit

23.  6.  2017 | Jakub Čížek | 19

Nejlepší program pro střih videa na doma: 9 video editorů, ze kterých si vyberete

Nejlepší program pro střih videa na doma: 9 video editorů, ze kterých si vyberete

** Pokročilé střihové programy pro neprofesionální využití stojí do 3 000 Kč, jsou ale i zdarma ** Podpora 4K, hromada editačních funkcí a efektové filtry jsou samozřejmostí ** Vybrali jsme 9 nejzajímavějších programů pro nejrozšířenější operační systém Windows

25.  6.  2017 | Stanislav Janů | 34


Aktuální číslo časopisu Computer

Bojujeme proti Fake News

Dva velké testy: fotoaparáty a NASy

Co musíte vědět o změně evropského roamingu

Radíme s výběrem základní desky