mobius
2004-10-26, 20:26:23
Nabend Jungs,
hab ein paar Probleme mit Delphi und ich hoffe ihr könnt mir helfen.
Hier mal ein paar Auszüge aus dem funktionierenden Programm:
Unit1:
implementation
uses Unit2, KomplexeZahlen, Eingabe, Ergeb, Eingabe2;
{$R *.DFM}
//diverse procedures...
procedure TForm1.JuliaMengen1Click(Sender: TObject);
var Aalt, Aneu, A0, C : TKomplex;
var i, Iteration, Radius, xp, yp : Integer;
var Kante : Real;
begin
EingabeForm2.ShowModal;
With EingabeForm2 do
begin
c.re:=StrToFloat(creEdit.text);
c.im:=StrToFloat(cimEdit.text);
A0.re:=StrToFloat(a0reEdit.text);
A0.im:=StrToFloat(a0imEdit.text);
Iteration:=StrToInt(IterationEdit.text);
Radius:=StrToInt(RadiusEdit.text);
Kante:=StrToFloat(KanteEdit.text);
end;
for xp:=1 to 640 do
begin
for yp:=1 to 480 do
begin
Aalt.re:=a0.re+Kante*xp/640;
Aalt.im:=a0.im+Kante*3/4*yp/480;
I:=0;
While (i<=Iteration) and (KompBetrag(Aalt)<=Radius) do
begin
i:=i+1;
Aneu:=KompAddieren(KompMultiplizieren(Aalt, Aalt), C);
Aalt:=Aneu;
end;
If i> Iteration then
Image1.Canvas.Pixels[xp,481-yp]:=clblack
else
Image1.Canvas.Pixels[xp,481-yp]:=$111111*i;
end;
end;
end;
KomplexeZahlenUnit:
interface
type
TKomplex = record
re : Real;
im : Real;
end;
function KompAddieren(A ,B : TKomplex) : TKomplex;
function KompMultiplizieren(A,B:TKomplex) : TKomplex;
function KompBetrag(Betrag:TKomplex) : Real;
function KompArgument(Argument:TKomplex) :Real;
implementation
function KompAddieren (A, B : TKomplex) : TKomplex;
...
Eingabe2: (weitere Unit)
procedure TEingabeForm2.BitBtn1Click(Sender: TObject);
begin
close;
end;
Was ich eigentlich will ist folgendes: Wenn ich das einlesen dar Variablen in der Unit1 mache, dann funktioniert alles wunderbar, aber nun möchte ich das in der Eingabe2 machen und es ergeben sich Übergabefehler und die Frage wo ich welche Variablen global definieren muss.
Hier nun der Umbauversuch:
Unit1:
procedure TForm1.JuliaMengen1Click(Sender: TObject);
var xp, yp, i : Integer;
var Aalt, Aneu : TKomplex;
begin
EingabeForm2.ShowModal;
Einlesen(C, A0 : TKomplex; Iteration, Radius : Integer; Kante : Real);
for xp:=1 to 640 do
begin
for yp:=1 to 480 do
begin
Aalt.re:=a0.re+Kante*xp/640;
Aalt.im:=a0.im+Kante*3/4*yp/480;
I:=0;
While (i<=Iteration) and (KompBetrag(Aalt)<=Radius) do
begin
i:=i+1;
Aneu:=KompAddieren(KompMultiplizieren(Aalt, Aalt), C);
Aalt:=Aneu;
end;
If i> Iteration then
Image1.Canvas.Pixels[xp,481-yp]:=clblack
else
Image1.Canvas.Pixels[xp,481-yp]:=$111111*i;
end;
end;
end;
KomplexeZahlenUnit:
interface
type
TKomplex = record
re : Real;
im : Real;
end;
function KompAddieren(A ,B : TKomplex) : TKomplex;
function KompMultiplizieren(A,B:TKomplex) : TKomplex;
function KompBetrag(Betrag:TKomplex) : Real;
function KompArgument(Argument:TKomplex) :Real;
implementation
function KompAddieren (A, B : TKomplex) : TKomplex;
...
Eingabe2:
implementation
uses Unit1
{$R *.DFM}
procedure Einlesen(C, A0 : TKomplex; Iteration, Radius : Integer; Kante : Real);
begin
c.re:=StrToFloat(creEdit.text);
c.im:=StrToFloat(cimEdit.text);
A0.re:=StrToFloat(a0reEdit.text);
A0.im:=StrToFloat(a0imEdit.text);
Iteration:=StrToInt(IterationEdit.text);
Radius:=StrToInt(RadiusEdit.text);
Kante:=StrToFloat(KanteEdit.text);
end;
procedure TEingabeForm2.BitBtn1Click(Sender: TObject);
begin
close;
end;
Kleines Bild zur Veranschaulichung: http://www.picupload.net/show_image.php?pic=http://www.picupload.net/files/20042610/1098813912.jpg
Probleme:
[Fehler] Unit1.pas(280): Undefinierter Bezeichner: 'Einlesen'
Ich muss die Prozedur Einlesen jetz global bekanntmachen oder? Was muss ich wohin schreiben? Mit dem Variablen, die ich bei der Prozedur angeben muss hab ich auch Probleme. Was is der Unterschied wenn ich schreibe:
Procedure(var Test : Integer); -> Var wird eingelesen?
Procedure(Test : Integer); -> Var wird übergeben?
Wo muss ich die Variablen global bekannt machen, damit ich sie in Eingabe2 einlesen und in Unit1 verwenden kann?
Noch nicht solange mit der Programmiersprache vertraut und doch schon so viel vergessen, hoffe ihr könnt mir helfen.
hab ein paar Probleme mit Delphi und ich hoffe ihr könnt mir helfen.
Hier mal ein paar Auszüge aus dem funktionierenden Programm:
Unit1:
implementation
uses Unit2, KomplexeZahlen, Eingabe, Ergeb, Eingabe2;
{$R *.DFM}
//diverse procedures...
procedure TForm1.JuliaMengen1Click(Sender: TObject);
var Aalt, Aneu, A0, C : TKomplex;
var i, Iteration, Radius, xp, yp : Integer;
var Kante : Real;
begin
EingabeForm2.ShowModal;
With EingabeForm2 do
begin
c.re:=StrToFloat(creEdit.text);
c.im:=StrToFloat(cimEdit.text);
A0.re:=StrToFloat(a0reEdit.text);
A0.im:=StrToFloat(a0imEdit.text);
Iteration:=StrToInt(IterationEdit.text);
Radius:=StrToInt(RadiusEdit.text);
Kante:=StrToFloat(KanteEdit.text);
end;
for xp:=1 to 640 do
begin
for yp:=1 to 480 do
begin
Aalt.re:=a0.re+Kante*xp/640;
Aalt.im:=a0.im+Kante*3/4*yp/480;
I:=0;
While (i<=Iteration) and (KompBetrag(Aalt)<=Radius) do
begin
i:=i+1;
Aneu:=KompAddieren(KompMultiplizieren(Aalt, Aalt), C);
Aalt:=Aneu;
end;
If i> Iteration then
Image1.Canvas.Pixels[xp,481-yp]:=clblack
else
Image1.Canvas.Pixels[xp,481-yp]:=$111111*i;
end;
end;
end;
KomplexeZahlenUnit:
interface
type
TKomplex = record
re : Real;
im : Real;
end;
function KompAddieren(A ,B : TKomplex) : TKomplex;
function KompMultiplizieren(A,B:TKomplex) : TKomplex;
function KompBetrag(Betrag:TKomplex) : Real;
function KompArgument(Argument:TKomplex) :Real;
implementation
function KompAddieren (A, B : TKomplex) : TKomplex;
...
Eingabe2: (weitere Unit)
procedure TEingabeForm2.BitBtn1Click(Sender: TObject);
begin
close;
end;
Was ich eigentlich will ist folgendes: Wenn ich das einlesen dar Variablen in der Unit1 mache, dann funktioniert alles wunderbar, aber nun möchte ich das in der Eingabe2 machen und es ergeben sich Übergabefehler und die Frage wo ich welche Variablen global definieren muss.
Hier nun der Umbauversuch:
Unit1:
procedure TForm1.JuliaMengen1Click(Sender: TObject);
var xp, yp, i : Integer;
var Aalt, Aneu : TKomplex;
begin
EingabeForm2.ShowModal;
Einlesen(C, A0 : TKomplex; Iteration, Radius : Integer; Kante : Real);
for xp:=1 to 640 do
begin
for yp:=1 to 480 do
begin
Aalt.re:=a0.re+Kante*xp/640;
Aalt.im:=a0.im+Kante*3/4*yp/480;
I:=0;
While (i<=Iteration) and (KompBetrag(Aalt)<=Radius) do
begin
i:=i+1;
Aneu:=KompAddieren(KompMultiplizieren(Aalt, Aalt), C);
Aalt:=Aneu;
end;
If i> Iteration then
Image1.Canvas.Pixels[xp,481-yp]:=clblack
else
Image1.Canvas.Pixels[xp,481-yp]:=$111111*i;
end;
end;
end;
KomplexeZahlenUnit:
interface
type
TKomplex = record
re : Real;
im : Real;
end;
function KompAddieren(A ,B : TKomplex) : TKomplex;
function KompMultiplizieren(A,B:TKomplex) : TKomplex;
function KompBetrag(Betrag:TKomplex) : Real;
function KompArgument(Argument:TKomplex) :Real;
implementation
function KompAddieren (A, B : TKomplex) : TKomplex;
...
Eingabe2:
implementation
uses Unit1
{$R *.DFM}
procedure Einlesen(C, A0 : TKomplex; Iteration, Radius : Integer; Kante : Real);
begin
c.re:=StrToFloat(creEdit.text);
c.im:=StrToFloat(cimEdit.text);
A0.re:=StrToFloat(a0reEdit.text);
A0.im:=StrToFloat(a0imEdit.text);
Iteration:=StrToInt(IterationEdit.text);
Radius:=StrToInt(RadiusEdit.text);
Kante:=StrToFloat(KanteEdit.text);
end;
procedure TEingabeForm2.BitBtn1Click(Sender: TObject);
begin
close;
end;
Kleines Bild zur Veranschaulichung: http://www.picupload.net/show_image.php?pic=http://www.picupload.net/files/20042610/1098813912.jpg
Probleme:
[Fehler] Unit1.pas(280): Undefinierter Bezeichner: 'Einlesen'
Ich muss die Prozedur Einlesen jetz global bekanntmachen oder? Was muss ich wohin schreiben? Mit dem Variablen, die ich bei der Prozedur angeben muss hab ich auch Probleme. Was is der Unterschied wenn ich schreibe:
Procedure(var Test : Integer); -> Var wird eingelesen?
Procedure(Test : Integer); -> Var wird übergeben?
Wo muss ich die Variablen global bekannt machen, damit ich sie in Eingabe2 einlesen und in Unit1 verwenden kann?
Noch nicht solange mit der Programmiersprache vertraut und doch schon so viel vergessen, hoffe ihr könnt mir helfen.