Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   for .. in -Schleife (https://www.delphipraxis.net/132935-schleife.html)

Shadow 22. Apr 2009 09:46


for .. in -Schleife
 
Irgendwie sitze ich auf dem Schlauch ... scheint noch zu früh zu sein ;)

folgendes ....

Die FOR IN Schleife :

Delphi-Quellcode:
type
  TAllItems = ( foFlaeche1,
                  foWaermeuebergang1,
                  foMenue1,
                  foT01,
                  foT11,
                  foTT1,
                foFlaeche2,
                  foWaermeuebergang2,
                  foMenue2,
                  foT02,
                  foT12,
                  foTT2,
                foFlaeche3,
                  foWaermeuebergang3,
                  foMenue3,
                  foT03,
                  foT13,
                  foTT3
              ) ;
Delphi-Quellcode:
var ElementX : TAllItems ;

  for ElementX in [foWaermeuebergang1, foWaermeuebergang2] do
  begin
   ...
  end;
Jetzt zum Verständnis ... ElementX sollte doch den Wert foWaermeuebergang annehmen und den Schleifenrumpf ausführen und dannach den Schleifenrumpf mit ElementX:=foWaermeuebergang2 ausführen oder verstehe ich da jetzt was falsch .... bei mir wird der Schleifenrumpf jedoch nicht betreten :(

Oh man ... manchmal .. ach .. *nicht aufregen ;)* werd mir mal nen Kaffee holen und wenn ich wieder am Rechner bin hat wohl schon jemand ne Antwort für mich *hoffentlich* :)

Lg Andre

Bernhard Geyer 22. Apr 2009 09:49

Re: for .. in -Schleife
 
Probiers mal so:

Delphi-Quellcode:
for ElementX = foWaermeuebergang1 to foWaermeuebergang2 do

himitsu 22. Apr 2009 09:54

Re: for .. in -Schleife
 
also bei mir geht dein Code :gruebel:

D2009 ... sicher daß es in D2006 (TurboDelphi) auch schon drin ist?


[edit]
etwas unefektiver, aber dafür in allen Delphi-Versionen lauffähig: :stupid:
Delphi-Quellcode:
for ElementX := Low(ElementX) to High(ElementX) do
  if ElementX in [foWaermeuebergang1, foWaermeuebergang2] then
  begin
    ...
  end;

Shadow 22. Apr 2009 09:55

Re: for .. in -Schleife
 
Aber dadurch würde der Schleifenrumpf mit jedem Element von foWaermeuebergang1 bis foWaermeuebergang2 ausgeführt werden, also auch z.b. mit foMenue1 und das möchte ich ja nicht ;)

Shadow 22. Apr 2009 09:56

Re: for .. in -Schleife
 
Ab 2005 soll das drin sein ... und gibt ja auch kein Compilerfehler.

Shadow 22. Apr 2009 09:58

Re: for .. in -Schleife
 
Zitat:

Delphi-Quellcode:
for ElementX := Low(ElementX) to High(ElementX) do
  if ElementX in [foWaermeuebergang1, foWaermeuebergang2] then
  begin
    ...
  end;

ja klar geht aber das andere muss ja auch gehen und ist halt etwas eleganter :)

mkinzler 22. Apr 2009 09:58

Re: for .. in -Schleife
 
Dann musst du die Sequenz 2 mal ausführen und ElementX vorher entsprechenden Wert zuweisen

himitsu 22. Apr 2009 09:58

Re: for .. in -Schleife
 
wie gesagt, bei mir geht es und es kommt 171717 raus ...
also je foWaermeuebergang1(1) und foWaermeuebergang2(7)
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var ElementX: TAllItems ;
  i: Integer;
begin
  Caption := '';

  for ElementX in [foWaermeuebergang1, foWaermeuebergang2] do
  begin
    Caption := Caption + IntToStr(Ord(ElementX));
  end;

  for ElementX := Low(ElementX) to High(ElementX) do
    if ElementX in [foWaermeuebergang1, foWaermeuebergang2] then
    begin
      Caption := Caption + IntToStr(Ord(ElementX));
    end;

  for i := 0 to 1 do
  begin
    case i of
      0: ElementX := foWaermeuebergang1;
      1: ElementX := foWaermeuebergang2;
    end;
    Caption := Caption + IntToStr(Ord(ElementX));
  end;

  for i := 0 to 1 do
  begin
    //ElementX := ElementA[i];
    //Caption := Caption + IntToStr(Ord(ElementX));
    Caption := Caption + IntToStr(Ord(ElementA[i]));
  end;
end;
[edit]
so, jetzt sollten nahezu alle "normalen" Lösungen vorhanden sein,
aber hast schon Recht, als FOR-IN sieht es schon eleganter aus :angel:

mkinzler 22. Apr 2009 10:04

Re: for .. in -Schleife
 
Zitat:

Ab 2005 soll das drin sein ... und gibt ja auch kein Compilerfehler.
Höchstwahrscheinlich nur in Delphi.Net

Shadow 22. Apr 2009 10:12

Re: for .. in -Schleife
 
Aber wenn das nur in .Net der Fall wäre sollte mein Compiler den Konstrukt doch nicht zulassen oder?

Noch was sehr komisches ...

Neue Typdeklaration :
Delphi-Quellcode:


type
  TAllItems = ( foFormteil,
                  foTyp,
                  foMaschinennummer,
                  foAuftragskennzeichen,
                  foArtikelBezeichnung,
                  foAnzahlNester,
                foGeometrie,
                  foGrundgeometrie,
                  foAbmessungHoehe,
                  foAbmessungBreite,
                  foAbmessungTiefe,
                  foGrundgeometrieAnpassen,
                foNeueSeite1,
                foFlaeche1,
                  foWaermeuebergang1,
                  foMenue1,
                  foT01,
                  foT11,
                  foTT1,
                foFlaeche2,
                  foWaermeuebergang2,
                  foMenue2,
                  foT02,
                  foT12,
                  foTT2
              ) ;


  for ElementX in [foWaermeuebergang1, foWaermeuebergang2] do
  begin
    ShowMessage(IntToStr(ord(ElementX))) ;
    //Hier geht er wieder nicht rein !!!!
  end;

  for ElementX in [foFormteil, foWaermeuebergang1, foWaermeuebergang2] do
  begin
    ShowMessage(IntToStr(ord(ElementX))) ;
    //Hier geht er rein !!!! mit 0, 14, 20 was auch richtig ist ?!
  end;

frag mich nur wieso .. also kann ja irgendwie nicht angehen oder ?

Shadow 22. Apr 2009 10:36

Re: for .. in -Schleife
 
hmmm wenn ich den Code separiere läuft er scheinbar korrekt ... der Fehler muss woanders liegen denke ich ... weiß nur noch nicht wo und wieso ... die Nadel im Heu Haufen ... :wall:

Danke für alle die mit drauf geguckt haben :thumb:


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