AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Prüfen ob ein Integerwert in einem ENUM existiert

Prüfen ob ein Integerwert in einem ENUM existiert

Ein Thema von DR_Oetker · begonnen am 17. Feb 2021 · letzter Beitrag vom 18. Feb 2021
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.652 Beiträge
 
Delphi 12 Athens
 
#1

AW: Prüfen ob ein Integerwert in einem ENUM existiert

  Alt 18. Feb 2021, 10:44
Ich hätte noch einen anderen Ansatz mit einem Helper, der nebenbei noch die Konstanten in der TOrderField-Definition eliminiert:
Delphi-Quellcode:
type
  TOrderField = (ofNone, ofBelegnummer, ofBelegdatum, ofKonto, ofKontoName, ofBank, ofZahldatum);

type
  TOrderFieldHelper = record helper for TOrderField
  private const
    cColumnMap: array [TOrderField] of Integer = (-1, 4, 6, 7, 8, 9, 10);
  public
    function GetColumn: Integer;
    procedure SetColumn(const Value: Integer);
    property Column: Integer read GetColumn write SetColumn;
  end;

var
  OrderField: TOrderField = ofBelegnummer;

...

function TOrderFieldHelper.GetColumn: Integer;
begin
  Result := cColumnMap[Self];
end;

procedure TOrderFieldHelper.SetColumn(const Value: Integer);
var
  idx: TOrderField;
begin
  for idx := Low(cColumnMap) to High(cColumnMap) do begin
    if cColumnMap[idx] = Value then begin
      Self := idx;
      Exit;
    end;
  end;
  Self := ofNone;
end;
Verwendung dann so:
Delphi-Quellcode:
procedure TfrmMain.sgOPOSFixedCellClick(Sender: TObject; ACol, ARow: Integer);
begin
  if OrderField.Column = ACol then
    OrderASC := not OrderASC
  else
    OrderField.Column := ACol;
  btnRefresh.Click;
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DR_Oetker

Registriert seit: 3. Aug 2004
Ort: Baden-Württemberg
10 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Prüfen ob ein Integerwert in einem ENUM existiert

  Alt 18. Feb 2021, 16:23
Vielen Dank an alle für die vielen Antworten.

Ich schaue mir die Sache mit dem Helper mal genauer an, denn das sagt mir bislang nichts...

Falls ich nicht weiter komme, werde ich mich nochmal melden!
Besten Dank

Frank
  Mit Zitat antworten Zitat
DR_Oetker

Registriert seit: 3. Aug 2004
Ort: Baden-Württemberg
10 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Prüfen ob ein Integerwert in einem ENUM existiert

  Alt 18. Feb 2021, 17:07
Ich schon wieder...

Ich hab mir das Beispiel von Uwe Raabe angeschaut.

Danke für den Hinweis mit dem Helper.
Solch ein Hilfskonstrukt mit dem helper hatte ich bislang nicht gekannt.

Allerdings bringt mich das mit meinem Problem nicht konkret weiter, denn ich will ja prüfen, ob die angeklickte Spalte im Enum vorhanden ist...

Der ähnliche Ansatz mit einem helper von Rollo62 hingegen passt besser!
Allerdings hatte ich die selbe Abfrage mit einem
case of bereits im Click-Ereignis.

Es funktioniert so, allerdings stört mich ein wenig, dass beim Ändern des Enums auch immer der restliche Code mitgeändert werden muss..

Eventuell setzte ich die Sache mit dem Set um, (wie das himitsu vorgeschlagen hat) denn da ist die Deklaration des Enums und des Sets zumindest an gleicher Stelle und es fällt auf, dass dort auch geändert werden muss.


Also besten Dank für euere Antworten, hat mich auf jeden Fall weitergebracht...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.378 Beiträge
 
Delphi 12 Athens
 
#4

AW: Prüfen ob ein Integerwert in einem ENUM existiert

  Alt 18. Feb 2021, 18:26
Class Helper und Record Helper sind einfach nur eine "nachträgliche" Erweiterung.

So kann man auch an Typen/Klassen direkt hilfreiche Methoden anhängen,
anstatt sie als einzelfunktion irgendwo zu haben.
z.B.
Delphi-Quellcode:
var
  R1, R2: TRect;
  i: Integer;

S := IntToStr(i); // Funktion
S := i.ToString; // als Helper

if EqualRect(R1, R2) then // Funktion
if R1.Equal(R2) then // als RecordMethode
Delphi-Referenz durchsuchenTIntegerHelper.ToString
Delphi-Referenz durchsuchenTRect.Equal


Bzw. die Class Operator (in einem Class/Record Helper) können, die Operatoren für einen Typen erweitern ( := = <= >= < > <> + - * / div mod in shl shr ).
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (18. Feb 2021 um 18:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.652 Beiträge
 
Delphi 12 Athens
 
#5

AW: Prüfen ob ein Integerwert in einem ENUM existiert

  Alt 18. Feb 2021, 21:25
Allerdings bringt mich das mit meinem Problem nicht konkret weiter, denn ich will ja prüfen, ob die angeklickte Spalte im Enum vorhanden ist...
Wieso nicht? Wenn nach der Zuweisung OrderField.Column := ACol; das OrderField = ofNone ist, dann ist das keine gültige Spalte. (Außer -1 wäre eine gültige Spalte)
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 11:06 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz