AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte TFahrzeug - Eine Fahrzeug-Klasse
Thema durchsuchen
Ansicht
Themen-Optionen

TFahrzeug - Eine Fahrzeug-Klasse

Ein Thema von Flare · begonnen am 9. Apr 2006 · letzter Beitrag vom 17. Apr 2006
Antwort Antwort
Seite 1 von 3  1 23      
Flare
Registriert seit: 26. Jan 2006
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
Angehängte Dateien
Dateityp: zip fahrzeug_733.zip (223,5 KB, 274x aufgerufen)
 
Hawkeye219

 
Delphi 2010 Professional
 
#2
  Alt 9. Apr 2006, 21:11
Hallo Willy,

sehr schön gelöst!

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze

 
Turbo Delphi für Win32
 
#3
  Alt 9. Apr 2006, 21:27
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!
  Mit Zitat antworten Zitat
Flare

 
Delphi 7 Professional
 
#4
  Alt 10. Apr 2006, 15:15
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.


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Sascha L

 
Delphi 2006 Professional
 
#5
  Alt 10. Apr 2006, 15:34
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.
Sascha
  Mit Zitat antworten Zitat
Flare

 
Delphi 7 Professional
 
#6
  Alt 10. Apr 2006, 15:39
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
Willy Scheibel
  Mit Zitat antworten Zitat
Sascha L

 
Delphi 2006 Professional
 
#7
  Alt 10. Apr 2006, 15:51
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:

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:

Form.Invalidate;
Sascha
  Mit Zitat antworten Zitat
Flare

 
Delphi 7 Professional
 
#8
  Alt 10. Apr 2006, 16:13
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
Willy Scheibel
  Mit Zitat antworten Zitat
Sascha L

 
Delphi 2006 Professional
 
#9
  Alt 10. Apr 2006, 16:19
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
Sascha
  Mit Zitat antworten Zitat
Flare

 
Delphi 7 Professional
 
#10
  Alt 10. Apr 2006, 16:27
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.
Weißt du/wisst ihr woran das liegt?


Flare
Willy Scheibel
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz