Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Eigene Klasse mit Timer und IMage (https://www.delphipraxis.net/86978-eigene-klasse-mit-timer-und-image.html)

Chaosente 21. Feb 2007 18:50


Eigene Klasse mit Timer und IMage
 
Also ich möchte eine klasse schreiben, die sozusagen ein spielfeld ist (dafür verwende ich ein timage). da ich in die klasse einen timer mit eingebaut hab rendert der alle paar sekunden das spielfeld neu nur weis ich nciht wie ich das image in die klasse TSpielfeld reinkriege und sie dann auf dem form anzeigen kann, oder muss ich das irgendwie mit vererbung von timage machen steig da nciht so durch...

Thorben_K 21. Feb 2007 18:56

Re: Eigene Klasse mit Timer und IMage
 
Möglich ist beides

Vererben geht, ebenso wie "Inneres" Image

ich würde jedoch Vererben, um so lässtige arbeit zuvermeiden.

Chaosente 21. Feb 2007 18:59

Re: Eigene Klasse mit Timer und IMage
 
jah da hab ich jetzt aber nen kleines problem, wahrscheinlich recht einfach, aber ich kann mit der warnung ncihts anfangen die er mir gibt:

Zitat:

[Warnung] Spielfeld.pas(13): W1010 Methode 'Create' verbirgt virtuelle Methode vom Basistyp 'TImage'
Hier nochmal mein code:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Spielfeld;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Spielfeld: TSpielfeld;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
begin
Spielfeld:=TSpielfeld.Create;
Spielfeld.Width:=300;
spielfeld.Height:=300;
spielfeld.Left:=10;
spielfeld.Top:=10;
spielfeld.Canvas.Ellipse(0,0,20,20);
end;

end.
und der code der unit spielfeld:

Delphi-Quellcode:
unit Spielfeld;

interface

uses ExtCtrls;

type
  TSpielfeld = class(TImage)
  procedure SpielfeldRender(Sender: TObject);
  private
    FTimer: TTimer;
  public
    constructor Create;
    destructor Destroy; override;
  end;

implementation

constructor TSpielfeld.Create;
begin
inherited;
  FTimer := TTimer.Create(nil);
  FTimer.Interval := 500; // alle 500 Millisekunden was tun
  FTimer.OnTimer := SpielfeldRender;
end;

destructor TSpielfeld.Destroy;
begin
  FTimer.Free;
  inherited;
end;

procedure TSpielfeld.SpielfeldRender(Sender: TObject);
begin
  // Hier deinen Code ausführen.
end;

end.

xZise 21. Feb 2007 19:17

Re: Eigene Klasse mit Timer und IMage
 
Du musst das Create des Spielfeldes auch überschreiben (override) und nicht nur benutzten ;)
Also mach das gleiche, wie bei "Destroy": Schreibe hinter dem constructor Create; ein override; ;) Dann hat sich das mit der Warnung :thumb:

[edit]Vielleicht interessant: "Virtuelle, dynamische un abstrakte Methoden" (DSDT)[/edit]


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:36 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