AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

eigene Klasse; Constructor inkl. TImage

Ein Thema von Deinhaus · begonnen am 22. Jun 2010 · letzter Beitrag vom 23. Jun 2010
Antwort Antwort
Deinhaus

Registriert seit: 31. Jan 2008
12 Beiträge
 
#1

eigene Klasse; Constructor inkl. TImage

  Alt 22. Jun 2010, 21:56
Hallo,

ich habe eine Klasse, die ich jetzt weiterentwickeln will, damit ich in den Prozeduren oder Funktionen das TImage nicht immer gesondert "createn" muss.
Allerdings bekomme ich immer eine Fehlermeldung und mir fällt nix mehr ein.

z.B. bei Create(self): [DCC Fehler] enemy.pas(25): E2010 Inkompatible Typen: 'TComponent' und 'TEnemy'
z.B. bei Create(TEnemy): [DCC Fehler] enemy.pas(25): E2010 Inkompatible Typen: 'TComponent' und 'Class reference'

Die Klasse:
Delphi-Quellcode:
unit enemy;

interface

uses ExtCtrls;

 Type TEnemy = class
      private

      public
        name : string;
        path : string;
        size : integer;
        priority : double;
        image : TImage;
        constructor Create;
    end;

    TEnemyArray = array of TEnemy;

implementation

Constructor TEnemy.Create;
begin
   image := image.Create(????);
end;

end.
Da wo die Fragezeichen stehen habe ich schon alles mögliche ausprobiert (self) (TImage) (TEnemy) (TCompontent(TImage))

Kann mir vielleicht jemand nen Tipp geben, mit dem ich weiter basteln und testen kann?

Gruß
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.223 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: eigene Klasse; Constructor inkl. TImage

  Alt 22. Jun 2010, 22:03
Du musst für TEnemy die passende Basisklasse verwenden:

 Type TEnemy = class(TComponent) Und realisiere image : TImage als read-only-property um klar zu machen das dieses nicht von aussen gesetzt werden kann.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Deinhaus

Registriert seit: 31. Jan 2008
12 Beiträge
 
#3

AW: eigene Klasse; Constructor inkl. TImage

  Alt 22. Jun 2010, 22:50
Hm.. hab das Gefühl, dass ich nen Schritt weiter bin, aber so ganz rund läuft das noch nicht.

Hier nochmal die Klasse:
Delphi-Quellcode:
unit enemy;

interface

uses ExtCtrls,Classes;

 Type TEnemy = class(TComponent)
      private

      public
        enemyimage : TImage;
        enemyname : string;
        enemypath : string;
        enemysize : integer;
        enemypriority : double;

        constructor Create();
    end;

    TEnemyArray = array of TEnemy;

implementation

Constructor TEnemy.Create;
begin
   enemyimage := enemyimage.Create(self);
   //enemyimage.Left := 400;
   //enemyimage.Top := 400;
   //enemyimage.AutoSize := true;
end;
und die Prozedur:
Delphi-Quellcode:

procedure tfrm_main.init_enemyarray();
VAR I : integer ;
begin
  SetLength(EnemyArray,FileListBox1.Count+1);
  try

    for I := 0 to FileListBox1.Count-1 do
    begin
      EnemyArray[I] := TEnemy.Create;
      // So lief es ohne CONSTURCTOR
      //EnemyArray[I].enemyimage := TImage.Create(self);
      EnemyArray[I].enemyname := FileListBox1.Items.Strings[I];
      EnemyArray[I].enemyimage.Picture.Icon.Handle := GetShellIcon(FileListBox1.Directory+'\'+FileListBox1.Items.Strings[I], True, False);
    end;
  except
  on E : Exception do
    begin
      WriteLog(E.Message + ' : ' + IntToStr(I));
      ShowMessage(E.Message + ' : ' + IntToStr(I));
    end;
  end;
end;
Zu dem nicht funktionieren CONSTRUCTOR kommt auch noch, die Frage, ob ich EnemyArray[I].enemyimage.Picture.Icon.Handle auch beim Create zuweisen kann ? Also quasi das Handle bei Instanziierung übergeben.

READ-ONLY für das Image und auslesen per GET kommt später

Hier noch die Fehlermeldung vom EXCEPT:
"Zugriffsverletzung bei Adresse 004BE9EB in Modul 'ADMINV.exe'. Lesen von Adresse 00000000"

Ich vermute jetzt mal, dass das Objekt nicht instanziiert ist und nicht gefunden wird.

Vielen Dank schon mal für die Unterstützung

Gruß
Daniel

Geändert von Deinhaus (22. Jun 2010 um 23:04 Uhr) Grund: add -> Fehlermeldung
  Mit Zitat antworten Zitat
Deinhaus

Registriert seit: 31. Jan 2008
12 Beiträge
 
#4

AW: eigene Klasse; Constructor inkl. TImage

  Alt 22. Jun 2010, 23:42
Habs gelöst !!

Klasse:
Delphi-Quellcode:
unit enemy;

interface

uses ExtCtrls,Classes,Forms,Windows;

 Type TEnemy = class(TComponent)
      private
        enemyimage : TImage;
        enemyname : string;
      public
        enemypath : string;
        enemysize : integer;
        enemypriority : double;
        constructor Create(AParent: TForm; EName: string; IHandle : HICON);
    end;

    TEnemyArray = array of TEnemy;

implementation

Constructor TEnemy.Create(AParent: TForm; EName: string; IHandle : HICON);
begin
   enemyimage := TImage.Create(AParent);
   with enemyimage do
   begin
    Parent := AParent;
    Left := 400;
    Top := 400;
    AutoSize := true;
    Picture.Icon.Handle := IHANDLE;
    enemyname := EName;
   end;
end;

end.
Procedure:
Delphi-Quellcode:
procedure tfrm_main.init_enemyarray();
VAR I : integer ;
begin
  SetLength(EnemyArray,FileListBox1.Count+1);
  try

    for I := 0 to FileListBox1.Count-1 do
    begin
      EnemyArray[I] := TEnemy.Create(frm_main,FileListBox1.Items.Strings[I],GetShellIcon(FileListBox1.Directory+'\'+FileListBox1.Items.Strings[I], True, False));
    end;
  except
  on E : Exception do
    begin
      WriteLog(E.Message + ' : ' + IntToStr(I));
      ShowMessage(E.Message + ' : ' + IntToStr(I));
    end;
  end;
end;
Gruß
Daniel
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.660 Beiträge
 
Delphi 12 Athens
 
#5

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 08:58
Damit verbirgst Du aber den Konstruktor von TComponent, das sollte auch eine entsprechende Warnung geben. Und soll das Image von außen komplett unsichtbar sein? Ansonsten würde ich eine ReadOnly-Property einführen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.879 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 09:02
Also am Anfang des Konstruktor einfach den der Superklasse aufrufen

inherited Create( AParent);
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


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 01:50 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