Autor Beitrag
masterofswim
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 23.02.11 16:57 
Hallo alle zusammen.
Ich möchte Bälle auf den Formular darstellen.
Habe jetzt auch schon Debugt aber finde den Fehler einfach nicht, die Bälle werden nicht angezeigt.

Könnt ihr mir helfen?

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:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
 unit ULevel1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, {UBaelle,} UAuto, UCar, ExtCtrls, UBall;

type
  TFLevel1 = class(TForm)
    Fahren: TTimer;
    warten: TTimer;
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormActivate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FahrenTimer(Sender: TObject);
    procedure wartenTimer(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    zwarte:integer;
    procedure ballerstellen(x,y:integer;nummer:byte);
    procedure frei(nummer:byte);
    { Public declarations }
  end;

var
  FLevel1: TFLevel1;
  Ball : array [1..20of TBall;
 // Auto:Tauto;
  Auto: TCar;
  ZBallnummer:byte;
  i:integer;
implementation

{$R *.dfm}

procedure TFLevel1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin

end;

procedure TFLevel1.FormActivate(Sender: TObject);
var ballnummer:byte;
    i:integer;
begin
FLevel1.Left:=0;
FLevel1.Top:=0;
FLevel1.Width:=Screen.WorkAreaWidth;
FLevel1.Height:=Screen.WorkAreaHeight;


Auto:= TCar.create(Self);
Auto.Top:=clientheight div 2;
Auto.left:=clientwidth div 2;
Fahren.Enabled:=true;

for ballnummer:=1 to 10 do
    ballerstellen(500*20+i*100,200,ballnummer);


end;

procedure TFLevel1.FormCreate(Sender: TObject);

begin
i:=0;
end;

procedure TFLevel1.FormKeyPress(Sender: TObject; var Key: Char);
begin
 if Auto<>nil then
  Auto.setRichtung(Key);
 If Key = 'q' then close; 
end;

procedure TFLevel1.FahrenTimer(Sender: TObject);
var nummer:byte;
begin
 warten.Enabled:=false;
 case auto.getrichtung of
 'w' : auto.Top:=auto.Top-4;
 'a' : auto.left:=auto.left-4;
 's' : auto.Top:=auto.Top+4;
 'd' : auto.left:=auto.left+4;
 end;
 if Ball[nummer] <> nil then Ball[nummer].setAutoPos(Auto.Left,auto.Top);

end;

procedure TFLevel1.ballerstellen(x, y : integer;nummer:byte);
begin
 Ball[nummer] := TBall.create(self,auto, x, y, nummer);
 Ball[nummer].Left:=x;
 Ball[nummer].Top:=y;
end;

procedure TFLevel1.frei(nummer:byte);
begin
 Ball[nummer]:=nil;

end;

procedure TFLevel1.wartenTimer(Sender: TObject);
{Nötig weil bei manchen schnelleren rechnern das kurze unterbrechen
des fahrtimers nicht erkannt wird und so auf den verschwundenen Ball
Zugegriffen wird => Fehlermeldung Zugriffsverletzung}

begin
 zwarte:=zwarte+1;
 if zwarte = 2 then fahren.Enabled:=true;
end;

end.


Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 23.02.11 17:12 
user profile iconmasterofswim hat folgendes geschrieben Zum zitierten Posting springen:
Habe jetzt auch schon Debugt aber finde den Fehler einfach nicht
Und dabei sind dir die Werte für die Koordinaten nicht aufgefallen? :gruebel:

user profile iconmasterofswim hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
for ballnummer:=1 to 10 do
    ballerstellen(500*20+i*100,200,ballnummer);
Ich kann mir beim besten Willen nicht vorstellen, dass du eine Bildschirmauflösung hast, bei der X-Koordinaten von mehr als 10000 darstellbar sind...
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Mi 23.02.11 17:12 
Da du nicht sagst, wie du die Bälle genau erzeugst, noch was das für Dinger sind (Shapes?), rate ich mal ins blaue hinein und tippe darauf, dass du kein Parent angibst (sollte die Form sein, also der erste Parameter in TBall.Create).

Edit: Oh, user profile iconjaenickes Erklärung dürfte besser sein. :D

_________________
We are, we were and will not be.
masterofswim Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mi 23.02.11 17:16 
Und was meinst du wie die Parameter sonst stehen müssten?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 23.02.11 19:58 
Woher soll ich das wissen? Ich weiß ja nicht wo du deine Bälle hinsetzen möchtest. :nixweiss:

Hast du ein Problem mit der Rechnung an sich? Also ist das Problem die Grundschulmathematik, die du dafür brauchst?

Was möchtest du denn mit der Rechnung erreichen, also wo sollen die Bälle liegen?