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í, Trik, Label, Byte, Díl, Uložený vzor


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

Jak John Kemeny a Thomas Kurtz stvořili BASIC, základ novodobého programování

Jak John Kemeny a Thomas Kurtz stvořili BASIC, základ novodobého programování

** Programovací jazyk BASIC tvořil základ osobních počítačů ** Původně byl určen vysokoškolským studentům, aby vůbec byli schopni využívat univerzitní počítač ** Jeden ze spoluautorů dělal výpočtáře Einsteinovi

Pavel Tronner | 78

USB-C už mělo být všude, ale není. Tak kde to vázne?

USB-C už mělo být všude, ale není. Tak kde to vázne?

** Konektor USB-C byl představen už před čtyřmi roky ** Praktické univesrzální rozhraní však stále není rozšířeno ** Výrobcům hardwaru se do změny moc nechce

David Polesný, Vladislav Kluska | 87

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

Byli tam! Důkazy o přistání na Měsíci, Lunochody i čínská sonda jsou vidět z vesmíru

** Sonda LRO pořídila z oběžné dráhy Měsíce zajímavé snímky ** Jsou na nich vidět artefakty všech misí programu Apolla, které přistály na povrchu Měsíce ** Jde například o části lunárních modulů, rovery a dokonce i vlajky

Petr Kubala | 62

Nová zbraň proti hackerům: obrovské množství chyb v softwaru

Nová zbraň proti hackerům: obrovské množství chyb v softwaru

** Vědci vymysleli nový systém obrany proti hackerům ** Pomocí speciálního systému implementují do softwaru spoustu chyb ** Tyto chyby nejsou zneužitelné, což útočník zjistí až po čase

Karel Javůrek | 25

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

Qualcomm se chlubí, že se mu podařilo téměř nemožné: Vyrobil první mobilní anténu pro 5G

Qualcomm se chlubí, že se mu podařilo téměř nemožné: Vyrobil první mobilní anténu pro 5G

** Za dveřmi je 5G – nová generace mobilních telekomunikací ** Jednou z jeho specialit jsou nové kmitočty, tzv. mmWave ** Jenže signál o mnoha desítkách GHz přináší hromadu překážek

Jakub Čížek | 22


Aktuální číslo časopisu Computer

Jak mobily určují svoji polohu?

Velký test notebooků pro studenty

Nejlepší reproduktory na párty

Služby a aplikace pro výuku angličtiny