Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wert von SET OF mit case abfragen? (https://www.delphipraxis.net/193888-wert-von-set-mit-case-abfragen.html)

SearchBot 19. Sep 2017 16:36

Delphi-Version: 10 Berlin

Wert von SET OF mit case abfragen?
 
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? :pale:

Delphi-Quellcode:
 case Errors of
  ceFrame: s:='Mist';
  ceBreak: s:='Abbruch';
 end;

Glados 19. Sep 2017 16:40

AW: Wert von SET OF mit case abfragen?
 
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;

Hobbycoder 19. Sep 2017 16:43

AW: Wert von SET OF mit case abfragen?
 
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.

Redeemer 19. Sep 2017 20:21

AW: Wert von SET OF mit case abfragen?
 
Delphi-Quellcode:
case
kann nur einen einzigen Fall ausführen, weshalb sich die einzelnen Bereiche auch nicht überlappen dürfen. Bei einem
Delphi-Quellcode:
set
wären mehrere Fälle auszuführen, was also nicht geht. Darüber hinaus ist ein
Delphi-Quellcode:
set
kein Ordinaltyp, was
Delphi-Quellcode:
case
ebenfalls verlangt.

SearchBot 20. Sep 2017 09:30

AW: Wert von SET OF mit case abfragen?
 
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 :oops: - aber für mein Verständnis war der Thread trotzdem wertvoll :thumb:

Redeemer 20. Sep 2017 09:50

AW: Wert von SET OF mit case abfragen?
 
Es gibt übrigens doch eine Möglichkeit, die mir gerade eingefallen ist und zwar mit
Delphi-Quellcode:
for in do case of
... Tut genau, was du willst.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 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