AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Enumeration

Ein Thema von Schlingel · begonnen am 6. Feb 2016 · letzter Beitrag vom 14. Mär 2016
Antwort Antwort
Schlingel

Registriert seit: 15. Feb 2003
Ort: Österreich
67 Beiträge
 
Delphi XE2 Professional
 
#1

Problem mit Enumeration

  Alt 6. Feb 2016, 12:06
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
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#2

AW: Problem mit Enumeration

  Alt 6. Feb 2016, 12:09
Weil THanID nunmal kein Integer oder Byte ist, musst du dein Enum nach Integer casten, entweder mit Integer(StaEmp) , Byte(StaEmp) oder Ord(StaEmp) .

MfG Dalai
  Mit Zitat antworten Zitat
Schlingel

Registriert seit: 15. Feb 2003
Ort: Österreich
67 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Problem mit Enumeration

  Alt 6. Feb 2016, 12:20
Weil THanID nunmal kein Integer oder Byte ist, musst du dein Enum nach Integer casten, entweder mit Integer(StaEmp) , Byte(StaEmp) oder 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
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
482 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Problem mit Enumeration

  Alt 10. Mär 2016, 11:31
Wobei Ord(...) sauberer ist, da es auch mit großen typen funktioniert und die je nach größe den entsprechenden Datentyp zurückliefert.
Dennis
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Problem mit Enumeration

  Alt 14. Mär 2016, 08:28
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;
  Mit Zitat antworten Zitat
Schlingel

Registriert seit: 15. Feb 2003
Ort: Österreich
67 Beiträge
 
Delphi XE2 Professional
 
#6

AW: Problem mit Enumeration

  Alt 14. Mär 2016, 09:57
@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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 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