Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Problem mit Enumeration (https://www.delphipraxis.net/188179-problem-mit-enumeration.html)

Schlingel 6. Feb 2016 12:06

Problem mit Enumeration
 
Hallo

Ich habe folgendes Problem und stehe irgendwie auf dem Schlauch...
Delphi-Quellcode:
type
  THanID = (StaPre = 0, StaEmp, StaUns, SpaSte, StaBadSte, StaSheCri, StaSheExp, StaFreRel, StaOnHold);

type
  TForm00 = class(TForm)
    Button1: TButton;
    procedure FormShow(Sender: TObject);
    function Get_a_Bit(const aValue: Cardinal; const Bit: Byte): Boolean;

  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form00: TForm00;

implementation

{$R *.dfm}

procedure TForm00.FormShow(Sender: TObject);
begin
  Button1.Enabled := Get_a_Bit(Random(255), 1);// funktioniert ist aber in einem umfangreichen Code schwer zu lesen

  Button1.Enabled := Get_a_Bit(Random(255), StaEmp); // <--- Enum funktioniert nicht
end;

// get if a particular bit is 1
function TForm00.Get_a_Bit(const aValue: Cardinal; const Bit: Byte): Boolean;
begin
  Result := (aValue and (1 shl Bit)) <> 0;
end;
Da ich derzeit einen funktionerenden Code etwas verschönern will, möchte ich die Version mit Enum anwenden.
Vielleicht hat jemand einen Tipp für mich.

Grüße

Dalai 6. Feb 2016 12:09

AW: Problem mit Enumeration
 
Weil THanID nunmal kein Integer oder Byte ist, musst du dein Enum nach Integer casten, entweder mit
Delphi-Quellcode:
Integer(StaEmp)
,
Delphi-Quellcode:
Byte(StaEmp)
oder
Delphi-Quellcode:
Ord(StaEmp)
.

MfG Dalai

Schlingel 6. Feb 2016 12:20

AW: Problem mit Enumeration
 
Zitat:

Zitat von Dalai (Beitrag 1329675)
Weil THanID nunmal kein Integer oder Byte ist, musst du dein Enum nach Integer casten, entweder mit
Delphi-Quellcode:
Integer(StaEmp)
,
Delphi-Quellcode:
Byte(StaEmp)
oder
Delphi-Quellcode:
Ord(StaEmp)
.

MfG Dalai

Danke, diese Lösung "Byte(StaEmp)" hatte ich schon am Schirm. Habe aber gehofft ich kann die "THanID" komplett casten.

Grüße

Dennis07 10. Mär 2016 11:31

AW: Problem mit Enumeration
 
Wobei Ord(...) sauberer ist, da es auch mit großen typen funktioniert und die je nach größe den entsprechenden Datentyp zurückliefert.

Blup 14. Mär 2016 08:28

AW: Problem mit Enumeration
 
Dir ist klar das Random(255) nur Zahlen im Bereich 0..254 erzeugt?
Delphi-Quellcode:
function Get_a_Bit(const AValue: Cardinal; const Bit: Byte): Boolean; overload;
function Get_a_Bit(const AValue: Cardinal; const Bit: THanID): Boolean; overload;

implementation

function Get_a_Bit(const AValue: Cardinal; const Bit: Byte): Boolean;
begin
  Result := (AValue and (1 shl Bit)) <> 0;
end;

function Get_a_Bit(const AValue: Cardinal; const Bit: THanID): Boolean;
begin
  Result := Get_a_Bit(AValue, Ord(Bit));
end;

Schlingel 14. Mär 2016 09:57

AW: Problem mit Enumeration
 
@Blup

Danke für den Hinweis, ist aber nicht relevant da das "Random(x)" aus einer DB eingelesen wird und im Code dann die Bedeutung der einzelnen Bits erfasst wird.

-> war nur eine beispielhafte Darstellung meines Problems.

In der Application siehts dann so aus:

Delphi-Quellcode:
 
      /// ----------------------------------------------------------------------------
      /// Present
      /// ----------------------------------------------------------------------------
      if (Get_a_Bit(StaPar.FDTable.FieldByName(FldStaHanID).AsInteger, Byte(StaPre)) = True) then
      begin
        Bmp.Canvas.Pen.Width := 1;
        if (StaPar.FDTable.FieldByName(FldStaHigReaLin_5b).AsBoolean = False) then
        begin
          Bmp.Canvas.Pen.Color := clWhite;
          Bmp.Canvas.Pen.Style := psSolid;
        end
        else
        begin
          Bmp.Canvas.Pen.Color := ContrastColor(ColSty.BackColor);
          Bmp.Canvas.Pen.Style := psDot;
        end;
Grüße

Schlingel


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:30 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz