|
| Objekt instantieret eller ej Fra : René Jensen |
Dato : 11-01-05 13:43 |
|
Hej,
Jeg har en procedure, der tager en variable-reference til et TBitmap
objekt som parameter. Kan jeg på nogen måde tjekke om det objekt jeg for
med er instantieret med TBitmap.Create-metoden?
Jeg har prøvet nedenstående, men den bliver bare skippet og programmet
crasher:
procedure GetBitmap(var Bitmap : TBitmap);
begin
if not Assigned(Bitmap) then
Bitmap := TBitmap.Create;
// Resterende kode, der manipulere Bitmap
end;
Med venlig hilsen,
René Jensen
| |
Ukendt (11-01-2005)
| Kommentar Fra : Ukendt |
Dato : 11-01-05 14:00 |
|
Jeg mener ikke, man kan være sikker. Et objekt starter sit liv med en
tilfældig værdi. Hvis det derefter har været anvendt (create + free), så
vil det have en anden værdi forskellig fra 0, men det er ikke
instantieret. Kun hvis man kalder freeandnil() eller sætter = nil, kan
man anvende din metode (læs hjælpefilens afsnit om assigned)
Hvis du ønsker at returnere en bitmap, så anvend
function GetBitmap: TBitmap;
Hvis du ønsker at manipulere en eksisterende bitmap, så anvend dit eget
forslag, men lad det være op til den, der kalder proceduren at oprette
objektet.
Du kan selvfølgelig også inkludere noget try-except kode.
hilsen
Uffe
"René Jensen" <not4u2know@privacy.org> wrote in message
news:cs0hho$1su$1@news.net.uni-c.dk...
> Hej,
>
> Jeg har en procedure, der tager en variable-reference til et TBitmap
> objekt som parameter. Kan jeg på nogen måde tjekke om det objekt jeg
for
> med er instantieret med TBitmap.Create-metoden?
> Jeg har prøvet nedenstående, men den bliver bare skippet og programmet
> crasher:
>
> procedure GetBitmap(var Bitmap : TBitmap);
> begin
> if not Assigned(Bitmap) then
> Bitmap := TBitmap.Create;
> // Resterende kode, der manipulere Bitmap
> end;
>
> Med venlig hilsen,
> René Jensen
| |
Ken Madsen (06-04-2005)
| Kommentar Fra : Ken Madsen |
Dato : 06-04-05 08:14 |
|
René Jensen wrote:
> Hej,
>
> Jeg har en procedure, der tager en variable-reference til et TBitmap
> objekt som parameter. Kan jeg på nogen måde tjekke om det objekt jeg for
> med er instantieret med TBitmap.Create-metoden?
> Jeg har prøvet nedenstående, men den bliver bare skippet og programmet
> crasher:
>
> procedure GetBitmap(var Bitmap : TBitmap);
> begin
> if not Assigned(Bitmap) then
> Bitmap := TBitmap.Create;
> // Resterende kode, der manipulere Bitmap
> end;
>
> Med venlig hilsen,
> René Jensen
Hej René,
Hvis objectet har været instantieret før skal du ikke bruge object.free
men freendnil(object)
Ellers vil referencen stadig findes og du vil få en fejl når du prøver
at refere til et object giver en adresse på assigned(object)
Mvh Ken Madsen
| |
|
|