AGB  ·  Datenschutz  ·  Impressum  







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

abstract error in componente

Ein Thema von EWeiss · begonnen am 19. Sep 2008 · letzter Beitrag vom 19. Sep 2008
 
Benutzerbild von littleDave
littleDave

Registriert seit: 27. Apr 2006
Ort: München
556 Beiträge
 
Delphi 7 Professional
 
#4

Re: abstract error in componente

  Alt 19. Sep 2008, 11:55
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.
Diese Aussage stimmt zwar schon - jedoch nicht in diesem Fall: er benutzt TPngImage zur Laufzeit, somit wird kein DesignTime-Package benötigt. Ich glaube eher, dass es für den JvInspector keinen Editor für das TPngObject gibt. Somit musst du dem JvInspector erstmal einen Editor für TPngObjects bastelt. Wie genau das funktioniert, kannst du im Source vom JvInspector nachschauen - anhand der bereits eingebundenen Objekte.

So würde es jedenfalls ungefähr ausschauen:
Delphi-Quellcode:
type
  TJvInspectorPngImage = class(TJvInspectorStringItem)
  protected
    procedure Edit; override;
    function GetDisplayValue: string; override;
    procedure SetFlags(const Value: TInspectorItemFlags); override;
  end;

procedure TJvInspectorPngImage.Edit;
begin
  // Hier musst du eine Handling-Routine für ein TPngObject einbauen
end;

procedure TJvInspectorPngImage.SetFlags(const Value: TInspectorItemFlags);
var
  NewValue: TInspectorItemFlags;
begin
  // Dieser Editortyp hat einen Editor-Button (...) und der Text ist ReadOnly
  NewValue := Value + [iifEditButton, iifEditFixed];
  inherited SetFlags(NewValue);
end;

function TJvInspectorPngImage.GetDisplayValue: string;
begin
  if TPngImage(Pointer(Data.AsOrdinal)).Empty then
     result := '(leer)'
  else
     result := 'TPngImage';
end;

initialization
  TJvCustomInspectorData.ItemRegister.Add(
      TJvInspectorTypeInfoRegItem.Create(TJvInspectorPngImage, TypeInfo(TPngObject))
  );
Ich weiß jetzt nicht, ob das so alles funktioniert, ist jetzt einfach so aus dem Kopf heraus geschrieben. Ist ja nur zur verdeutlichung
Jabber: littleDave@jabber.org
in case of 1 is 0 do external raise while in public class of object array else repeat until 1 is 0
  Mit Zitat antworten Zitat
 


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 05:05 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