Delphi-PRAXiS
Seite 1 von 2  1 2      

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 ?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:00 Uhr.
Seite 1 von 2  1 2      

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