![]() |
Frage zu "Typenkompatibilität" und "array ind
Habe im Forum folgendes gefunden:
Delphi-Quellcode:
Meine Frage: Gibt es eine Möglichkeit, evtl mit kleinen Änderungen, nicht über den "enumeration Typ" (Montag..Sontag) auf das array zuzugreifen, sondern auch über einen Index. Bsp:
Type TWochenTag = (Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag);
TNachtwaechter = Record Vorname, Nachname, Strasse, PLZ_Ort: string; end; ... VAR Nachtwaechter: Array[Montag..Sonntag] of TNachtwaechter;
Delphi-Quellcode:
Ich würde gern die Möglichkeit nutzen per Enum auf den Inhalt zuzugreifen. Bei der Initialisierung würde ich aber gern mit einer Schleife arbeiten, in etwa:
Nachtwaechter[1].Vorname:= 'Karl-Heinz'
Delphi-Quellcode:
Ideen? Her damit ;)
for i:=0 to count do
Nachtwaechter[i].name:= List.items[i]; Danke & Gruß, Barnti |
Re: Frage zu "Typenkompatibilität" und "array
Hehe, in genau dem gleichen Thread steht
![]()
Code:
Somit hast Du 7 Elemente die Du mit Nachtwaechter[1] bis Nachtwaechter[7] auch mit einer Variablen ansprechen kannst.
var Nachtwaechter: Array[1..7] of TNachtwaechter;
|
Re: Frage zu "Typenkompatibilität" und "array
Achso. Frage im ersten Moment falsch verstanden.
Ja, das geht, und zwar musst Du da mal nach ![]() |
Re: Frage zu "Typenkompatibilität" und "array
mache aus deinen var typ einfach:
Delphi-Quellcode:
var nachtwaechter:array[1..7] of tnachtwaechter;
|
Re: Frage zu "Typenkompatibilität" und "array
Zitat:
Deswegen muss man da einen Umweg über die RTTI nehmen. |
Re: Frage zu "Typenkompatibilität" und "array
hallo phoenix,
ist ja richtig, mir ging es genau wie dir, bloß war ich ein wenig langsamer :lol: raik |
Re: Frage zu "Typenkompatibilität" und "array
Hi phoenix,
ich habe Dein Beispiel zwar gefunden, leider aber nicht ganz durchschaut. Ist es möglich, dass Du mir Beispielcode dazuschreibst? Ich weiß so einfach nicht, wie ich über das Array iterieren soll?! Sorry! Danke & Gruß, Barnti |
Re: Frage zu "Typenkompatibilität" und "array
Ist eigentlich ganz einfach:
Delphi-Quellcode:
Schau dazu auch mal in die Onlinehilfe zum Thema "TypeInfo".
var
i: integer; begin for i := ord( low( TWochenTag ) ) to ord( high( TWochenTag ) ) do begin // i geht vom ersten bis zum letzten Element durch end; end; |
Re: Frage zu "Typenkompatibilität" und "array
Hallo,
also irgentwie ist mir das nicht ganz klar. Vielleicht muss ich noch mal ausholen:
Delphi-Quellcode:
Wie iteriere ich hier über das Array "Nachtwaechter", so dass ich alle Positionen beschreiben kann?
var
i: integer; begin for i := ord( low( TWochenTag ) ) to ord( high( TWochenTag ) ) do begin Nachtwaechter[i].Name //Hier ist das Problem. Ich muss irgentwie über das Array // iterieren. So geht es nicht. Enum-Typ gefordert end; end; Gruß, Barnti |
Re: Frage zu "Typenkompatibilität" und "array
Hallo,
wo ist denn das Problem ?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var iCnt : TWochentag; Nachtwaechter: Array[TWochenTag] of TNachtwaechter; begin For iCnt:=Montag to Sonntag do Nachtwaechter[iCnt].Nachname:='Problem gelöst'; end; |
Re: Frage zu "Typenkompatibilität" und "array
Du castest das i einfach als TWochentag:
Delphi-Quellcode:
for i ... to ... do begin
Nachtwachter[TWochentag(i)].Name := 'xxx'; end; |
Re: Frage zu "Typenkompatibilität" und "array
Hallo Jens,
Tja, warum einfach, wenns auch kompliziert geht?! Danke! Das Brett war (etwas) dicker. Tschau & Danke an alle Beteiligten, Barnti |
Re: Frage zu "Typenkompatibilität" und "array
Jetzt ist mir doch noch etwas eingefallen:
Ich möchte mein Array[TWochentag] of Nachtwaechter über eine Variable in Form eines Strings ansprechen:
Delphi-Quellcode:
Ich brauche für einen übergebenen Parameter, gezwungener Maßen ein String, den Inhalt des Records. Geht das mit einem Cast-Operator?
function GetName(Wochentag: String): String;
begin result:= Nachtwaechter[Wochentag].name; // so leider nicht end; So in etwa: [/delphi] result:= Nachtwaechter[TWochentag(Wochentag)].Name [delphi] Kann jemand helfen? Gruß, Barnti |
Re: Frage zu "Typenkompatibilität" und "array
Jetzt guckst Du bitte mal hier:
![]() Da steht, wie Du die einzelnen Strings der WOchentage in eine Stringlist bekommst. Du musst nun die Benutzereingabe (am besten über eine Listbox, geht aber auch als normaler String) in den Index auflösen. Bei der LIstbox hast Du das durch den Itemindex, bei einem normalen String musst Du halt selber vergleichen. Den index castet Du als TWochentag und gut ist :) |
Re: Frage zu "Typenkompatibilität" und "array
Danke! So isses auch gut jetzt...
Gruß, Barnti |
Re: Frage zu "Typenkompatibilität" und "array
Delphi-Quellcode:
Enumerationen sind ordinale Typen und Schleifen funktionieren mit ordinalen Typen.
VAR
Nachtwaechter: array [TWochenTag] of TNachtwaechter; I: TWochenTag; begin for I := Low(TWochenTag) to High(TWochenTag) do List[Ord(I)] Ord(I) liefert die Werte 0 bis 6 in der Schleife |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 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