Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi belieb.Dyn. Array in Procedure mit SetLength verändern (https://www.delphipraxis.net/73760-belieb-dyn-array-procedure-mit-setlength-veraendern.html)

Hallo_Thomas 23. Jul 2006 18:06


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;

Dax 23. Jul 2006 18:09

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;

Hallo_Thomas 24. Jul 2006 09:57

Re: belieb.Dyn. Array in Procedure mit SetLength verändern
 
Danke Dax, Nu hab ich noch ein Problem, ich habe mehre Forms

Delphi-Quellcode:
//////////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;
Fehlermeldung:[Fehler] Unit1.pas(35): E2033 Die Typen der tatsächlichen und formalen Var-Parameter müssen übereinstimmen.

Wie kann ich die Fehlermeldung umgehen?

Hallo_Thomas 25. Jul 2006 16:38

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?

jfheins 25. Jul 2006 16:41

Re: belieb.Dyn. Array in Procedure mit SetLength verändern
 
Nein, du musst immer denselben Typ verwenden ... z.B. TIntegerDynArray aus der Unit Types ;)

marabu 25. Jul 2006 16:49

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

Hallo_Thomas 25. Jul 2006 17:35

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

marabu 25. Jul 2006 19:31

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 19:03 Uhr.

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