Einzelnen Beitrag anzeigen

Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Problem mit dynamischer Array und eaccessviolation

  Alt 6. Apr 2012, 00:54
Du solltest auf Zugriffe wie form1 verzichten.
Innerhalb der Form-Methoden kannst du die Eigenschaften direkt ansprechen Width oder auch mit Self.Width . Denn ein Umbenennen der Form (z.B. in etwas Sinnvolles wie FSpiel ) haut dir den Code auseinander, genauso, wenn du eine weitere Instanz der Form erzeugst.

In deiner Anwendung hast du diese Routine innerhalb von TPunkt . Dort hast du ein Feld Fenster , welches wohl auf die Form verweisen soll, dann benutze das Feld doch auch

Weiterhin fällt mir auf, dass du mit Width - 33 arbeitest ... möchtest du den Rand des Fensters berücksichtigen?
Entweder fragst du die Form und das System, wie breit der Rand denn wirklich ist, oder (viel einfacher) du nimmst ClientWidth , das ist exakt die innere Breite ohne Rand - analog gibt es dazu natürlich auch ClientHeight
Delphi-Quellcode:
case rRichtung of
 1:
  begin
    rpunkt.X:= rpunkt.X +3;
    
    if rpunkt.Y > Fenster.ClientWidth
    then
      rRichtung := 2;

  end;
 2:
  begin
    rpunkt.X:= rpunkt.X -3;

    if rpunkt.X < 0 then rRichtung := 1;
   // Sleep(25);
  end;
end;

Fenster.Label1.Caption := inttostr( rRichtung );

// Sleep(25);
und den gesamten Code bekommt man auch noch kürzer:
Delphi-Quellcode:
// rRichtung ist entweder 1 oder -1
rPunkt.X := rPunkt.X + rRichtung * 3;

if ( rPunkt.X < 0 ) or ( rPunkt.X > Fenster.ClientWidth ) then
  rRichtung := - rRichtung;

Fenster.Label1.Caption := inttostr( rRichtung );

// Sleep(25);
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat