Tipy a triky v Delphi, díl 149. - Používáme HotTrack

Dnešním tématem bude vlastnost HotTrack, kterou nalezneme například u komponenty PageControl. Naučíme se aplikovat tuto vlastnost prakticky na libovolnou vizuální komponentu.

Zapnutím vlastnosti HotTrack konkrétně u zmiňované komponenty PageControl docílíme toho, že po najetí kurzoru myši na jednotlivé záložky (TabSheet), resp. jejich titulky, dojde k jejich zvýraznění změnou barvy. Tento drobný efekt slouží především pro lepší orientaci uživatele a celkově zpřehledňuje práci s uživatelským prostředím aplikace.

Dnes si ukážeme, jak tento efekt aplikovat na libovolnou komponentu, na kterou si jen vzpomenete. Nejprve si odchytíme pomocí procedury WndProc tu komponentu, nad níž se nachází kurzor. Poté pošleme tento parametr naší proceduře HotTrack, která se postará o zvýraznění daného objektu. V našem příkladu je použito zvýraznění komponent Label modrou barvou, CheckBox je červený a písmo tlačítka je změněno na tučné. Pochopitelně můžete použít libovolné označení dle vaší fantazie a možností jednotlivých objektů.

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    CheckBox1: TCheckBox;
    Button1: TButton;
  procedure WndProc(var Mesg: TMessage); override;
  procedure HotTrack(Sender: TObject; Msg: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.WndProc(var Mesg : TMessage);
begin
  if Mesg.LParam = Longint(Label1) then HotTrack(Label1, Mesg.Msg);
//  if Mesg.LParam = Longint(Label2) then HotTrack(Label2, Mesg.Msg);
  if Mesg.LParam = Longint(Label3) then HotTrack(Label3, Mesg.Msg);
  if Mesg.LParam = Longint(CheckBox1) then HotTrack(CheckBox1, Mesg.Msg);
  if Mesg.LParam = Longint(Button1) then HotTrack(Button1, Mesg.Msg);
  inherited WndProc(Mesg);
end;

procedure TForm1.HotTrack(Sender: TObject; Msg: Integer);
begin
  if Sender is TLabel then
    begin
      if (Msg = CM_MOUSEENTER) then (Sender as TLabel).Font.Color := clBlue;
      if (Msg = CM_MOUSELEAVE) then (Sender as TLabel).Font.Color := clWindowText;
    end;

  if Sender is TCheckBox then
    begin
      if (Msg = CM_MOUSEENTER) then (Sender as TCheckBox).Font.Color := clRed;
      if (Msg = CM_MOUSELEAVE) then (Sender as TCheckBox).Font.Color := clWindowText;
    end;

  if Sender is TButton then
    begin
      if (Msg = CM_MOUSEENTER) then (Sender as TButton).Font.Style := [fsBold];
      if (Msg = CM_MOUSELEAVE) then (Sender as TButton).Font.Style := [];
    end;
end;

end.

Jak vidíte z kódu, můžeme velmi snadno ovlivnit, na které konkrétní komponenty bude efekt použit. Drobnou úpravou kódu pak můžeme aktivovat tento efekt pro všechny komponenty daného druhu.

I tentokrát je pro vás připraven ukázkový projekt (Delphi7) a to i ve zkompilované podobě, takže můžete stahovat zde.

Váš názor Další článek: Panda nabízí beta verzi antiviru s novými detekčními schopnostmi

Témata článku: Software, Windows, Programování, Díl, Trik, DEL, TRI, Hot


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

Porovnání deseti cloudových disků: kam a za kolik uložit 100 GB, 1 TB a 10 TB dat?

Porovnání deseti cloudových disků: kam a za kolik uložit 100 GB, 1 TB a 10 TB dat?

** Zjistili jsme, kam do cloudu nejvýhodněji uložíte data ** Vytvořili jsme žebříček cen deseti cloudových úložišť ** Ceny se liší - často i velice výrazně!

Karel Kilián | 102

Nvidia představila grafické karty GeForce RTX 3090, RTX 3080 a RTX 3070. Známe české ceny

Nvidia představila grafické karty GeForce RTX 3090, RTX 3080 a RTX 3070. Známe české ceny

** Nvidia uvedla nové desktopové grafické karty GeForce RTX 3000 ** Jedná se o modely GeForce RTX 3070, 3080 a 3090 ** K výrobě se používá 8nm technologii od Samsungu

Karel Javůrek | 67


Aktuální číslo časopisu Computer

Megatest mobilů do 8 000 Kč

Test bezdrátových headsetů

Linux i pro začátečníky

Jak surfovat anonymně