Einzelnen Beitrag anzeigen

DrUArn

Registriert seit: 20. Mär 2003
130 Beiträge
 
Delphi 10.3 Rio
 
#1

Set Konstanten einen Wert zuweisen

  Alt 21. Feb 2018, 11:14
Delphi-Version: XE
Hi Comm,
Delphi-Quellcode:
type


tdockopt_UA=( DockBasicSize_UA, //gehört bei der Größenbestimmung dazu
              DockAuto_UA, //soll von self angedockt werden
              DockHori_UA) //Anordnung von in horizontaler Reihenfolge sonst vertiKal


tDockOpts_UA =set of tdockOpt_UA;

const


TagOpts2hochX_UA:array [tdockopt_UA]of integer = (1,2,4);//16,32,64,128,256,512,1024);

der Zugriff auf die Potenzen von 2 in TagOpts2hochX_UA ist umständlich:

Delphi-Quellcode:
function getPotenz(von:tdockopt_UA);
begin
result:=TagOpts2hochX_UA[von]
end;
Das geht ja noch.
Noch umständlicher wird es, wenn ich iterieren muß:

Delphi-Quellcode:
Procedure settag;
var i:integer;
    opts: tDockOpts_UA
begin
for I := integer(Low(tDockopt_UA)) to integer(High(tDockopt_UA)) do
opts:=opts +[tDockopt_UA(i)];
tag:=0;

for I := integer(Low(tDockopt_UA)) to integer(High(tDockopt_UA)) do
begin
  if tDockopt_UA(i) in opts then
     Tag:=Tag or TagOpts2hochX_UA[tDockOpt_UA(i)];//Bitweise Zuordnung für Tag

//oder fest codiert ... und da gäbe es noch mehr Eigenschaften
        tag:=FlagOn_UA(tag,TagOpts2hochX_UA[DockBasicSize_UA] or TagOpts2hochX_UA[DockAuto_UA]
                         or TagOpts2hochX_UA[DockHori_UA]);



end;

Nun die Frage:
Gibt es eine Möglichkeit, ein set oder Array zu schaffen,
in welchem sowohl die Bezeichner als auch die zugehörigen Potenzen vereinigt sind.

also im Prinzip
Delphi-Quellcode:
const
DockBasicSize_UA=1;
DockAuto_UA=2;
DockHori_UA=4; //Anordnung von in horizontaler Reihenfolge sonst vertiKal
in eine durchzählbare Struktur zu packen?

Grüße Uwe
  Mit Zitat antworten Zitat