Tipy a triky v Delphi, díl 22.

V dnešním poněkud kratším předvánočním vydání se nejprve podíváme na zajímavé zkombinování tlačítka a ukazatele průběhu, dále si ukážeme jak zjišťovat v jakém stavu nastartovaly Windows, ukážeme si jak vytvořit virtuální disk a některé další zajímavé tipy.
Ukazatel průběhu uvnitř tlačítka

Nejprve si tedy ukážeme jednu zajímavou kombinaci dvou komponent. Umístíme ukazatel průběhu – ProgressBar – přímo do tlačítka. Výsledný efekt je poměrně zajímavý a můžete tak ušetřit někdy drahocené místo na formuláři, který je již přeplněn dalšími vizuálními komponentami.

Po stisknutí tlačítka se uvnitř něj objeví běžný ProgressBar, který indikuje daný průběh a po jeho ukončení zmizí a objeví se opět původní vnitřek tlačítka – jeho nadpis. V naší ukázce je pro demonstraci funkčnosti použit cyklus s funkcí Sleep, kterou v ostré aplikaci samozřejmě nahradíte činností, kterou má vaše aplikace vykonávat.

Jak vidíte v kódu, ProgressBar je umístěn uvnitř tlačítka tak, aby kolem něj vznikl decentní okraj. Jeho velikost si samozřejmě můžete upravit dle vlastních potřeb. Nezapomeňte také ze všeho nejdříve nastavit v Object Inspectoru u použitého ProgressBaru vlasnost Visible na False. Jinak fantazii se meze nekladou, takto můžete použít i jiný něž jen standardní ProgressBar (pokud máte třeba nějaký hezčí jako komponentu), protože toto řešení je poměrně univerzální. A když se to vezme do důsledku, můžete takto (s jistými specifickými omezeními) vlastně kombinovat řadu komponent, které spolu na první pohled nemají moc souvislostí. Chce to jen nápad.

procedure TForm1.FormCreate(Sender: TObject);
begin
ProgressBar1.Parent := Button1;
ProgressBar1.Width := Button1.Width-7;
ProgressBar1.Height := Button1.Height-7;
ProgressBar1.Left := 3;
ProgressBar1.Top := 3;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i : byte;
begin
Button1.Enabled := false;
if ProgressBar1.Visible then Exit;
ProgressBar1.Position := 0;
ProgressBar1.Visible := True;
for i := 0 to 99 do
begin
  Sleep(100);
  ProgressBar1.Position := ProgressBar1.Position + 1;
  Application.ProcessMessages;
end;
ProgressBar1.Visible := False;
Button1.Enabled := true;
end;

Jak nastartovaly Windows?

Ne vždycky se podaří systému nastartovat v pořádku a někdy je nutno použít nouzový režim. Pokud je však vaše aplikace „citlivá“ na podobný stav, kdy je systém nastartován jen s omezenými prostředky a nezbytným minimem ovladačů, může se nám hodit podobný stav detekovat a aplikaci případně zakázat start.

procedure TForm1.Button33Click(Sender: TObject);
begin
case (GetSystemMetrics(SM_CLEANBOOT)) of
0 : ShowMessage(`Window nastartovaly běžným způsobem`);
1 : ShowMessage(`Nouzový režim`);
2 : ShowMessage(`Nouzový režim s prací v síti`);
else
ShowMessage(`Nelze zjistit`);
end;
end;

Jméno přihlášeného uživatele

Následující jednoduchá funkce nám zjistí jméno právě přihlášeného uživatele. To můžete využít pro řadu účelů jako třeba ukládání různých konfigurací pro jednotlivé uživatele a podobně.

function UserName: String;
var
  User : PChar;
  i    : DWord;
begin
  i := 1024;
  user := StrAlloc(Succ(i));
  if GetUserName(User, i) then Result := StrPas(User)
                          else Result := `Žádný`;
end;

procedure TForm1.Button34Click(Sender: TObject);
begin
ShowMessage(UserName);
end;

Vytvoření virtuálního disku

Máte-li rozsáhlý disk, můžete se v jeho obsahu snadno ztratit i v tom případě, že jej máte rozdělen na několik oblastí. Pokud potřebujete kupříkladu často přistupovat do jednoho (třeba i více zanořeného) adresáře, může se hodit vytvoření virtuálního disku. Jak se to dá udělat programově nám ukazuje náš příklad:

procedure TForm1.Button35Click(Sender: TObject);
begin
if DefineDosDevice(DDD_RAW_TARGET_PATH, `X:`, PChar(`c:\`)) then ShowMessage(`Virtuální disk "X" byl vytvořen.`)
else ShowMessage(`Při vytváření virtuálního disku došlo k chybě.`);
end;

Minimalizace aplikace i s modálními formuláři

Jistě dobře víte, co to modální režim znamená. Někdy jsou tato okna až otravná, když nejdou minimalizovat. My si teď ukážeme, jak se dá minimalizovat aplikace (minimalizací jejího hlavního formuláře) i v tom případě, že některé modální formuláře (dialogy) obsahuje. Jak jinak v podobných případech, i zde využijeme systém zpráv Windows.

.
.
.
private
procedure WMSyscommand(var Msg: TWmSysCommand); message WM_SYSCOMMAND;

.
.
.
procedure TForm1.WMSysCommand(var Msg: TWmSysCommand);
begin
case (Msg.CmdType and $FFF0) of
  SC_MINIMIZE:
  begin
    Msg.Result := 0;
    EnableWindow(Application.Handle, True);
    Aplication.Minimize;
  end;
  else inherited;
end;
end;

Zamezení obnovení velikosti okna poklepáním na titulkový pruh

Tento tip malinko souvisí s tím předchozím. Opět se týká změny ovladatelnosti okna, opět využijeme zprávy systému. A použití? Těžko říci, to ponechám na vás.

.
.
.
private
procedure WMSysCommand(var Message: TWMSysCommand); message WM_SYSCOMMAND;
.
.
.
procedure TForm1.WMSysCommand(var Message: TWMSysCommand);
begin
with Message do
  if CmdType and $FFF0 = SC_RESTORE then Result := 0
  else inherited;
end;

Diskuze (1) Další článek: Post.cz odesílá pomalu

Témata článku: Software, Windows, Programování, DEL, Trik, Nouzový režim, Díl, TRI, Message, Elsa, Otravný dialog


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

DeOldify: Téměř zázračná technologie, která obarvuje 2. světovou válku, nebo vaše fotky z dětství

DeOldify: Téměř zázračná technologie, která obarvuje 2. světovou válku, nebo vaše fotky z dětství

** Neuronová síť DeOldify obarvuje fotky ** Můžete si ji vyzkoušet sami i bez superpočítače ** YouTube je plný obarvených ikonických videí

Jakub Čížek | 21

Otestovali jsme 8 mobilů do 8 000 Kč: rozdíly ve výkonu jsou ohromné

Otestovali jsme 8 mobilů do 8 000 Kč: rozdíly ve výkonu jsou ohromné

** Mobil za 8 000 Kč uspokojí většinu uživatelů ** Klasické foťáky stačí, širokáče ale zklamaly ** Zásadní jsou rozdíly ve výkonu

Časopis Computer | 4

Není jen Flightradar: Našli jsme další aplikace pro sledování letadel, některé ukážou i víc

Není jen Flightradar: Našli jsme další aplikace pro sledování letadel, některé ukážou i víc

** 8 služeb pro sledování leteckého provozu ** Nejznámější je Flightradar24, ale alternativy leckdy prozradí více ** Letadla i v této pohnuté době čile létají a je co pozorovat

Karel Kilián | 14

Google mapy, Seznam mapy, Apple mapy... Velké srovnání šesti internetových map. Kdo to dělá nejlépe?

Google mapy, Seznam mapy, Apple mapy... Velké srovnání šesti internetových map. Kdo to dělá nejlépe?

** Která klasická webová mapa se vám líbí nejvíce? ** Srovnali jsme šest velkých služeb v několika situacích ** Hlasujte v anketě

Jakub Čížek | 81


Aktuální číslo časopisu Computer

Megatest televizí do 25 000 Kč

Nejlepší herní klávesnice

Srovnání správců hesel

Jak upravit fotky pro tisk