![]() |
belieb.Dyn. Array in Procedure mit SetLength verändern
Hallo,
wie kann ich einer untergeordneten Procedure die Länge einer Dyn. Array verändern? Mein Versuch, der schief ging;
Delphi-Quellcode:
procedure TForm.Button2Click(Sender: TObject);
var Werte:Array Of Integer; begin SetLength(Werte,5); SetLaenge(Werte,Werte); Label1.Caption:=IntToStr(length(Werte)); end; procedure TForm.SetLaenge(Wert:Array Of Integer;var Werte:Array Of Integer); begin SetLength(Werte,10); /// end; |
Re: belieb.Dyn. Array in Procedure mit SetLength verändern
Wenn du immer statt Array of Integer TIntegerDynArray ( = Array of Integer) benutzt, gehts.
Delphi-Quellcode:
type
TIntegerDynArray = array of integer; procedure TForm.Button2Click(Sender: TObject); var Werte:TIntegerDynArray; begin SetLength(Werte,5); SetLaenge(Werte,Werte); Label1.Caption:=IntToStr(length(Werte)); end; procedure TForm.SetLaenge(Wert:Array Of Integer;var Werte:TIntegerDynArray); begin SetLength(Werte,10); /// end; |
Re: belieb.Dyn. Array in Procedure mit SetLength verändern
Danke Dax, Nu hab ich noch ein Problem, ich habe mehre Forms
Delphi-Quellcode:
Fehlermeldung:[Fehler] Unit1.pas(35): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen.
//////////Form1
procedure TForm1.Button1Click(Sender: TObject); var Werte:TIntegerDynArray; begin SetLength(Werte,5); Form2.SetLaenge(Werte,Werte); Label1.Caption:=IntToStr(length(Werte)); end; ///////////Form2 procedure TForm2.SetLaenge(Wert:Array Of Integer;var Werte:TIntegerDynArray); begin SetLength(Werte,10); /// end; Wie kann ich die Fehlermeldung umgehen? |
Re: belieb.Dyn. Array in Procedure mit SetLength verändern
Gibt es da wirklich keine Lösung,muss ich da in jede unit die procedure schreiben?
|
Re: belieb.Dyn. Array in Procedure mit SetLength verändern
Nein, du musst immer denselben Typ verwenden ... z.B. TIntegerDynArray aus der Unit Types ;)
|
Re: belieb.Dyn. Array in Procedure mit SetLength verändern
Hallo Thomas,
welche Prozedur meinst du überhaupt? Das von dir konstruierte Beispiel in Beitrag #1 soll doch nur zeigen, ob dein array in der Methode SetLaenge() neu dimensioniert werden konnte. Dax hat dir gezeigt, dass du dazu einen Array-Typ vereinbaren musst (oder verwende einen passenden aus Unit Types, z.B. TIntegerDynArray) und die entsprechende Variable mit der Aufrufkonvention Call-By-Reference übergeben musst, damit die Neudimensionierung funktionieren kann. Von einer Prozedur, die in alle Formulare aufgenommen werden muss, kann doch keine Rede sein!? Grüße vom marabu |
Re: belieb.Dyn. Array in Procedure mit SetLength verändern
Beitrag #3 Ich meine den veränderten code in In Beitag#3.Ich finde dazu leider auch kein beispiel oder so.
Stehe da echt ein bisschen auf dem schlauch |
Re: belieb.Dyn. Array in Procedure mit SetLength verändern
Ich auch!
Deine Methode SetLaenge() weist zwei Parameter mit unterschiedlichen Typen auf, du aber übergibst in beiden Fällen die gleiche Variable (Werte: TIntegerDynArray). Kein Wunder, dass der Compiler meckert. Der Sinn der Methode SetLaenge() ist mir nicht ganz klar. Wenn es wirklich nur um das Redimensionieren geht, dann kannst du doch an jeder Stelle SetLength() verwenden. marabu |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 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