reklama

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
reklama
Určitě si přečtěte

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

Vybíráte herní periferii nebo hardware? Pak zapomeňte na nálepku Gaming

** Herní hardware se od toho běžného často liší jen vzhledem ** Při výběru stále nezapomínejte na základní parametry ** Poradíme jak vybrat herní hardware i periferie

20.  2.  2017 | Stanislav Janů | 36

10 nejhorších produktů v historii Microsoftu

10 nejhorších produktů v historii Microsoftu

20.  2.  2017 | Karel Javůrek | 141

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

AMD oficiálně představilo procesory Ryzen. Známe i jejich české ceny

** AMD uvedlo první tři procesory Ryzen 7 ** Všechny budou pracovat s osmi jádry a šestnácti vlákny ** Na pulty obchodů se dostanou už za týden

22.  2.  2017 | Stanislav Janů | 133

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

EU se děsí Windows 10. Prý o nás vědí až příliš. Microsoft chystá změny

** Evropští úředníci chtějí, aby byly Desítky transparentnější ** Microsoft od jara skutečně chystá změny ** Ochráncům soukromí to ale nestačí

21.  2.  2017 | Jakub Čížek | 218

Remix Singularity: Microsoft si na tom vylámal zuby. Jak dopadne Android?

Remix Singularity: Microsoft si na tom vylámal zuby. Jak dopadne Android?

** Microsoft do svých telefonů integroval desktopové prostředí ** Moc to ale nevyšlo, chyběl pořádný výkon ** Teď to zkoušejí ex-googleři s Remix Singularity

23.  2.  2017 | Jakub Čížek | 74


Aktuální číslo časopisu Computer

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

AMD Ryzen přichází

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

Příslušenství do USB-C

reklama
reklama