Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Objekt von TShape ableiten (https://www.delphipraxis.net/43246-objekt-von-tshape-ableiten.html)

Antigo 31. Mär 2005 12:41


Objekt von TShape ableiten
 
Hi,
Ich bin gerade eine kleine Simulation am programmieren, wo ziemlich viele rechtecke bewegt werden müssen. Da mit canvas trotz doublebuffering zu heftiges flackern auftritt wollte ich das jetzt mit Shapes lösen.
Da die rechtecke aber noch zusätzliche Eigenschaften wie Geschwindigkeit haben, wollte ich mich zum ersten mal an Vererbung ran wagen und eine Klasse von Tshape ableiten, nur leider funktioniert das nicht richtig. Nach einigen Recherchen bin ich darauf gestoßen das es wohl etwas mit inherited, also dem aufrufen der create prozedur des Vaters Tshape zu tun haben muss. Also habe ich das folgendermassen versucht:

Delphi-Quellcode:
type Tmyklasse = class(TShape)
  ...
  ...

  v: Integer; //Geschwindigkeit
  constructor erzeugen(top,left,hoehe,breite,geschw: Integer; aowner: TComponent);
  destructor entfernen;

....
implementation

constructor Tmyklasse.erzeugen;
begin
  inherited create(aowner);
  Setbounds(left,top,breite,hoehe);
  color:=clgreen;
  v:=geschw;
end;
und dann
Delphi-Quellcode:
Tmyklasse.erzeugen(1,0,10,10,10,5,5,self)
und irgendetwas macht das programm dann auch, nur kein shape erstellen und anzeigen.


Kann mir jemand sagen wo mein Fehler liegt, oder falls das zwecklos wäre, mir erklären wie ich das richtig mache?


schonmal vielen dank im vorraus :)

Khabarakh 31. Mär 2005 13:39

Re: Objekt von TShape ableiten
 
Zitat:

Da mit canvas trotz doublebuffering zu heftiges flackern auftritt wollte ich das jetzt mit Shapes lösen.
Das ist definitiv der falsche Weg :wink: . Hast du Bitmaps benutzt? Ich denke nicht :wink: ².
Delphi-Quellcode:
type
  TForm1 = class(TForm)
    [...]  
  private
    MyKlasse: TMyKlasse;


[...]
   
begin
  MyKlasse := Tmyklasse.erzeugen(1,0,10,10,10,5,5,self);
Die Instanz sollte keine lokale Variable sein, sonst kannst du ja nicht mehr darauf zugreifen.

Antigo 31. Mär 2005 13:45

Re: Objekt von TShape ableiten
 
Nein ich hab einfach ein rectangle gezeichnet. Wo liegen denn die verbesserungen bei bitmaps, bzw. wie arbeite ich damit?


Und die Variable hab ich schon globar deklariert, besser gesagt habe ich eine TOBjectlist in der die Instanzen drinstehen, weil ich mehrere brauche. Da tut sich aber wie gesagt gar nicht.

Khabarakh 31. Mär 2005 14:01

Re: Objekt von TShape ableiten
 
Mehr Performance, kein Flimmern usw.
Paintbox und Image sind eigentlich nur zum Anzeigen eines Bildes da.
Zur der Instanz: Zeig mal etwas mehr Code.

Antigo 31. Mär 2005 14:09

Re: Objekt von TShape ableiten
 
ok, global definiere ich:
Delphi-Quellcode:
var liste: TObjectlist;
dann mache ich
Delphi-Quellcode:
  liste.add(Tmyklasse.create(self));
  Tmyklasse(liste[liste.count-1]).SetBounds(10,10,10,10);
Vorher mit Canvas hat das so geklappt. Und einen Fehler erhalte ich auch nicht.

gordon freeman 31. Mär 2005 14:34

Re: Objekt von TShape ableiten
 
Müsste man als Owner nicht TForm, oder so angeben. Sonst zeichnet sich dein Shape auf sich selbst und man kann es gar nicht sehen. Ein
Delphi-Quellcode:
visible := true; //Alternativ MyObject.Show
kann auch nicht schaden.

Antigo 31. Mär 2005 14:49

Re: Objekt von TShape ableiten
 
hilft beides nichts :(

aber ich glaube das ich das ganze dann wohl doch mit Canvas und Bitmaps mache. Hab auch ein Tutorial dazu gefunden, habs aber noch nicht so ganz verstamden...

Khabarakh 31. Mär 2005 14:59

Re: Objekt von TShape ableiten
 
Zitat:

Zitat von gordon freeman
Müsste man als Owner nicht TForm, oder so angeben. Sonst zeichnet sich dein Shape auf sich selbst und man kann es gar nicht sehen.

Der Owner wird ja schon als Parameter im Konstruktor angegeben. Allerdings fehlt die Zuweisung des Parents :wink: .
Delphi-Quellcode:
liste.add(Tmyklasse.create(self));
Tmyklasse(liste[liste.count-1]).SetBounds(10,10,10,10);
Tmyklasse(liste[liste.count-1]).Parent := Self;

Antigo 31. Mär 2005 16:10

Re: Objekt von TShape ableiten
 
super, funktioniert. dankeschön :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:30 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 by Thomas Breitkreuz