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;