Tipy a triky v Delphi, díl 24.

Dneska se podíváme nejprve na spořič obrazovky, poté si zkusíme otestovat, zda aplikace odpovídá nebo došlo k jejímu pádu, a také se začneme zabývat tiskárnami a vůbec věcmi souvisejícími s tiskem.
Zjištění doby, za kterou se aktivuje spořič obrazovky

Potřebujete-li z nějakého důvodu zjistit, za jaký časový interval se aktivuje spořič obrazovky, můžete využít následující funkci, která vám tuto dobu vrátí v sekundách.

function GetScreenSaverTimeout: Integer;
begin
SystemParametersInfo(SPI_GETSCREENSAVETIMEOUT, 0, @result, 0);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(IntToStr(GetScreenSaverTimeout) + ` sekund`);
end;

Nutno ovšem poznamenat, že funkce vám vrátí hodnotu i v tom případě, že právě není žádný spořič v ovládacích panelech obrazovky vybrán. Když se do ovládacích panelů podíváte a nastavíte spořič obrazovky na "není", sice logicky nebudete moci měnit dobu jeho aktivace (tato volba je „disablovaná“), ale přesto tam je původní hodnota (neboli hodnota, která bude platná ihned po zvolení nějakého spořiče) vidět.

Test, zda aplikace odpovídá či ne

Upřímně řečeno, tento tip se asi moc v praxi neuplatní, ale proč si to nevyzkoušet. Jistě víte, že pokud se nějaká aplikace jak se říká "kousne" neboli přestane systému z nějakého důvodu odpovídat (což sice nemusí vždycky znamenat její pád, ale obvykle tomu tak je), zobrazí se po čase dialog k uzavření aplikace (nebo se počká, zda začne znovu odpovídat). Nebudeme se teď raději zabývat tím, jak moc spolehlivě tento proces funguje či spíše nefunguje (hovoříme-li o Windows 9x), a zkusíme si sami zjistit, zda daná aplikace odpovídá.

function AppIsResponding(ClassName : string) : boolean;
const
TIMEOUT = 50;

var
  Res: DWORD;
  h: HWND;
begin
  h := FindWindow(PChar(ClassName), nil);
  if h <> 0 then
    result := SendMessageTimeout(H, WM_NULL, 0, 0, SMTO_NORMAL or SMTO_ABORTIFHUNG, TIMEOUT, Res) <> 0
  else
  ShowMessage(Format(`%s nenalezeno!`,[ClassName]));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
if AppIsResponding(`Notepad`) then ShowMessage(`Aplikace odpovídá.`);
end;

V příkladu je vidět použití pro Poznámkový blok. V těle samotné funkce je konstanta, které určuje časový interval čekání na odezvu v milisekundách.

Výpis tiskáren instalovaných v systému

Problematikou tiskáren a tisku obecně jsme se v našem seriálu dosud nezabývali a je to možná škoda. Proto si teď ukážeme několik tipů a příště v tom možná ještě budeme částečně pokračovat. Nejprve tedy výpis instalovaných tiskáren. V tom nám pomůže knihovna Printers; celý kód je vlastně velice jednoduchý. Předpokladem je, že máte někde na formuláři umístěn ListBox, kam se budou instalované tiskárny vypisovat. Součástí výpisu je též port tiskárny. A zde je tedy jednoduchý výpis:

procedure TForm1.Button1Click(Sender: TObject);
begin
ListBox1.Items := Printer.Printers;
ListBox1.ItemIndex := Printer.PrinterIndex;
end;

Jaké formáty papíru tiskárna podporuje?

Zajímavým parametrem tiskárny je též seznam podporovaných médií (či chcete-li podporovaných rozměrů papíru), na které je tiskárna schopna tisknout. Právě jejich seznam se teď naučíme zjišťovat. Opět využijeme knihovny Printers a také knihovny WinSpool, jejíž funkce DeviceCapabilities nám právě s použitím vhodného parametru "prozradí" názvy jednotlivých typů papíru. Jejich seznam budeme pro změnu vypisovat do komponenty Memo, takže je nutno ji přidat na formulář.

procedure TForm1.Button1Click(Sender: TObject);
type
TPaperName = array [0..63] of Char;
TPaperNameArray = array [1..High(Integer) div SizeOf(TPaperName)] of TPaperName;
PPaperNameArray = ^TPaperNameArray;
var
Device, Driver, Port : array[0..255] of Char;
hDevMode : THandle;
i, CountPaperFormats : Integer;
pPaperFormats : pPaperNameArray;
begin
Memo1.Lines.Clear;
Printer.GetPrinter(Device, Driver, Port, hDevmode);
CountPaperformats := WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, Nil, Nil);
if CountPaperformats > 0 then
begin
  GetMem(pPaperformats, CountPaperformats * SizeOf(TPaperName));
  try
  WinSpool.DeviceCapabilities(Device, Port, DC_PAPERNAMES, PChar(pPaperFormats), Nil);
  for i := 1 to CountPaperformats do Memo1.Lines.Add(pPaperformats^[i]);
  finally
  FreeMem(pPaperFormats);
  end;
end;
end;

Podporuje tiskárna barevný tisk?

Na závěr si dnes ukážeme, jak zjistit další neméně zajímavou a důležitou vlastnost tiskárny – zda může tisknout barevně. I v tomto případě nám pomůže knihovna Printers.

procedure TForm1.Button1Click(Sender: TObject);
var
Device, Driver, Port: array[0..255] of Char;
DM1, DM2 : PDeviceMode;
Sz: Integer;
DevMode: THandle;
begin
Printer.PrinterIndex := -1;
Printer.GetPrinter(Device, Driver, Port, DevMode);
if DevMode <> 0 then
begin
  DM1 := nil;
  DM2 := nil;
  Sz := DocumentProperties(0, 0, Device, DM1^, DM2^, 0);
  GetMem(DM1, Sz);
  DocumentProperties(0, 0, Device, DM1^, DM2^, DM_OUT_BUFFER);
  if DM1^.dmColor >1 then ShowMessage(`Tiskárna podporuje více barev`)
  else ShowMessage(`Tiskárna podporuje jen černou a bílou`);
  if DM1^.dmFields and DM_COLOR <> 0 then ShowMessage(`Tiskárna podporuje barevný tisk`)
  else ShowMessage(`Tiskárna nepodporuje barevný tisk`);
  FreeMem(DM1);
end;
end;

Příště se pustíme do samotného tisku a ukážeme si některá další zajímavá nastavení a vlastnosti tiskárny a tisku všeobecně.

Diskuze (2) Další článek: Hackněte si počítač

Témata článku: Software, Windows, Programování, Trik, Zajímavý parametr, Device, Elsa, TRI, Instalovaná aplikace, Zajímavá funkce, Původní hodnota, Timeout, Díl, DEL


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

Jak v prohlížeči vypnout oznámení zasílaná webovými stránkami

Jak v prohlížeči vypnout oznámení zasílaná webovými stránkami

** Obtěžují vás neustálé dotazy webů, zda chcete zobrazovat oznámení? ** Můžete je zakázat, a to jak kompletně, tak i pro jednotlivé stránky ** Připravili jsme návody pro Chrome, Firefox, Edge a Operu

Karel Kilián | 11

Karel Kilián
Jak na InternetTipyProhlížeče
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 | 90

Jakub Čížek
Grafický editorStřih videa
Vodafonu se zhroutila kabelovka. Síť bývalého UPC má výpadky
Lukáš Václavík
VodafoneUPC
Nejlepší notebooky do 10 000 korun: Co má ještě smysl kupovat. A co ne?

Nejlepší notebooky do 10 000 korun: Co má ještě smysl kupovat. A co ne?

** Notebooky s cenou do deseti tisíc korun jsou plné kompromisů ** Existuje několik modelů dobře použitelných pro nenáročné použití ** Vhodnou alternativou jsou tablety nebo repasované počítače

David Polesný | 94

David Polesný
Jak vybrat notebookNotebooky
Pozor na tyto doplňky pro Chrome a Edge. Mohou obsahovat malware, varuje Avast
Jakub Čížek
MalwareProhlížeče
Velký den pro Apple: Uvedl tři nové Macy s vlastním procesorem M1
Lukáš Václavík
PočítačeApple

Aktuální číslo časopisu Computer

Jak prodloužit výdrž notebooku

Velké testy: gamepady a inkoustové tiskárny

Důkladný test Sony Playstation 5