Tipy a triky v Delphi, díl 34.

Chtěli byste mít ve své aplikaci pohyblivý text v titulkovém pruhu? Nebo si podle vlastních potřeb upravit dialog na otevření souboru? A nebo si přímo do aplikace uložit RTF dokument? To vše si dnes ukážeme a na závěr si předvedeme opět jeden malý příklad na odreagování.
Pohyblivý text v titulkovém pruhu

Začneme opět něčím vizuálním. Ukážeme si, jak velmi jednoduchým až primitivním způsobem s využitím Timeru animovat (či chcete-li rolovat) text v titulkovém pruhu okna. Jaká je možnost využití takového efektu? Buď pouze pro efekt samotný a nebo v případě příliš dlouhého textu v titulku.

Umístěte tedy na formulář Timer a nastavte vhodný časový interval. To je velmi důležité i s ohledem na délku titulku. Zbytek kódu, tedy hlavně událost OnTimer, vypadá takto:

.
.
.
private
  { Private declarations }
  Titulek : String;
.
.
.

procedure TForm1.FormCreate(Sender: TObject);
begin
Titulek := `  Sem umístěte text vašeho titulkového pruhu aplikace  `;
end;


procedure TForm1.Timer1Timer(Sender: TObject);
var
    i : Integer;
begin
    Application.Title := Titulek;
    Form1.Caption := Titulek;
    For i := 1 to Length(Titulek) do Titulek[i] := Application.Title[i+1];
    Titulek[Length(Titulek)] := Application.Title[1];
end;

Nezapomeňte vložit před i za text titulku vhodnou mezeru, aby došlo k dostatečnému oddělení.

Drobná úprava dialogu pro otevření souboru

Chcete-li mít svoji aplikaci upravenu do posledního detailu přesně podle vašich představ včetně každého Labelu a tlačítka, možná vám vaši snahu kazí některé systémové dialogy, kde toho na první pohled moc změnit nelze (alespoň po vizuální stránce). Jistě, můžete si vytvořit své vlastní dialogy, ale možná bude snadnější přece jen upravit ty standardní. Jeden z nejčastěji používaných systémových dialogů je ten na výběr souboru a jeho drobnou úpravu si právě teď ukážeme. Úprava bude spočívat ve změně popisků u nejdůležitějších objektů v dialogu, tedy tlačítek "Otevřít" a "Storno", a dále popisky u typu souboru, názvu souboru a složky. Poslední věc, která zbývá, je titulek samotného okna dialogu, ale ten – jak jistě dobře víte – lze nastavit v Object Inspectoru.

K příkladu potřebujeme knihovnu CommDlg. Celý příklad funguje tak, že si zjistíme "identifikační čísla" jednotlivých prvků (tedy kromě tlačítek, na ně lze odkazovat "rovnou") a na jejich základě pak přepíšeme jejich popisky přímo v dialogu, k čemuž nám bude nápomocná funkce SendMessage. Čísla jednotlivých prvků najdete ve zdrojovém kódu v konstantách a samotný kód je umístěn v události OnShow příslušného OpenDialogu.

.
.
.
uses  CommDlg;
.
.
.

procedure TForm1.OpenDialog1Show(Sender: TObject);

const
  LB_FILETYPES_ID = 1089;
  LB_FILENAME_ID = 1090;
  LB_DRIVES_ID = 1091;

  Str1 = `&Otevřít`;
  Str2 = `&Storno`;
  Str3 = `&Typ souboru`;
  Str4 = `&Název`;
  Str5 = `S&ložka`;

var  hOpenDialog: HWND;

begin
  hOpenDialog := GetParent(OpenDialog1.Handle);
  SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, idOk, Longint(PChar(Str1)));
  SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, idCancel, Longint(PChar(Str2)));
  SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, LB_FILETYPES_ID, Longint(PChar(Str3)));
  SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, LB_FILENAME_ID, Longint(PChar(Str4)));
  SendMessage(hOpenDialog, CDM_SETCONTROLTEXT, LB_DRIVES_ID, Longint(PChar(Str5)));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Execute;
end;

Uložení a načtení RTF souboru z resources

Práci s resources jsme si už ukazovali v poslední době dvakrát a tento příklad popisuje, jak s pomocí resources přímo do souboru naší aplikace přidat dokumenty ve formátu RTF. Postup vytváření souboru resources je opět stejný, takže jej zkrátíme a nebudeme již detailně popisovat (zájemce o detailní postup odkazuji například na 32. díl seriálu) a ukážeme si hlavně způsob, jak takto "v aplikaci uložený" dokument zobrazit uživateli.

Nejprve tedy vytvořte a zkompilujte resources soubor s tímto obsahem:

TESTDOC RCDATA "test.rtf"

Soubor test.rtf pochopitelně musí být při kompilaci dostupný, takže si vytvořte nějaký takový testovací dokument, třeba ve WordPadu či Wordu. Pak jej již obvyklým způsobem přidáme do našeho projektu:

.
.
.
implementation

{$R *.DFM}
{$R textres.res}
.
.
.

A zbývá nám hlavní část: zobrazit dokument uživateli. K tomu použijeme jak jinak než komponentu RichEdit, kterou umístěte na formulář. Dokument pak do ní načteme tímto způsobem:

procedure TForm1.Button1Click(Sender: TObject);
var
  rs : TResourceStream;
begin
  rs := TResourceStream.Create(hinstance, `TESTDOC`, RT_RCDATA);
  try
    Richedit1.PlainText := False;
    Richedit1.Lines.LoadFromStream(rs);
  finally
    rs.Free;
  end;
end;

Umístění obrázku na pracovní plochu

Ne, tento tip se nebude v žádném případě týkat tapety pracovní plochy, i když k tomu možná nadpis trochu svádí. Ukážeme si něco, co bude zřejmě opět patřit spíše do kategorie legrácek na odreagování a experimentování než k vážnému použití. Naučíme se umístit na libovolné souřadnice pracovní plochy obrázek. Berte to jako menší úvod do příštího pokračování našeho seriálu, kdy se trošku zaměříme na grafiku a témata s ní související.

Ale vraťme se k našemu příkladu. Tento velmi jednoduchý postup načte obrázek (bitmapu) a poté jej zobrazí na požadovaných souřadnicích desktopu. Pochopitelně nedochází k žádnému překreslování, takže jakmile místo na ploše, kde se obrázek nachází, překryjete například oknem nějaké aplikace, obrázek jednoduše zmizí.

A teď se už můžete pustit do experimentování a hraní a vytvořit si například vhodným střídáním obrázků zajímavou animaci či jiný efekt.

procedure TForm1.Button1Click(Sender: TObject);
var
  Picture: TPicture;
  Desktop: TCanvas;
  X, Y: Integer;
begin
  Picture := TPicture.Create;
  Desktop := TCanvas.Create;
  Picture.LoadFromFile(`c:\obrazek.bmp`);
  Desktop.Handle := GetWindowDC(0);
  X := 100;
  Y := 100;
  Desktop.Draw(X, Y, Picture.Graphic);
  ReleaseDC(0, Desktop.Handle);
  Picture.Free;
  Desktop.Free;
end;

Diskuze (9) Další článek: Canon PowerShot S-30 - dvojče k pohledání

Témata článku: Software, Programování, Pracovní plocha, Vhodný čas, Dialog, Díl, Timer, TRI, Drobná úprava, Trik, Vhodný font, DEL


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

Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

Vybíráme nejlepší monitory: Od úplně levných až po displeje na rozmazlování očí

** Vybrali jsme nejlepší monitory na práci i pořádné hraní ** Nejlevnější monitor s kvalitním panelem nestojí ani tři tisíce ** Rozlišení 4K a větší obrazovka už není nedostupný luxus

David Polesný | 31

David Polesný
Monitory
Platby kartou se můžou rozšířit úplně všude. Jako terminál poslouží mobil
Lukáš Václavík
BankaPlacení mobilemNFC
Nejlepší příslušenství k počítači. Tipy na osvědčené klávesnice, tiskárny, routery…

Nejlepší příslušenství k počítači. Tipy na osvědčené klávesnice, tiskárny, routery…

** Tipy na užitečné příslušenství k počítačům ** Poradíme, s jakými produkty neuděláte chybu ** Od drobností do USB až po routery a tiskárny

David Polesný, Stanislav Janů | 20

David PolesnýStanislav Janů
Příslušenství
Chytré hodinky Honor a Huawei se zbavily největší brzdy. Naučily se instalovat aplikace
Filip Kůžel
HonorHodinkyMobilní aplikace
Microsoft pořád myslí i na odpůrce předplatného. Letos vydá Office 2021
Lukáš Václavík
Microsoft OfficeMicrosoft
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
Japonská MANA může být 80× výkonnější než sebelepší tranzistorový procesor

Japonská MANA může být 80× výkonnější než sebelepší tranzistorový procesor

** Tranzistory současných počítačů vyzařují při přepínání teplo ** Na Tokijské univerzitě proto vyvíjejí adiabatické procesory ** Využívají supravodivost a jsou 80× úspornější

Jakub Čížek | 48

Jakub Čížek
TranzistoryProcesoryTechnologie

Aktuální číslo časopisu Computer

Megatest rychlých Wi-Fi 6 routerů

Jak ztišit počítač

Velký test mATX skříní