HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Halmazok elemeinek automatikus kijelzése


Példaprogram letöltése

4490 bájt

Adott egy halmaz típus, mint mondjuk a TFontStyles, mely egy betűtípusnál annak stílusát írja le. Ez a halmaz több elemet is tartalmaz, mely alapján meghatározható, hogy a betűtípus legyen-e vastag, dőlt, stb. Hogy mely elemei kerülnek kiválasztásra a TFontStyles-nek az csak rajtunk múlik. Ha programból szeretnénk vizsgálni ezt és megjeleníteni mondjuk CheckBox-ok segítségével, hogy melyik eleme kijelölt a halmaznak és melyik nem, akkor viszonylag egyszerű dolgunk van. Ha azonban eljárásunkat úgy szeretnénk elkészíteni, hogy az egy tetszőleges halmaztípust képes legyen feldolgozni és megjeleníteni, akkor már kissé bonyolódik a helyzet...

Adott tehát a TFontStyles és még sok más hasonló halmaz típus, de a teszt kedvéért hozzunk még létre néhány saját halmaz típust is:
type
  TOneTest  = (otYellow, otBlue, otGreen, otBlack, otWhite, otRed, otSilver, otLime);
  TOneTests = set of TOneTest;
  TTwoTest  = (ttOne, ttTwo, ttThree, ttFour, ttFive, ttSix, ttSeven);
  TTwoTests = set of TTwoTest;
Készítünk majd egy eljárást mely egy tetszőleges típusú halmaz példánya alapján egy GroupBox-on lévő CheckBox-okat tud kezelni oly módon, hogy felhasználva azokat megjeleníti a halmaz elemeinek megnevezését és a Checked property-t igazra állítja, ha az adott érték szerepel a megadott halmaz példányában.
Ez az eljárás a SetFlags nevet kapja, melynek első paraméterként a GroupBox-ot kell megadni, melyre a CheckBox-okat helyeztük, másodikként a halmaz típusát, amit a TypeInfo függvény szolgáltat egy tetszőleges típus esetén, végül a halmaz azon példányát, melynek aktuális értékét szeretnénk megjeleníteni a CheckBox-ok segítségével.
procedure TForm1.Button1Click(Sender: TObject);
var
  a: TOneTests;
begin
  a:=[otBlue, otRed];
  SetFlags(GroupBox1, TypeInfo(TOneTest), a);
end;
Nézzük most miként is működik a SetFlags. Első lépésként a GroupBox Caption property-jét állítjuk be méghozzá az adott halmaz típusának nevére. Ezt követően további adatokat kérünk le a GetTypeData függvénnyel az adott halmaz típusról. Felhasználva ezeket egy ciklust tudunk írni, mely végigmegy a halmaz elemein az elsőtől az utolsóig.
procedure SetFlags(gb: TGroupBox; ti: PTypeInfo; var data);
begin
  gb.Caption:=ti^.Name;
  td:=GetTypeData(ti);
  for i:=td^.MinValue to td^.MaxValue do begin
A ciklusmagban sorra vesszük a GroupBox-ban lévő CheckBox-okat és mindegyik feliratát az adott halmazbéli elem nevére állítjuk, majd a Checked property-jüknek adunk értéket attól függően, hogy az adott elem szerepel-e a halmazban vagy sem. Végül a láthatóságot állítjuk igazra.
    with gb.Controls [i] as TCheckBox do begin
      Caption:=GetEnumName(ti, i);
      Checked:=value and (1 shl i)<>0;
      Visible:=true;
    end;
  end;
Azoknál a CheckBox-oknál, melyekre nincs szükség, mivel nincs annyi eleme esetleg az adott halmaztípusnak, azokat egyszerűen elrejtjük.
  for i:=td^.MaxValue+1 to 15 do begin
    with gb.Controls [i] as TCheckBox do begin
      Visible:=false;
    end;
  end
end;

Cikksorozat

#IDKategóriaCikk címeSorozat
3047WindowsAz XML bemutatása1. rész
3059WindowsAz XML bemutatása2. rész
3068WindowsAz XML bemutatása3. rész
3077WindowsAz XML bemutatása - deklarációk4. rész
3086WindowsAz XML bemutatása - MSXML, XSLT5. rész
3094WindowsAz XML bemutatása - DTD6. rész
3105WindowsXML adatok megjelenítése Excel-ben7. rész
3114WindowsDokumentum hivatkozások az XML-ben8. rész
3123WindowsXML adattípusok9. rész
3132WindowsXML adatok HTML oldalakon10. rész
3141WindowsXML Notepad11. rész


Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2002 évkönyv 540. 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 |