Autor Beitrag
jupp86
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Fr 23.04.04 19:18 
Ich habe folgendes Problem: Ich habe in eine Prozedure meiner Unit Variablen übergeben und dann in dieser Prozedur den Wert dieser Variablen einer Variable eines type class(TObject) zugewiesen. Ich verwende diese Variable in einer anderen Prozedur des types wieder.Es kommt bei mir während ich das Programm ausführe zu dem Zeitpunkt, wo die Variable das erste mal im Quellcode angesprochen wird folgender Fehler:
Im Projekt P_Flyhigh.exe ist eine exception der Klasse AAccessviolation aufgetreten. Zugriffsverletzung bei Adresse 0044.......

Hier die Quellcodes:
Hauptprogramm:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.Button1Click(Sender: TObject);
begin
cockpit.cockpitzeichnen(1,400,Form1.Canvas,'Jupp');
end;


Die Unit:
ausblenden volle Höhe 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:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
unit U_cockpit;

interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type Tpit = class(TObject)

//Atribute
private
x,y:integer;
//methoden
public
procedure cockpitzeichnen(xkord,ykord:integer;canv:TCanvas;name:string);
procedure zeigerzeichnen(canv:Tcanvas;hoehe,coolness,speed:integer);

end;

implementation

procedure Tpit.cockpitzeichnen(xkord,ykord:integer;canv:TCanvas;name:string);
begin
x:=xkord;
y:=ykord;
with canv do begin
Brush.Color:=clwhite;
pen.color:=clblack;
//::zeichnen::
//grundgerüst
MoveTo(x,y+20);
LineTo(x+200,y);
LineTo(x+600,y);
LineTo(x+800,y+20);
//texte
TextOut(x+5,y+30,name);
TextOut(x+287,y+3,'Höhe');
TextOut(x+480,y+3,'Coolness');
TextOut(x+385,y+86,'Speed');
//lines
MoveTo(x+200,y);
LineTo(x+200,y+200);
MoveTo(x+600,y);
LineTo(x+600,y+200);

//höhe
Brush.Color:=clBtnShadow;
Ellipse(x+280,y+20,x+320,y+60);
//coolness
Ellipse(x+480,y+20,x+520,y+60);
//speed
Ellipse(x+360,y+5,x+440,y+85);
end;
end;

procedure Tpit.zeigerzeichnen(canv:Tcanvas;hoehe,coolness,speed:integer);
var winkel,winkel2,winkel3:integer;
begin
with canv do
begin
//::kreisberechnung::
//hoehe
winkel:=-(hoehe+450)*3;
MoveTo(x+300,y+40);
lineto(trunc((x+300)-sin(winkel/360)*2*pi*3),trunc((y+40)-cos(winkel/360)*2*pi*3));
//coolness
winkel2:=-(coolness+450)*3;
MoveTo(x+500,y+40);
lineto(trunc((x+500)-sin(winkel2/360)*2*pi*3),trunc((y+40)-cos(winkel2/360)*2*pi*3));
//speed
winkel3:=-(speed+450)*3;
MoveTo(x+400,y+45);
lineto(trunc((x+400)-sin(winkel3/360)*2*pi*5),trunc((y+45)-cos(winkel3/360)*2*pi*5));
end;
end;
end.

Ich hab jetzt mal die ganze Unit reingetan, da ich nicht genau weiß was der Fehler ist.
Ich hoffe ihr könnt mir helfen dieses Problem zu umgehen. Ich hab schon ausprobiert, die Variablen einfach so öffentlich zu machen und einfach so einzugeben. das ging auch nicht.

Ich hoffe ich hab mein Problem verständlich geschildert.
Danke im voraus.

Moderiert von user profile iconPeter Lustig (19:34, 23.04.2004): Code- durch Delphi-Tags ersetzt
smiegel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 992
Erhaltene Danke: 1

WIN 7
D7 Prof., C#, RAD XE Prof.
BeitragVerfasst: Mo 26.04.04 07:43 
Hallo,

wird Dein Objekt überhaupt erzeugt?

Etwa in der Art: cockpit:=TPit.Create;

_________________
Gruß Smiegel
Ich weiß, daß ich nichts weiß, aber ich weiß mehr als die, die nicht wissen, daß sie nichts wissen. (Sokrates)
jupp86 Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Di 27.04.04 16:01 
Das Objekt wird erstellt.
Es hat sich aber dennoch erledigt, da ich das Problem umgangen hab.