![]() |
TBitmap Property in eigener Komponente
Hallo Leute,
ich wollte nur mal schnell fragen, ob es möglich ist eine Bitmap als Property zu erklären, sodass man später über den Objektinspektor eine Bitmap wählen kann. (Mit dem typischen Bild-Wählen-Dialog etc.) Aus irgendwelchen Gründen erhalte ich jedes Mal eine Fülle an Fehlermeldungen. Gibt bestimmt schon zig Threads, die dieses Thema mal hatten, habe jedoch leider keinen gefunden. Danke im Voraus! |
Re: TBitmap Property in eigener Komponente
Was machst du denn genau?
Und was bekommst du für Fehlermeldung? Gruß Teekeks |
Re: TBitmap Property in eigener Komponente
Unter Private hab ich:
Delphi-Quellcode:
und dann unter Published das hier:
FGlyph : TBitMap;
Delphi-Quellcode:
Wie bei allen anderen Eigenschaften auch (was wahrscheinlich der Fehler ist)...
property Glyph : TBitMap read FGlyph write FGlyph;
Dann im OnCreate ein
Delphi-Quellcode:
und das dazugehörige Free im OnDestroy
FGlyph := TBitMap.Create;
Als Fehlermeldung bekomme ich sowas wie z.B.: "Zugriffsverletzung bei Adresse 00000000. Lesen von Adresse 00000000.", wenn ich eine Bitmap laden möchte... |
Re: TBitmap Property in eigener Komponente
Objekte kann man soweit ich weiß nicht direkt in den OI packen.
Beim Erzeugen im Konstruktor sollte man auf csDesigning in ![]() Was dich aber bestimmt zum Ziel führt ist der ![]() Ein gutes Video dazu ist bestimmt ![]() |
Re: TBitmap Property in eigener Komponente
So kann das nicht gehen. In deinem Create reservierst du Speicher für ein Bitmap (mit TBitmap.Create). Wenn aber ein neues Bitmap gesetzt wird, so wird dein FGlyph einfach nur auf den Speicher des zugewiesenen Bitmaps zeigen und der Speicher den du im Create angefordert hast ist nicht mehr referenziert. Du solltest eine Set-Methode verwenden und das übergebene Bitmap darin auf das andere Assignen.
|
Re: TBitmap Property in eigener Komponente
Zitat:
Fazit: Wenn das Objekt in der Klasse erstellt wird, dann sollte dessen Instanz auch nur innerhalb dieser Elternklasse verändert/verwaltet werden. Und ein direkter Schreibzugriff ala WRITE ist damnach inakzeptabel.
Delphi-Quellcode:
property Glyph : TBitMap read FGlyph write Assign;
procedure Assign(AGlyph : TBitMap); begin FGlyph.Assign(AGlyph); // oder die einzelnen Werte manuell setzen end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 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 by Thomas Breitkreuz