![]() |
AW: Wie iteriere ich durch eine Menge?
Ich hatte mit meinen Einwänden aber nicht die Ermittlung des Namens gemeint, das war ja nur zur Veranschaulichung.
|
AW: Wie iteriere ich durch eine Menge?
Na dann verwendet man MinValue und MaxValue von GetTypeData.
|
AW: Wie iteriere ich durch eine Menge?
Trotzdem ist mir immer noch nicht klar, wie man damit dann durch eine Inline-Enumeration iterieren kann :gruebel:
|
AW: Wie iteriere ich durch eine Menge?
Könnte man mit einem Record-Helper für das Set etwas bauen? Eigentlich auch nicht... :pale:
|
AW: Wie iteriere ich durch eine Menge?
Nicht schön aber selten... Bei neueren Delphi-Versionen muß man die Byte-typen evtl. durch Word ersetzen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Shift : TShiftState; bMin, bMax : Byte; bShift : Byte; b : Byte; s : string; begin // das hier wollen wir untersuchen Shift := [ssAlt, ssCtrl, ssShift]; // Umwandeln damit's geht. Hier der Einfachheit halber fest als Byte, sonst über OrdType unterscheiden bShift := byte(Shift); // Über TypInfo den Bereich holen bMin := GetTypeData(GetTypeData(TypeInfo(TShiftState))^.CompType^)^.MinValue; bMax := GetTypeData(GetTypeData(TypeInfo(TShiftState))^.CompType^)^.MaxValue; // Iterieren über das Set for b := bMin to bMax do begin // Ist das drin? if bShift and (1 shl b) <> 0 then // Dann Namen holen s := s + ' '+ GetEnumname(GetTypeData(TypeInfo(TShiftState))^.CompType^, b); end; ShowMessage(s); end; |
AW: Wie iteriere ich durch eine Menge?
Hallo!
Ich habe zwar eine gefühlte Ewigkeit nicht mehr Delphi programmiert, aber was spricht gegen Folgendes?
Delphi-Quellcode:
Ich habe gerade keine aktuelle Delphi-Version installiert, aber mit fpc funktioniert das einwandfrei. Oder habe ich die Fragestellung falsch verstanden?
var
state: SmallInt; begin for state := Ord(Low(TShiftState)) to Ord(High(TShiftState)) do //Iteriere über alle möglichen Werte begin if (state = Ord(ssAlt)) then //Beispiel für einen Vergleich WriteLn('Test Alt'); end; end; Grüße Dust Signs |
AW: Wie iteriere ich durch eine Menge?
Dagegen spricht dass TShiftState ein Set ist. Von daher kannst Du dort kein Low / High anwenden.
Delphi-Quellcode:
TShiftState = set of (ssShift, ssAlt, ssCtrl,ssLeft, ssRight, ssMiddle, ssDouble);
Bei Enums geht es so wie Du schreibst, z.b:
Delphi-Quellcode:
TBorderIcon = (biSystemMenu, biMinimize, biMaximize, biHelp);
|
AW: Wie iteriere ich durch eine Menge?
Warum nicht? Folgender Code funktioniert einwandfrei (siehe
![]()
Delphi-Quellcode:
Output:
program x;
type TShiftState = set of (ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble, ssTouch, ssPen, ssCommand, ssHorizontal); var state: SmallInt; begin for state := Ord(Low(TShiftState)) to Ord(High(TShiftState)) do begin case state of Ord(ssShift): WriteLn('Shift'); Ord(ssAlt): WriteLn('Alt'); Ord(ssCtrl): WriteLn('Ctrl'); Ord(ssLeft): WriteLn('Left'); Ord(ssRight): WriteLn('Right'); Ord(ssMiddle): WriteLn('Middle'); Ord(ssDouble): WriteLn('Double'); Ord(ssTouch): WriteLn('Touch'); Ord(ssPen): WriteLn('Pen'); Ord(ssCommand): WriteLn('Command'); Ord(ssHorizontal): WriteLn('Horizontal'); end; end; end.
Code:
Das ist also genau die verlangte Iteration durch die Werte.
Shift
Alt Ctrl Left Right Middle Double Touch Pen Command Horizontal Grüße Dust Signs |
AW: Wie iteriere ich durch eine Menge?
Zitat:
|
AW: Wie iteriere ich durch eine Menge?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:13 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