Einzelnen Beitrag anzeigen

EWeiss
(Gast)

n/a Beiträge
 
#3

Re: abstract error in componente

  Alt 19. Sep 2008, 10:33
Zitat von sx2008:
Dein Fehler ist schon mal, dass du eine ganz konkrete Klasse TPngObject verwendest.
Richtig wäre, die Klasse TPicture zu verwenden:
property UpPicture: TPicture read FUpPic write SetUpPic; Durch die Verwendung von TPicture kann man beliebige Bilder BMP, GIF, JPEG, PNG,... laden.
Vorraussetzung zum Laden von PNG-Bildern ist aber, dass die Unit pngimage eingebunden ist.
Diese Unit wird aber auch schon zur Entwicklungszeit benötigt!!!
Daher musst du dir ein Designtime-Package erstellen, die Unit pgnimage hinzufügen und in der IDE installieren.
Dazu muss man wissen, dass Delphi ein Plugin-System für Grafiken hat.
Nur wenn die Unit pngimage dieses Plugin-System richtig verwendet, kann die ganze Sache funktionieren.
Neue Grafiktypen müssen über TPicture.RegisterFileFormat in der VCL registriert werden.
Wenn also RegisterFileFormat im Abschnitt Initialization der Unit pngimage nicht aufgerufen wird, dann läuft etwas falsch.
Werde das mal testen irgend so etwas habe ich mir schon gedacht.

Delphi-Quellcode:
initialization
  {Initialize}
  ChunkClasses := nil;
  {crc table has not being computed yet}
  crc_table_computed := FALSE;
  {Register the necessary chunks for png}
  RegisterCommonChunks;
  {Registers TPNGObject to use with TPicture}
  {$IFDEF UseDelphi}{$IFDEF RegisterGraphic}
    TPicture.RegisterFileFormat('PNG', 'Portable Network Graphics', TPNGObject);
  {$ENDIF}{$ENDIF}
finalization
  {$IFDEF UseDelphi}{$IFDEF RegisterGraphic}
    TPicture.UnregisterGraphicClass(TPNGObject);
  {$ENDIF}{$ENDIF}
  {Free chunk classes}
  FreeChunkClassList;
Wird in PngImage aufgerufen und die Componente ist im system registriert

Delphi-Quellcode:
interface

uses
  Windows,Classes, Graphics, Controls, ExtCtrls, Messages, pngimage;

type
  TcAVeButton = class(TCustomControl)
  private
    FUpPic : TPicture;
    FDownPic : TPicture;
    FOverPic : TPicture;
    FBoolTruePic : TPicture;
    FBoolFalsePic: TPicture;
    FShowBoolPic : Boolean;
    FFixMode : Boolean;
    FTouchMode : Boolean;
    FButtonDown : Boolean;
    FBoolPicXPos : Integer;
    FBoolPicYPos : Integer;
    FLabelXPos : Integer;
    FLabelYPos : Integer;
    FAppIndex : Integer;
    FEntered : Boolean;
    FShowButton : Boolean;
    FFunktion : String;
    FAktion : String;
    FTimer: TTimer;
Das ändern verursacht aber eine menge neue Fehler
[Pascal Error] cAVeButton.pas(148): E2010 Incompatible types: 'TGraphic' and 'TPicture'

usw..

Gruss Emil
  Mit Zitat antworten Zitat