HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Windows alá telepített betűtípusokat megjelenítő komponens készítése


Példaprogram letöltése

5620 bájt

A FontTable komponens segítségével a Windows karaktertáblájához hasonló módon megjeleníthetjük azoknak a betűtípusoknak a karakterkészletét, amelyek számítógépünkre vannak telepítve. A kiválasztott betűtípus összes karaktere egy kis táblázatban jelenik meg. Ha valamelyik karaktert ki szeretnénk nagyítani, akkor csak rá kell kattintanunk, és máris megjelenik egy felnagyított négyzetben.

A mellékelt példaprogram megnyitása előtt a FontTable.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A komponens használata
A komponens Font tulajdonságán keresztül tudjuk beállítani azt a karakterkészletet, amelyet meg kell hogy jelenítsen. Amikor a karaktertáblázatban rákattintunk egy karakterre, akkor az nagyítva megjelenik. Ez azt jelenti, hogy kijelöltük. Minden egyes alkalommal, amikor rákattintunk egy karakterre, létrejön az OnItemClick esemény.
A kijelölt karaktert az alábbi függvénnyel kérdezhetjük le. Ha nincs kijelölt karakter, akkor a függvény ’ ’-t ad eredményül.
function GetSelected: Char;
Egy karakter kijelölését forráskódból is megtehetjük. Ehhez használjuk az alábbi függvényt.
procedure SetSelected(Index : Byte);
A karakter tömb indexelése 0-255 között történik.
A komponens létrehozása
A komponens létrehozásához két osztályra van szükségünk. A TFontTable osztály lesz maga a komponens. Ezt a TCustomPanel osztályból származtatjuk. Ezen a panelen grafikai objektumokat kell elhelyeznünk. Minden egyes betű megjelenítését egy-egy külön objektum valósítja meg. Ehhez létre kell hoznunk a TBox osztályt, amelyet a TGraphicControl osztályból származtatunk.
A TBox osztály
Az osztály FChar mezőjében tároljuk el azt a karaktert, amelyet meg kell majd jelenítenie. A megjelenítés az FFontName változóban megadott betűtípussal történik meg. Szükség van egy OnClick eseményre, amellyel a felhasználó kijelölheti az adott betűt. Amikor egy betű ki van jelölve, megnagyítjuk annak méretét, ezzel látványosan kiemelhetjük őt a többi betű közül. Ehhez szükséges egy LargeSize tulajdonság, amelynek igazra vagy hamisra állításával tudjuk befolyásolni az objektum méretét. A tulajdonsághoz tartozó eljárás állítja be az objektum méretét és az FFontSize változó értékét.
Az objektum megrajzolásához felül kell írnunk a Paint metódust. A rajzolást a TCanvas osztályon keresztül hajtjuk végre. A szöveg kiírását az alábbi kóddal valósítjuk meg.
Canvas.Font.Style:=[];
Canvas.Font.Size:=FFontSize;
Canvas.Font.Name:=FFontName;
Canvas.TextOut(Width div 2 - Canvas.TextWidth(FChar) div 2,Height div 15,FChar);
A kódot egyaránt használhatjuk a kis és a nagy méretű betű kirajzolására, mivel a koordináták helyén megadott méretek relatívak.
A SetChar metódussal állítjuk be az adott karaktert és betűtípust. Amikor a konténer objektum, azaz a TFontTable osztályban megváltozik a betű típusa, ezt az eljárást kell majd meghívnia.
procedure TBox.SetChar(IName: TFontName; IChar: Char);
begin
  FFontName:=IName;
  FChar:=IChar;
  Invalidate;
end;
A TFontTable osztály
Ez az osztály lesz a konténer osztály. Egy FBoxes nevű tömb segítségével tartjuk nyilván az egyes TBox objektumokat. Mivel 256 karakter van egy betűkészletben, egy for ciklus segítségével könnyedén frissíteni tudjuk majd az elemeket.
Ebben az osztályban kell megvalósítanunk a TBox objektumok kirajzolását és tartalmuk frissítésének vezérlését. Szükséges egy Font tulajdonság, amely TFontName típusú. Ezen keresztül lehet majd beállítani a megjelenítendő betűtípust.
Az FBoxes tömböt a Crete metódusban hozzuk létre.
constructor TFontTable.Create(AOwner: TComponent);
begin
  inherited;
  ...
  for i:=0 to 255 do begin
    FBoxes[i]:=TBox.Create(Nil);
    FBoxes[i].Parent:=Self;
    FBoxes[i].OnClick:=BoxClick;
    FBoxes[i].Left:=1+j*19;
    FBoxes[i].Top:=Top;
    FBoxes[i].SetChar(FFontName,Chr(i));
    Inc(j);
    if j=20 then begin
      j:=0;
      Inc(Top,24);
    end;
  end;
end;
A SetChar metóduson keresztül, kezdő karakterkészletként az „MS Sans Serif” betűtípust fogjuk beállítani. Az FFontName alapértékként „MS Sans Serif”-et kapott a Create metódus egy korábbi sorában.
Amikor a Font tulajdonság értéke megváltozik, gondoskodnunk kell arról, hogy az egyes TBox objektumok a frissített karakterkészletet jelenítsék meg.
procedure TFontTable.SetFontName(Value: TFontName);
var
  i: Byte;
begin
  FFontName:=Value;
  for i:=0 to 255 do
    FBoxes[i].SetChar(Value,Chr(i));
end;
Az egyes TBox elemek méretezését a BoxClick eljárás segítségével irányítjuk. Minden egyes TBox objektum OnClick eseményét erre az eljárásra állítottuk be a Create metódusban. Az alábbiakban a BoxClick metódus teljes kódja látható, részekre bontva.
procedure TFontTable.BoxClick(Sender: TObject);
var
  i : Byte;
  PrevSender : TObject;
begin
PrevSender:=Nil;
for i:=0 to 255 do
  if FBoxes[i].LargeSize then begin
    PrevSender:=FBoxes[i];
    FBoxes[i].LargeSize:=False;
  if (i=19) or ((i-19) mod 20=0) then FBoxes[i].Left:=FBoxes[i].Left+15;
  if i in [239..255] then FBoxes[i].Top:=FBoxes[i].Top+10;
    end;
Amikor rákattintunk egy TBox objektumra, akkor végig kell mennünk az FBoxes tömbön. Ha ott ki volt nagyítva egy betű, akkor annak méretét vissza kell állítanunk normálra. Ilyenkor meg kell jegyeznünk azt a betűt, amely ki volt nagyítva. Amikor egy olyan betűt nagyítunk ki, amely a jobb szélső oszlopban vagy az alsó sorban helyezkedik el, módosítanunk kell a koordinátáit, hogy elférjenek a Panel területén.
if PrevSender<>(Sender as TBox) then begin
  (Sender as TBox).LargeSize:=True;
  (Sender as TBox).BringToFront;
  if (Ord((Sender as TBox).FChar)=19) or ((Ord((Sender as TBox).FChar)-19) mod 20=0) then
    (Sender as TBox).Left:=(Sender as TBox).Left-15;
  if Ord((Sender as TBox).FChar) in [239..255] then
    (Sender as TBox).Top:=(Sender as TBox).Top-10;
  end;
  if Assigned(FItemClick) then FItemClick(Self);
end;
A fenti kódnak akkor kell lefutnia, ha egy eddig még nem nagyított állapotban lévő betűre kattintottunk. Ennek a lekezeléséhez volt szükség az előző kódrészletnél arra, hogy a PrevSender változóba eltároljuk az előzőleg kinagyított betűt. Ugyanis ha annak értéke nem egyezik meg azzal az objektummal, amelyre rákattintottunk, akkor egy új betű kinagyításáról van szó.
Az éppen kijelölt karaktert a GetSelected függvénnyel kérdezhetjük le.
function TFontTable.GetSelected: Char;
var
  i: Byte;
begin
  Result:=' ';
  for i:=1 to 255 do
    if FBoxes[i].LargeSize then Result:=FBoxes[i].FChar;
end;
Lehetőség van arra is, hogy forráskódból jelöljünk ki egy karaktert. Ezt a SetSelected metóduson keresztül tehetjük meg.
procedure TFontTable.SetSelected(Index: Byte);
var
  i : Byte;
begin
  for i:=0 to 255 do
    if FBoxes[i].LargeSize then begin
      FBoxes[i].LargeSize:=False;
      if (i=19) or ((i-19) mod 20=0) then FBoxes[i].Left:=FBoxes[i].Left+15;
      if i in [239..255] then FBoxes[i].Top:=FBoxes[i].Top+10;
    end;
  FBoxes[Index].LargeSize:=True;
  FBoxes[Index].BringToFront;
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
1099DelphiDBChart komponens felhasználása1. rész
1113DelphiTDBChart komponens2. rész
1122DelphiTDBChart komponens3. rész
1132DelphiTDBChart komponens4. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 687. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |