Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TFahrzeug - Eine Fahrzeug-Klasse (https://www.delphipraxis.net/67118-tfahrzeug-eine-fahrzeug-klasse.html)

Flare 9. Apr 2006 20:42


TFahrzeug - Eine Fahrzeug-Klasse
 
Liste der Anhänge anzeigen (Anzahl: 1)
So, da ich es nun (eigentlich schon länger) fertiggestellt habe, wollte ich euch mal zeigen wobei ihr mir geholfen habt.
Hier sind die Links zu den beiden Stellen wo mir geholfen wurde.
Einmal beim drehen eines Rechtecks, einer kleinem Denkfehler mit Forms, einen Fehler mit der Initialisierung von Variablen und einen kompletten Hänger mit Timern.

Es ist ein kleiner Test zur Objektorientierten Programmierung. Ich habe mir eine Klasse Fahrzeug erstellt und davon eine Klasse Roboter abgeleitet, welchen man nun über eine Form fahren lassen kann.

Source und die Test-Exe sind im Anhang.


Flare

Hawkeye219 9. Apr 2006 21:11

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
Hallo Willy,

sehr schön gelöst! :thumb:

Gruß Hawkeye

Matze 9. Apr 2006 21:27

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
Hi,

ich kann mich anschließen: Wunderschön gelöst und sauber formatierter Code zeigen jedem OOP-Einsteiger (oder auch fortgeschrittenen), wie man mit OOP umgeht. Sehr schön!

Flare 10. Apr 2006 15:15

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
Ich muss mich hier mal entschuldigen, ich hatte in meiner Auftählung glatt 2 Links unterschlagen, sie sind jetzt im ersten Beitrag ergänzt.

Und ich finde es toll dass es scheinbar praktisch ist. :spin:


Flare

Sascha L 10. Apr 2006 15:34

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
Schön gemacht ;)

Noch ein kleiner Tipp, damit der Roboter nicht so flackert: Arbeite mit einem Buffer. D.h. du nimmst eine globale Variable vom Typ TCanvas. Dort zeichnest du dann deinen Roboter und seine Bewegungen rein. z.B. Im OnPaint-Event des Formulars kannst du dann immer CopyRect machen, d.h. du kopierst den Buffer in aufs Formular.

Flare 10. Apr 2006 15:39

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
1. Frage dazu: Wie soll ich das dann mit den Drehungen realisieren, wenn dies ein Rechteck ist?
2. Frage: Wie stellt man das an? Ich habe noch nie mit Copyrect gearbeitet. Könntest du einen kleinen Beispielcode reinstellen?


Flare

Sascha L 10. Apr 2006 15:51

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
Du zeichnest doch momentan alles auf Form.Canvas.

Anstatt das zu machen, musst du eine globale Variable nehmen.

z.B:

Delphi-Quellcode:
var
 fBuffer: TBitmap;
Die musst du natürlich z.B. ihm OnCreate-Ereignis des Formulars initialisieren:

Delphi-Quellcode:
fBuffer := TBitmpa.Create; // nicht vergessen, beim Beenden fBuffer.Free auszuführen!
Im OnResize-Ereignis des Formulars muss folgender Code:

Delphi-Quellcode:
fBuffer.Width := Form.Width;
fBuffer.Height := Form.Height;
Nun zeichnest du nicht mehr auf Form.Canvas, sondern änderst alles so um, dass nur noch auf fBuffer.Canvas gezeichnet wird.

Im OnPaint-Ereignis des Formulars:

Delphi-Quellcode:
 Canvas.CopyRect(Rect(0,0,fBuffer.Width,fBuffer.Height), fBuffer.Canvas,
                        Rect(0,0,fBuffer.Width,fBuffer.Height));
Da das OnPaint nicht ständig aufgerufen wird (glaub ich, bin mir grad nicht sicher) müsstest du am Ende des Zeichnens (Roboter auf fBuffer.Canvas) noch folgenden Code ausführen:

Delphi-Quellcode:
Form.Invalidate;

Flare 10. Apr 2006 16:13

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
Danke, dann werde ich das mal einbauen.

Zitat:

Da das OnPaint nicht ständig aufgerufen wird (glaub ich, bin mir grad nicht sicher)
Doch ^^ falls du dir noch nicht die Fahrzeugprozedur refresh angeguckt haben solltest (die wird vor jedem neuen Berechnen der Koordinaten ausgeführt), diese Refresht die ganze Form.

Aber ich mache jetzt erstmal!


Flare

Sascha L 10. Apr 2006 16:19

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
Ich meinte das allgemein, dass onPaint vom Formular nicht ständig aufgerufen wird.

Das hatte jetzt keinen Bezug zu deinem Code ;)

Wenn du schon so eine Refresh-Funktion drin hast, dann ist es ja gut ;)

Flare 10. Apr 2006 16:27

Re: TFahrzeug - Eine Fahrzeug-Klasse
 
Ok, ich habe es jetzt eingefügt, ich zeige es lieber nochmal komplett mit Code, aber lasse die komplett unwichtigen Stellen heraus.
Delphi-Quellcode:
procedure TFahrzeug.refresh();
begin
  FForm.Refresh;
  fBuffer.FreeImage;
end;

procedure TFahrzeug.draw();
begin
  fBuffer.Canvas.Pixels[round(position.X), round(position.Y)] := clBlack;
  FForm.Canvas.CopyRect(Rect(0,0,fBuffer.Width,fBuffer.Height), fBuffer.Canvas,
                        Rect(0,0,fBuffer.Width,fBuffer.Height));
end;

constructor TFahrzeug.Create(form: TForm);
begin
  fBuffer := TBitmap.Create;
  FForm := form;
end;

destructor TFahrzeug.Destroy;
begin
  fBuffer.Free;
  inherited;
end;

procedure TFahrzeug.vtimerTimer(Sender: TObject);
var newpos: TExtPoint;
begin
  refresh;
  draw;
end;
Das habe ich jetzt eben so geändert, aber jetzt bekomme ich kein Bild, es wird einfach keins angezeigt. :wall:
Weißt du/wisst ihr woran das liegt?


Flare


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz