Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Kann meine Komponente nicht installieren!! (https://www.delphipraxis.net/33027-kann-meine-komponente-nicht-installieren.html)

F.W. 31. Okt 2004 18:02


Kann meine Komponente nicht installieren!!
 
Ich versuche meine Komponente (TBitmapStream) zu installieren, aber er meckert immer:

"[Fehler] ImageStream.pas(36): Inkompatible Typen: 'TComponentClass' und 'Class reference'"

Delphi-Quellcode:
type
  TBitmapStream = class(TMemoryStream)
  private
    { Private-Deklarationen }
  protected
    { Protected-Deklarationen }
  public
    function Count: Integer;
    function AddBMP(BMP: TBitmap): Integer;
    procedure LoadFromImageList(const IL: TImageList);
    procedure SaveToImageList(var IL: TImageList);
    procedure GetBMP(const Index: integer; var BMP: TBitmap);
    procedure Delete(const Index: Integer);
    procedure InsertBMP(BMP: TBitmap; const Index: Integer);
    procedure SaveToFile(const AFileName: TFileName);
    procedure LoadFromFile(const AFileName: TFileName);
    procedure Clear;
    { Public-Deklarationen }
  published
    { Published-Deklarationen }
  end;

procedure Register;

implementation

procedure Register;
begin
 RegisterComponents('Beispiele', [TBitmapStream]);
end;
Was kann ich machen?

Dani 31. Okt 2004 18:25

Re: Kann meine Komponente nicht installieren!!
 
Hi, TMemoryStream ist kein Nachfahre von TComponent, deshalb klappt die Registrierung nicht.

Lösung: TBitmapStream von TComponent ableiten und ein Feld vom Typ TMemoryStream hinzufügen.

Delphi-Quellcode:
type
  TBitmapStream = class(TComponent)
  private
    FStream: TMemoryStream;
  protected
    { Protected-Deklarationen }
  public
    function Count: Integer;
    function AddBMP(BMP: TBitmap): Integer;
    procedure LoadFromImageList(const IL: TImageList);
    procedure SaveToImageList(var IL: TImageList);
    procedure GetBMP(const Index: integer; var BMP: TBitmap);
    procedure Delete(const Index: Integer);
    procedure InsertBMP(BMP: TBitmap; const Index: Integer);
    procedure SaveToFile(const AFileName: TFileName);
    procedure LoadFromFile(const AFileName: TFileName);
    procedure Clear;
    { Public-Deklarationen }
  published

  end;
Dann nur noch Contructor und Destructor hinzufügen, wo FStream erzeugt bzw. zerstört wird.
PS: Das "var" ist bei Parametern, die Objekte sind, zwar nicht nötig, aber es schadet eigentlich auch nicht. (imho)

Dax 31. Okt 2004 18:29

Re: Kann meine Komponente nicht installieren!!
 
Dass du den Fehler nicht siehst.. :roll:

Delphi-Referenz durchsuchenRegisterComponents registriert Komponenten, die (logischerweise) von Delphi-Referenz durchsuchenTComponent abgeleitet sind. TMemoryStream ist aber TCostumMemoryStream <- TStream abgeleitet. Du könntest höchsten RegisterClass benutzen..

F.W. 1. Nov 2004 14:42

Re: Kann meine Komponente nicht installieren!!
 
Hmmm, stimmt!

Zitat:

Dass du den Fehler nicht siehst..
>>Sorry! Hab bisher noch nie von TStream oder so abgeleitet, immer nur von Sachen die schon in der Componentenpalette stehen!

Danke!


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