AGB  ·  Datenschutz  ·  Impressum  







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

Wert von SET OF mit case abfragen?

Ein Thema von SearchBot · begonnen am 19. Sep 2017 · letzter Beitrag vom 20. Sep 2017
Antwort Antwort
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
311 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Wert von SET OF mit case abfragen?

  Alt 19. Sep 2017, 17:36
Delphi-Version: 10 Berlin
Hallo,

ich habe das:
Delphi-Quellcode:
procedure TForm1.ComPort1Error(Sender: TObject; Errors: TComErrors);

// TComError = (ceFrame, ceRxParity, ceOverrun, ceBreak, ceIO, ceMode, ceRxOver, ceTxFull);
// TComErrors: set of TComError;
var s:shortstring;
begin
und ich möchte jetzt mit einer Case-Struktur auf den Inhalt von Errors reagieren, wo zB nur drinsteht:
Code:
Errors = [ceBreak]
Wie mache ich das?

Delphi-Quellcode:
 case Errors of
  ceFrame: s:='Mist';
  ceBreak: s:='Abbruch';
 end;
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#2

AW: Wert von SET OF mit case abfragen?

  Alt 19. Sep 2017, 17:40
Wie das mit einem Case gehtfunktioniert, weiß ich nicht. Aber es funktioniert so ja auch

Delphi-Quellcode:
 if TComErrors.ceRxParity in Errors then
  showmessage('ceRxParity in Set');

 if TComErrors.ceBreak in Errors then
  showmessage('ceBreak in Set');
In einem Set können ja mehrere Dinge stehen. Daher ist ein Case eh unangebracht.

Wenn du im Parameter Errors aber eh immer nur EINE Sache drin stehen hast, dann brauchst du kein Set dafür.
Dann also so:
Delphi-Quellcode:
case Errors oF
 TComErrors.ceRxParity: showmessage('ceRxParity in Set');
 TComErrors.ceBreak : showmessage('ceBreak in Set');
end;

Geändert von Glados (19. Sep 2017 um 17:44 Uhr)
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#3

AW: Wert von SET OF mit case abfragen?

  Alt 19. Sep 2017, 17:43
Ich würde das mit
Delphi-Quellcode:
if ceBreak in Errors then...;
if ceFrame in Errors then...;
machen.
Eine Case-Anweisung prüft ja nur bis zur ersten Übereinstimmung. Danach wird der Caseblock verlassen. Weitere Übereinstimmungen würden nicht geprüft.

In C++ könnte man das mit case machen. Aber in Pascal ist das mit Case nicht vorgesehen.
Gruß Hobbycoder
Alle sagten: "Das geht nicht.". Dann kam einer, der wusste das nicht, und hat's einfach gemacht.
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.049 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Wert von SET OF mit case abfragen?

  Alt 19. Sep 2017, 21:21
case kann nur einen einzigen Fall ausführen, weshalb sich die einzelnen Bereiche auch nicht überlappen dürfen. Bei einem set wären mehrere Fälle auszuführen, was also nicht geht. Darüber hinaus ist ein set kein Ordinaltyp, was case ebenfalls verlangt.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
SearchBot

Registriert seit: 27. Jun 2004
Ort: N-W vom Bodensee
311 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Wert von SET OF mit case abfragen?

  Alt 20. Sep 2017, 10:30
Hey, danke schön.

ich habe es jetzt mit der
Code:
if TComError.ce... in Errors then
-Methode gemacht. So kann ich die Fehler für die Ausgabe dann auch in einem String aneinanderreihen, falls es mehrere Probleme gibt.

Code:
Case Errors of
geht nicht, weil Errors kein Ordnialtyp ist.

Die Anzahl der Elemente in Errors bekommt man ergänzend so heraus, wie in dieser Quelle beschrieben wurde.

Ich seh aber gerade, daß die verwendete Komponente eine Funktion
Code:
ComErrorsToStr(Errors:TComErrors)
für die Ausgabe hat - aber für mein Verständnis war der Thread trotzdem wertvoll
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.049 Beiträge
 
Delphi 2009 Professional
 
#6

AW: Wert von SET OF mit case abfragen?

  Alt 20. Sep 2017, 10:50
Es gibt übrigens doch eine Möglichkeit, die mir gerade eingefallen ist und zwar mit for in do case of ... Tut genau, was du willst.
Janni
2005 PE, 2009 PA, XE2 PA
  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 00:38 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