Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Delphi Zugriff auf andere Units und deren Objekte
Leon91200 - Do 19.04.18 15:25
Titel: Delphi Zugriff auf andere Units und deren Objekte
Hallo ich habe für die Schule ein Programm geschrieben, indem man Zufallszahlen mit 2 verschiedenen Methoden letztlich sortieren muss. Diese beiden Methoden sollen wir jeweils in eine Unit auslagern. Uns wurde jedoch nicht erklärt wie das geht. Im Internet hab ich mich natürlich auch erkundigt und dort stand, dass man in seiner Hauptunit in dem "Uses" Abschnitt den Namen seiner 2. Unit hinzufügen muss, um auf diese zuzugreifen. Jetzt habe ich dies natürlich gemacht, aber in meiner 2. Unit hab ich jetzt nur die Procedure, um meine Zahlen zu sortieren. Jetzt weiß ich jedoch nicht, wie ich auf die Variablen aus meiner Main Unit und auch auf die Form zugreifen kann. Wäre nett wenn mir das jemand erklären könnte.
Delete - Do 19.04.18 16:44
- Nachträglich durch die Entwickler-Ecke gelöscht -
Leon91200 - Do 19.04.18 17:02
Hm irgendwie versteh ich das nicht so wirklich. Meine Unit 2 sieht unverändert so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35:
| unit Unit2;
{$mode objfpc}{$H+}
interface
uses Classes, SysUtils; implementation
procedure BubblesortClick(Sender: TObject); var Merke:Integer; Anfang, Ende:Real; begin
Anfang:=Time ;
ListBox_sortiert.Items.Clear;
for i:=n downto 1 do for j:=1 to i do if Zahl[j]>Zahl[j+1] then begin Merke:=Zahl[j]; Zahl[j]:=Zahl[j+1]; Zahl[j+1]:=Merke; end; for i:=1 to n do begin ListBox_sortiert.Items.Add(IntToStr(Zahl[i])); end; Ende:=Time; Edit_Dauer.Text:=FloatToStrF((Ende-Anfang)*24*3600,ffFixed, 10, 4); end; end. |
Jetzt kommen aber immer Fehler, dass zb das Objekt "ListBox_sortiert" nicht gefunden wurde. Wie kann ich denn einfach machen, dass der Quellcode, wie er hier steht, genauso in der 2. Unit, wie auch in der ersten Unit funktioniert. Habe auch schon probiert den Uses teil usw aus der Unit 1 vollständig zu kopieren, aber auch dann geht es nicht
Moderiert von Narses: Delphi-Tags hinzugefügt
Delete - Do 19.04.18 17:15
- Nachträglich durch die Entwickler-Ecke gelöscht -
Leon91200 - Do 19.04.18 17:38
Ich habe es soweit jetzt erstmal so geändert, wie ich sollte. Wie genau greife ich jetzt auf meine Sortierprocedure zu? Eigentlich einfach "BubbleSortClick(?);"
Delete - Do 19.04.18 17:49
- Nachträglich durch die Entwickler-Ecke gelöscht -
Leon91200 - Do 19.04.18 18:33
Bei mir sieht es jetzt so aus, also in der 2. Unit:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| unit Unit2;
{$mode objfpc}{$H+}
interface uses Classes, SysUtils;
procedure BubblesortClick(Liste: TStringList; var Dauer: string);
implementation
const n=100; Bereich=1000;
var Zahl : Array[1..n] of Word; var i,j, Merke: Integer;
procedure BubblesortClick(Liste: TStringList; var Dauer: string); var Anfang, Ende:Real; begin
Anfang:=Time ;
for i:=n downto 1 do for j:=1 to i do if Zahl[j]>Zahl[j+1] then begin Merke:=Zahl[j]; Zahl[j]:=Zahl[j+1]; Zahl[j+1]:=Merke; Liste.Add(IntToStr(Zahl[i])); end;
Ende:=Time; Dauer := FloatToStrF((Ende-Anfang)*24*3600,ffFixed, 10, 4);
end;
Das ist die Prozedur aus Unit 1: procedure TForm1.BubblesortClick(Sender: TObject); begin ListBox_sortiert.Items.Clear;
BubblesortClick(ListBox_sortiert.Items, Dauer);
Edit_Dauer.Text := dauer; end; |
Aber irgendwie steht jetzt die ganze Zeit dar, dass er den Identifier Dauer nicht finden kann.
Moderiert von Narses: Delphi-Tags hinzugefügt
Delete - Do 19.04.18 19:13
- Nachträglich durch die Entwickler-Ecke gelöscht -
rushifell - Do 19.04.18 21:24
Hallo,
ich weiss ja nicht, wie die Vorgabe von Deinem Lehrer ist, aber wenn er wirklich nicht erklärt hat wie ihr vorgehen sollt, finde ich das pädagogisch nicht sehr sinnvoll.
Ich finde es sinnvoller, direkt das Feld an die Procedure oder Function zu übergeben und nicht den Umweg über eine TStringlist zu machen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| Procedure BubSort(Var feld: Array of Integer); Var i:Integer; Begin For i:=High(feld) downto Low(feld) do End; |
Dein Programm dürfte allerdings gar nicht funktionieren, da Du außerhalb des Wertebereichs kommst. Schau zuerst einmal, dass Dein Programm ohne Unit läuft, lagere alles in Proceduren oder Functionen aus und erstelle besser erst dann eine Unit, in die Du die entsprechenden Proceduren und Functionen einfügst.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!