Tipy a triky v Delphi, díl 39.

A máme tu další díl našeho seriálu. Dnes se bude opět jednat o sprchu drobných, ale doufám že užitečných tipů. Předvedeme si, jak umístit vlastní tlačítko do nástrojové lišty Internet Exploreru, jak zobrazit HTML kód v komponentě WebBrowser, mizet kurzor myši a další tipy. Vzhůru do čtení.
Přidání vlastního tlačítka do panelu nástrojů v IE

Možná znáte různé programy, které se snaží vylepšit a rozšířit funkce Internet Exploreru. Oblíbenou módou zejména různých vyhledávačů (a to i českých) je vnutit svým uživatelům drobné utility, které například rozšíří nástrojový panel IE o vyhledávací políčko daného vyhledávače nebo umožní například odeslat zprávu SMS. Ponechme teď stranou, jak užitečné či neužitečné podobné prográmky jsou a zkusme si něco obdobného. Ukážeme si, jak přidat do panelu nástrojů vlastní tlačítko, které spustí námi definovanou aplikaci. Zároveň se do menu Nástroje přidá další položka se stejnou funkcí.

Celé je to vlastně velmi jednoduché a je to opět záležitost systémového registru, kam do příslušné větve IE vložíme náš záznam. Zdrojový kód tedy může vypadat například takto:

procedure TlacitkoIE(Path: string);
const
  Tagit = `\{10954C80-4F0F-11d3-B17C-00C0DFE39736}\`;
var
  Reg: TRegistry;
  Vetev: string;
begin
  Reg := TRegistry.Create;
  try
    with Reg do
    begin
      RootKey := HKEY_LOCAL_MACHINE;
      Vetev := `Software\Microsoft\Internet Explorer\Extensions` + Tagit;
      OpenKey(Vetev, True);
      WriteString(`ButtonText`, `Text tlačítka`);
      WriteString(`MenuText`, `Název položky v menu`);
      WriteString(`MenuStatusBar`, `Run Script`);
      WriteString(`ClSid`, `{1FBA04EE-3024-11d2-8F1F-0000F87ABD16}`);
      WriteString(`Default Visible`, `Yes`);
      WriteString(`Exec`, Path);
      WriteString(`HotIcon`, `,4`);
      WriteString(`Icon`, `,4`);
    end
  finally
    Reg.CloseKey;
    Reg.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
TlacitkoIE(`c:\windows\calc.exe`);
end;

Náš příklad přidá do nástrojové lišty tlačítko s nadpisem Text tlačítka a přidá do menu položku Název položky v menu. Pokud se vám na lištu tlačítko nepřidá, budete ho muset přes menu Zobrazit -> Panely nástrojů -> Vlastní přidat ručně a najdete ho mezi dostupnými položkami.

Aktivací tlačítka nebo položky z menu dojde ke spuštění Kalkulačky. Jak vidíte podle parametrů, lze též nastavit ikonku, která bude na tlačítku zobrazena a to jak ve své neaktivní podobě, tak po najetí myší. Místo mnou zvolené systémové ikony s číslem 4 můžete jako parametr pochopitelně uvést cestu k libovolné ikoně v souboru ICO nebo k nějaké jiné knihovně.

A jak se tlačítka a položky v menu zbavit, když už nás omrzí ? Jednoduše z registru smažeme příslušnou větev. To jsme ale již prováděli několikrát a tak věřím, že to každý zvládne sám.

V registrech se dá ale nastavit ohledně IE ještě řada dalších zajímavých věcí, takže zájemci nechť si otevřou Editor registru a pustí se do hledání dalších lahůdek.

Zobrazení HTML kódu v komponentě WebBrowser

Ukážeme si velmi jednoduchý příklad, jak pomocí kratičké funkce zobrazit v komponentě WebBrowser HTML kód. Funkce bude vypadat takto:

procedure WB_LoadHTML(WebBrowser: TWebBrowser; HTMLCode: string);
var
  sl: TStringList;
  ms: TMemoryStream;
begin
  WebBrowser.Navigate(`about:blank`);
  if Assigned(WebBrowser.Document) then
  begin
    sl := TStringList.Create;
    try
      ms := TMemoryStream.Create;
      try
        sl.Text := HTMLCode;
        sl.SaveToStream(ms);
        ms.Seek(0, 0);
        (WebBrowser.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
      finally
        ms.Free;
      end;
    finally
      sl.Free;
    end;
  end;
end;

Nyní si na formulář umístěte komponentu WebBrowser. Ne každá verze Delphi ji má, takže pokud ji na záložce Internet nevidíte a nebo podobnou záložku vůbec nemáte, není tento příklad bohužel pro vás.

Samotné použití naší funkce demonstruje poněkud neohrabaným způsobem následující kód, který berte spíše jako odstrašující příklad, nicméně je ideální pro pochopení celého principu. Tedy pokud ovládáte alespoň základy HTML, v opačném případě si zřejmě z tohoto tipu nic neodnesete.

procedure TForm1.Button1Click(Sender: TObject);
begin
WB_LoadHTML(WebBrowser1,`<html><body  bgcolor="#0000FF" text="#FFFFFF">Testovací stránka</html>`);
end;

Tato kratičká ukázka zobrazí v okně "prohlížeče" jednoduchý text bílou barvou na modrém pozadí. Jak vidíte, tímto způsobem zobrazovat celé stránky pochopitelně není moc praktické, ale věřím, že si již dokážete poradit sami a určitě pro vás nebude problém načíst stránku například z komponenty Memo a nebo přímo ze souboru.

Zobrazení vlastností komponent

Tento příklad zřejmě nevyužijete v reálných aplikacích či přesněji řečeno, nejedná o funkci, kterou by uživatelé vašich aplikací na první pohled mohli ocenit. Ukážeme si, jak jednoduchým způsobem zjišťovat za běhu aplikace vlastnosti všech komponent, které obsahuje. Může to být neocenitelná pomoc při ladění aplikace při fázi vývoje, při logování chyb v případě pádu aplikace a podobně.

Umístěte si na formulář komponentu Memo, do které budeme v naší ukázce vlastnosti komponent vypisovat. Poté můžete na formulář umístit libovolné další komponenty, na kterých si ověříte funkčnost našeho příkladu.

procedure ListComponentProperties(Component: TComponent; Strings: TStrings);
var
  Count, Size, I: Integer;
  List: PPropList;
  PropInfo: PPropInfo;
  PropOrEvent, PropValue: string;
begin
  Count := GetPropList(Component.ClassInfo, tkAny, nil);
  Size  := Count * SizeOf(Pointer);
  GetMem(List, Size);
  try
    Count := GetPropList(Component.ClassInfo, tkAny, List);
    for I := 0 to Count - 1 do
    begin
      PropInfo := List^[I];
      if PropInfo^.PropType^.Kind in tkMethods then
        PropOrEvent := `Event`
      else
        PropOrEvent := `Property`;
      PropValue := VarToStr(GetPropValue(Component, PropInfo^.Name));
      Strings.Add(Format(`[%s] %s: %s = %s`, [PropOrEvent, PropInfo^.Name,
        PropInfo^.PropType^.Name, PropValue]));
    end;
  finally
    FreeMem(List);
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.BeginUpdate;
  Memo1.Lines.Clear;
  ListComponentProperties(Button1, Memo1.Lines);
  Memo1.Lines.EndUpdate;
end;

Nejdůležitějším parametrem je pochopitelně komponenta, jejíž vlastnosti chceme zjistit (v naší ukázce je to Button1).

Zmizení kurzoru myši

Velice krátký a jednoduchý tip. Zmizení kurzoru myši docílíme takto:

ShowCursor(false);

a jeho opětovné zobrazení celkem logicky takto:

ShowCursor(true);

Je třeba něco dodávat ? Myslím, že určitě ne. Využití tohoto tipu nechám na vás.

Kopírování souboru se zobrazením průběhu

Chcete si vytvořit vlastní souborový manažer ? Pak se vám možná bude hodit tento tip, ve kterém si ukážeme kopírování souborů s ukazatelem průběhu celé akce. O stupínek výš bychom se s naším příkladem dostali, pokud by kopírování probíhalo v samostatném vlákně na pozadí, ale to poněkud přesahuje prostorové možnosti tohoto dílu seriálu. Takže nám opět pomůže obvyklé Application.ProcessMessages, aby nedošlo k "zamrznutí" aplikace po dobu kopírování.

procedure CopyFileWithProgressBar(Source, Destination : string);
var
  FromF,
  ToF        : file of byte;
  Buffer    : array[0..4096] of char;
  NumRead    : integer;
  FileLength : longint;
begin
  AssignFile(FromF,Source);
  reset(FromF);
  AssignFile(ToF,Destination);
  rewrite(ToF);
  FileLength:=FileSize(FromF);
  with Form1.Progressbar1 do
  begin
    Min := 0;
    Max := FileLength;
    while FileLength > 0 do
    begin
      BlockRead(FromF,Buffer[0],SizeOf(Buffer),NumRead);
      FileLength := FileLength - NumRead;
      BlockWrite(ToF,Buffer[0],NumRead);
      Position := Position + NumRead;
      Application.ProcessMessages;
    end;
    CloseFile(FromF);
    CloseFile(ToF);
  end;
end;

procedure TForm1.Button16Click(Sender: TObject);
begin
CopyFileWithProgressBar(`c:\zdroj.exe`,`c:\cíl.exe`);
end;

Jak vidíte, princip je velmi jednoduchý a snadno pochopitelný. Samozřejmě je nutné, aby byla formuláři umístěna komponenta ProgressBar.

Diskuze (9) Další článek: GeForce Tweak Utility 3.2 t32

Témata článku: Software, Internet, Programování, Testovací stránka, Díl, TRI, Pointer, Icon, Code, Trik, DEL


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

Šmírování kamerami Googlu: Koukněte, co se objevilo na Street View

Šmírování kamerami Googlu: Koukněte, co se objevilo na Street View

Google stále fotí celý svět do své služby Street View. A novodobou zábavou je hledat v mapách Googlu vtipné záběry. Podívejte se na výběr nejlepších!

redakce | 4

redakce
Mapy GoogleStreet View
26 užitečných rozšíření pro Chrome: Naučte prohlížeč nové věci

26 užitečných rozšíření pro Chrome: Naučte prohlížeč nové věci

** Prohlížeč Chrome obsahuje širokou škálu funkcí, neumí ale všechno ** Jeho schopnosti můžete rozšířit pomocí rozšíření ** Vybrali jsme pro vás zajímavé a užitečné doplňky

Karel Kilián | 47

Karel Kilián
Doplňky do prohlížečeChromeProhlížeče
Dostali jste nový počítač? Tohle s ním udělejte, než ho začnete používat

Dostali jste nový počítač? Tohle s ním udělejte, než ho začnete používat

** Každý nový počítač si zaslouží počáteční péči ** Odinstalujte bloatware a nezapomeňte na vhodné nastavení ** Poradíme, jak se o počítač s Windows 10 postarat

David Polesný, Stanislav Janů | 75

David PolesnýStanislav Janů
PočítačeNotebooky
Jak najít hranice území obcí a okresů, abyste věděli, kde se můžete pohybovat
Filip KůželJakub Čížek
KoronavirusMapy
Vážně dnes ještě někdo krade Adobe? Video můžete stříhat zdarma v Resolve a fotky i vektory zvládne Affinity

Vážně dnes ještě někdo krade Adobe? Video můžete stříhat zdarma v Resolve a fotky i vektory zvládne Affinity

** Kde jsou ty doby, kdy měl skoro každý doma Photoshop ** Photoshop a Premiere Pro od kamaráda nebo z warezu ** Dnes už to nemá smysl, existuje totiž hromada laciných alternativ

Jakub Čížek | 92

Jakub Čížek
Grafický editorStřih videa