Tipy a triky v Delphi, díl 76.

Po čase se opět vracíme k INI souborům. Dnes si ukážeme jejich využití na konkrétním příkladu ukládání typu fontů, použitých v aplikaci.
Základní práci s INI soubory jsme si již kdysi ukazovali, takže by pro vás neměl být problém cokoliv si do podobného souboru uložit. Jelikož se jedná o konfigurační soubor, který obsahuje zejména informace o uživatelském nastavení aplikace, můžeme do něj klidně uložit typy písma všech objektů uživatelského rozhraní. Takový jednoduchý příklad si dnes vytvoříme.

V našem malém příkladu si do INI souboru uložíme informaci o typu písma pro Label, který na formulář umístíme. Tato informace se bude skládat jednak z typu fontu, dále z velikosti, řezu, barvy a stylu. Pokud by snad bylo potřeba uložit ještě nějaký další parametr, jistě pro vás nebude problém příslušný řádek do kódu doplnit podle vzoru.

Kromě samotného Labelu na formulář ještě umístíme FontDialog, který bude aktivován po kliknutí na Label a který nám poslouží pro výběr písma pro Label. Posledními prvky formuláře budou dvě tlačítka. První bude sloužit k uložení informací o písmu do INI souboru, druhé tlačítko naopak zajistí načtení těchto informací a jejich aplikaci na Label.

Nyní tedy již k samotnému zdrojovému kódu. Snad ani není třeba připomínat použití jednotky Inifiles a zbytek kódu je myslím dostatečně jednoduchý a jasný.

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Inifiles;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    FontDialog1: TFontDialog;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Label1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure SaveFont(const FName, Section: string; smFont: TFont);
var
  FStream: TIniFile;
begin
  FStream := TIniFile.Create(FName);
  try
    FStream.WriteString(Section, `Name`, smFont.Name);
    FStream.WriteInteger(Section, `CharSet`, smFont.CharSet);
    FStream.WriteInteger(Section, `Color`, smFont.Color);
    FStream.WriteInteger(Section, `Size`, smFont.Size);
    FStream.WriteInteger(Section, `Style`, Byte(smFont.Style));
  finally
    FStream.Free;
  end;
end;

procedure LoadFont(const FName, Section: string; smFont: TFont);
var
  FStream: TIniFile;
begin
  FStream := TIniFile.Create(Fname);
  try
    smFont.Name := FStream.ReadString(Section, `Name`, smFont.Name);
    smFont.CharSet := TFontCharSet(FStream.ReadInteger(Section, `CharSet`, smFont.CharSet));
    smFont.Color := TColor(FStream.ReadInteger(Section, `Color`, smFont.Color));
    smFont.Size := FStream.ReadInteger(Section, `Size`, smFont.Size);
    smFont.Style := TFontStyles(Byte(FStream.ReadInteger(Section, `Style`, Byte(smFont.Style))));
  finally
    FStream.Free;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  LoadFont(ExtractFilePath(Application.ExeName) + `font.ini`, `label`, Label1.Font);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  SaveFont(ExtractFilePath(Application.ExeName) + `font.ini`, `label`, Label1.Font);
end;

procedure TForm1.Label1Click(Sender: TObject);
begin
  if FontDialog1.Execute then Label1.Font := FontDialog1.Font;
end;

end.

Jak vidíte, INI soubor je uložen přímo do adresáře s běžící aplikací, což si samozřejmě můžete změnit dle libosti. Osobně dávám přednost tomu, aby všechny konfigurační a další soubory byly uloženy přímo společně s aplikací v jedné složce a nemám rád, když si aplikace něco ukládá například do adresáře Windows. To už ale nechám na vašem uvážení.

Jelikož jsou obě procedury na uložení i načtení INI souboru dostatečně parametrizovány, můžete je pochopitelně použít i na jiné objekty než je Label a ukládat tak můžete informace prakticky o libovolném objektu, který má vlastnost Font.

Diskuze (7) Další článek: Opera 7 děravá jak ementál

Témata článku: Software, Windows, Programování, Díl, Byte, Uložený vzor, Label, Trik


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

Lenovo přivezlo na IFA 2018 skutečné inovace. Tyto tři notebooky stojí za to

Lenovo přivezlo na IFA 2018 skutečné inovace. Tyto tři notebooky stojí za to

** Yoga C930 nabídne revoluční reproduktor v kloubu displeje ** Yoga Book C930 představuje zdařilý reparát podivného Yoga Booku ** ThinkPad X1 Extreme se může pochlubit extrémní výbavou v tenkém těle

Tomáš Holčík | 16

Nový iPhone a další novinky Applu: sledujte, na co se zase budou stát fronty

Nový iPhone a další novinky Applu: sledujte, na co se zase budou stát fronty

** Apple dnes představuje nové produkty v čele s novými iPhony ** Nemusí zůstat jen u telefonů, čekají se i další novinky ** Úvodní přednáška začíná v 19:00 našeho času

David Polesný | 57

Solární panely v silnici vypadaly jako dobrý nápad. V praxi se ale neosvědčily

Solární panely v silnici vypadaly jako dobrý nápad. V praxi se ale neosvědčily

** Nápad použít na silnice místo asfaltu solární panely vypadal slibně ** Praktické testy však odhalily celou řadu nevýhod ** Nejhorší je směšná účinnost ve srovnání s fotovoltaickou elektrárnou

Karel Kilián | 62

Pojďme programovat elektroniku: Jak vlastně funguje akcelerometr a gyroskop nejen ve vašem telefonu

Pojďme programovat elektroniku: Jak vlastně funguje akcelerometr a gyroskop nejen ve vašem telefonu

** Každý současný vybavený mobil má akcelerometr a gyroskop ** Jenže co každé z těchto čidel vlastně dělá a jak vypadá? ** Dnes si to vysvětlíme a do hry zapojíme i Airbus A380 a Arduino

Jakub Čížek | 11


Aktuální číslo časopisu Computer

Jak vytvořit a spravovat vlastní web

Velký test herních klávesnic a DVB-T2 tunerů

Vše o formátu RAW

Vybíráme nejlepší základní desku