![]() |
TBitmap property in eigener Komponente erzeugt bei Ausführung Fehlermeldung
Guten Morgen,
Nach einigen Stunden bin ich etwas frustriert: Ich habe eine von TCustomButton abgeleitete Komponente mit einer published property Icon: TBitmap. Das Laden einer Bitmap in dieses property funktioniert mit dem Delphi-Dialog, wie er beim property Glyph in TBitBtn verwendet wird, einwandfrei. Auch das Kompilieren erfolgt fehlerfrei. Beim Programmaufruf (aus der IDE, sowie Direktaufruf der Exe) tritt eine Exception auf: "Exception EReadError in Modul ... bei ... Fehler beim Lesen von UserButton1.Icon.Data: Ungültiger Pfad für Eigenschaft." Um eventuellen Hinweisen zuvorzukommen: Ich kenne TBitBtn, ich habe auch die Source diesbezüglich angeschaut; das ist so nicht verwendbar, die Borländer haben eine private (lokale) Klasse verwendet. Es muss doch möglich sein, eine TBitmap in einer eigenen Komponente zur Entwurfszeit mit einem Bild zu versehen! Vielleicht hat sich schon jemand damit herumgeärgert. Für Hinweise wäre ich sehr dankbar. Ich verwende Windows 7 32bit, Delphi XE2. Komponente:
Delphi-Quellcode:
Registrierung:
unit UserButtonEx;
interface uses System.SysUtils, System.Classes, Vcl.Controls, Vcl.StdCtrls, Vcl.Graphics; type TUserButton = class(TCustomButton) private FIcon: TBitmap; procedure SetIcon(const Value: TBitmap); protected public constructor Create(Owner: TComponent); destructor Destroy; override; published property Icon: TBitmap read FIcon write SetIcon; end{TUserButton}; implementation { TUserButton } constructor TUserButton.Create(Owner: TComponent); begin inherited Create(Owner); FIcon := TBitmap.Create; end{TUserButton.Create}; destructor TUserButton.Destroy; begin FIcon.Free; inherited; end{TUserButton.Destroy}; procedure TUserButton.SetIcon(const Value: TBitmap); begin FreeAndNIL(FIcon); FIcon := TBitmap.Create; if Assigned(Value) then FIcon.Assign(Value); Invalidate; end{TUserButton.SetIcon};
Delphi-Quellcode:
unit Register_User_Components;
interface uses System.Classes, UserButtonEx; procedure Register; implementation procedure Register; begin RegisterComponents('Eigenentwicklung', [TUserButton]); end{Register}; |
AW: TBitmap property in eigener Komponente erzeugt bei Ausführung Fehlermeldung
Versuchs einfach mal mit sowas:
Code:
procedure TUserButton.SetIcon(const Value: TBitmap);
begin FIcon.Assign(Value); Invalidate; end{TUserButton.SetIcon}; |
AW: TBitmap property in eigener Komponente erzeugt bei Ausführung Fehlermeldung
Das Problem ist gelöst!
Es fehlt im Konstruktor der Komponente TUserButton das override! Der Vorschlag zu SetIcon von Whookie behebt zwar nicht das Problem, ist aber eleganter als meins. Danke. MfG Hirschmüller |
AW: TBitmap property in eigener Komponente erzeugt bei Ausführung Fehlermeldung
Zitat:
Aus diesem Grund finde ich es auch irgndwie krank, daß man einen Setter machen muß, wenn man will, daß sowas in der DFM gespeichert wird, obwohl die VCL den garnicht verwendet. :freak: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:46 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