![]() |
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 ![]() ![]() ![]() ![]() 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 |
Re: TFahrzeug - Eine Fahrzeug-Klasse
Hallo Willy,
sehr schön gelöst! :thumb: Gruß Hawkeye |
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! |
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 |
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. |
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 |
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:
Die musst du natürlich z.B. ihm OnCreate-Ereignis des Formulars initialisieren:
var
fBuffer: TBitmap;
Delphi-Quellcode:
Im OnResize-Ereignis des Formulars muss folgender Code:
fBuffer := TBitmpa.Create; // nicht vergessen, beim Beenden fBuffer.Free auszuführen!
Delphi-Quellcode:
Nun zeichnest du nicht mehr auf Form.Canvas, sondern änderst alles so um, dass nur noch auf fBuffer.Canvas gezeichnet wird.
fBuffer.Width := Form.Width;
fBuffer.Height := Form.Height; Im OnPaint-Ereignis des Formulars:
Delphi-Quellcode:
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:
Canvas.CopyRect(Rect(0,0,fBuffer.Width,fBuffer.Height), fBuffer.Canvas,
Rect(0,0,fBuffer.Width,fBuffer.Height));
Delphi-Quellcode:
Form.Invalidate;
|
Re: TFahrzeug - Eine Fahrzeug-Klasse
Danke, dann werde ich das mal einbauen.
Zitat:
Aber ich mache jetzt erstmal! Flare |
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 ;) |
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:
Das habe ich jetzt eben so geändert, aber jetzt bekomme ich kein Bild, es wird einfach keins angezeigt. :wall:
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; Weißt du/wisst ihr woran das liegt? Flare |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:04 Uhr. |
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