TImage'yi ata sınıf alan sınıf yapmaya çalıştım.Beceremedim.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

TImage'yi ata sınıf alan sınıf yapmaya çalıştım.Beceremedim.

Mesaj gönderen huseyinkucuk »

Arkadaşlar; merhaba. Yeni yeni thread'leri öğreniyorum... Bi tane yaptım, düğmeye bastıkça formun rasgele yerlerinde 0dan 5000e kadar çıkan sayaçlar çıkıyo... Bu benim hoşuma gitti, böyle sağa sola giden tanklar yapayım dedim, birbirlerini hissetsinler, çarpışınca geri dönsünler falan... Öncelikle bu tankları nesne olarak tanıtayım dedim, Timage sınıfını da ata sınıf alayım dedim... Şöyle bi kod yazdım (çoğu satır gereksiz gibi, muhtemelen söylediğim şeyler de olmayacak (çarpışmalar, hareketler vs.) ama benim takıldığım bu yazdığım sınıftan bi eleman türettiğim zaman niye ekranda çıkmıyo, niye üretemiyorum)... kod şöyle:

Kod: Tümünü seç

unit UTank;

interface

Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,extctrls;

Type
  TTankinYonu=(tyKuzey,tyGuney,tyDogu,tyBati);

///////////////////////////////////////////
Type TTank=class(TImage)
private
  FTankinXKonumu:integer;
  FTankinYKonumu:integer;
  FTankinYonu:TTankinYonu;
  FTankinHizi:integer;
  FTankinBenzini:integer;
  FTankinHasari:integer;
  FTankinAtesGucu:integer;
  FTankinAtesHizi:integer;
  FTankinEziciGucu:integer;
  FTankinAtmisOlduguAtesSayisi:integer;
  FTankinAtabilecegiAtesSayisi:integer;
  FKuzeyResimAdresi1:string;
  FGuneyResimAdresi1:string;
  FDoguResimAdresi1:string;
  FBatiResimAdresi1:string;
  FKuzeyResimAdresi2:string;
  FGuneyResimAdresi2:string;
  FDoguResimAdresi2:string;
  FBatiResimAdresi2:string;
  FTankinGenisligi:integer;
  FTankinYuksekligi:integer;
    procedure WTankinXKonumu(const Value: integer);
    procedure WTankinYKonumu(const Value: integer);
    procedure WTankinYonu(const Value: TTankinYonu);
    procedure Wtankinhizi(const Value: integer);
    procedure YoneGoreResimTayinEt;
//protected
  
public
  constructor
   create(AOwner:TComponent;x,y:integer;ATankinYonu:TTankinYonu;ATankinHizi:integer);
  property TankinXKonumu:integer
    read FTankinXKonumu write WTankinXKonumu;
  Property TankinYKonumu:integer
    read FTankinYKonumu write WTankinYKonumu;
  Property TankinYonu:TTankinYonu
    read FTankinYonu write WTankinYonu;
  Property TankinHizi:integer
    read FTankinHizi write Wtankinhizi;
end;
////////////////////////////////////////////
implementation

{ TTank }

constructor TTank.create(AOwner:TComponent;x, y: integer;ATankinYonu:TTankinYonu;ATankinHizi:integer);
begin
  inherited create(AOwner);
  FGuneyResimAdresi1:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank1.bmp';
  FGuneyResimAdresi2:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank1-2.bmp';
  FBatiResimAdresi1:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank2.bmp';
  FBatiResimAdresi2:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank2-2.bmp';
  FKuzeyResimAdresi1:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank3.bmp';
  FKuzeyResimAdresi2:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank3-2.bmp';
  FDoguResimAdresi1:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank4.bmp';
  FDoguResimAdresi2:='C:\Documents and Settings\HK\Desktop\Örneklerim-Çalışmalarım\Thread ile Oraya Buraya Giden Çarpışan Tanklar Yapmaya Çalışıyorum\Tank Resimleri\tank4-2.bmp';
  FTankinXKonumu:=x;
  FTankinYKonumu:=y;
  FTankinYonu:=ATankinYonu;
  FTankinHizi:=ATankinHizi; 
  Left:=FTankinXKonumu;
  Top:=FTankinYKonumu;
  YoneGoreResimTayinEt;
end;



procedure TTank.Wtankinhizi(const Value: integer);
begin
  FTankinHizi := Value;
end;

procedure TTank.WTankinXKonumu(const Value: integer);
begin
  FTankinXKonumu := Value;
end;

procedure TTank.WTankinYKonumu(const Value: integer);
begin
  FTankinYKonumu := Value;
end;

procedure TTank.WTankinYonu(const Value: TTankinYonu);
begin
  FTankinYonu := Value;
end;

procedure TTank.YoneGoreResimTayinEt;
begin
  if FTankinYonu=tyKuzey then
    picture.LoadFromFile(FKuzeyResimAdresi1)
  else
    if FTankinYonu=tyGuney then
      picture.LoadFromFile(FGuneyResimAdresi1)
    else
      if FTankinYonu=tyDogu then
        picture.LoadFromFile(FDoguResimAdresi1)
      else
        if Ftankinyonu=tyBati then
          picture.LoadFromFile(FBatiResimAdresi1);
  Refresh;
end;

end.


Kod: Tümünü seç

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  Tank:TTank;
begin
  Tank:=TTank.create(form1,50,50,tyDogu,10);
end;

end.

Arkadaşlar... Farkettiğiniz üzere fazla bişey yapmadım, ama en azından formumda bi tank resmi çıkması gerekmiyo mu (örneğe göre 50,50 koordinatlarında, doğuya doğru bakan bi tank)... Cevaplarınız için şimdiden teşekkür ediyorum... Kendinize iyi bakın, kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

Kodlarına hiç bakmadım, ama anlaşılan bir oyun için Sprite vb. şeyleri yapmak istiyorsun.

Bunun için TIMAGE'den miras almana gerek yok. image'yi içerden oluşturabilirsin. Neyse esas söylemek istediğim

http://www.yks.ne.jp/~hori/DelphiX-e.html
adresinden DelphiX adlı directx bileşenini yükle ve bununla yapılmış oyunları indir. açık kodları da mevcut. Göreceksin ki oyun yapmak ne kolaymış.

Saygılar..
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

yok, yok, hayır... Oyun yapmak gibi bir amacım yok (yani yapmak istiyorum tabi ama şu anki amacım o değil). Ben sadece niye 'timage' sınıfını ata sınıf alan 'TTank' sınıfından nesne oluşturamadığımı (ya da oluşturduğum nesneyi göremediğimi) anlayamıyorum... Create fonksiyonunda bir hata mı yaptım acaba? Creatinin sonuna 'override' koyarak ata sınıftakini yıkmışlar, ben de böyle bişey mi yapmalıydım? Şu anki amacım oyun yapmak değil... Yine de cevap için teşekkür ederim... Kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Mesaj gönderen ulu coder »

Tank.Parent:=Form1; yazmayı deneyin.

Kod: Tümünü seç

Tank:=TTank.create(form1,50,50,tyDogu,10); 
(Farkındayım burda form1 yazıyor. sadece tahmin)
EDİT:Tahmin tutmuş :eyo:
En son ulu coder tarafından 19 May 2006 05:13 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

@ulu coder... Teşekkür ederim... Söylediğin şey problemi çözdü... Kendi kendime kızıyorum şimdi, ben niye akıl edemedim diye :) Teşekkürler...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

O zaman

Kod: Tümünü seç

create(AOwner:TComponent;x,y:integer;ATankinYonu:TTankinYonu;ATankinHizi:integer); override;
demelisin. ve create fonksiyonunda ise

Kod: Tümünü seç

create(AOwner:TComponent;x,y:integer;ATankinYonu:TTankinYonu;ATankinHizi:integer); 
begin
   inherited Create(AOwner);
   Parent := AOwner;
   .
   .
end;
demen işi otomatiğe alacaktır. Yani her zaman nesne form1 üstüne olmayabilir. belki onu bir panel içine koymuş olabilrsin..

Saygılar..
Kullanıcı avatarı
huseyinkucuk
Üye
Mesajlar: 142
Kayıt: 29 Nis 2005 10:03
Konum: İstanbul
İletişim:

Mesaj gönderen huseyinkucuk »

murat abi, aynen dediğin gibi yapmıştım, bi tek AOwner'i tcomponent değil de twincontrol yaptım, çünkü parent tcomponenti kabul etmedi niyese, heralde twincontrol sınıfından oluyo bu değişken, öyle sanıyorum... bi de create(bişeyler, bişeyler, bişeyler); override; yapmamıştım, yani sonuna override koymamıştım.
Sadece Create(bişeyler, bişeyler); Böyle çalıştı program...

şimdi sen söyleyince de koydum overrideyi; ama bu sefer hata verdi; şu hatayı verdi: "declaration of 'create' differs from previous declaration" ...

(Bi de; şimdi constructor'ın altına nesne yaratılırken yapılan şeyler, destructor'ın altına da nesne yokedilirken yapılan şeyler yazılıyormuş ya; ben constructor'ın içine showmessage('nesne yaratılıyor') yazdım, destructor'un içine de showmessage('nesne yokediliyor') yazdım... Nesne yaratılırken "nesne yaratılıyor" yazıyo ama yokedilirken (nesne.free) "nesne yokediliyor" yazmıyor, hiçbişiy yazmıyor yani... Niye olabilir acaba?)
@muratdicle ve @ulu coder, ilgilendiğiniz için teşekkür ederim... Herkese saygılar. Kolay gelsin...
29.04.2005 tarihi itibariyle Delphi öğrenmeye başlayan yeni bir kullanıcı sayılabilirim.
Kullanıcı avatarı
Murat DİCLE
Kıdemli Üye
Mesajlar: 702
Kayıt: 19 Nis 2006 04:12
Konum: İstanbul
İletişim:

Mesaj gönderen Murat DİCLE »

destroy işleminde

inherited'i en alta koyacaksın.. inherited'in üstünde senin free işlemlerini yapacaksın..

Kod: Tümünü seç

destroy. . . . 
begin
   inherited;
   F.Free;
end;
yanlış..

Kod: Tümünü seç

destroy. . . . 
begin
   showmessage('destroy oluyom iyi mi?');
   F.Free;
   inherited;
end;
doğru


kolay gelsin..
Cevapla