![]() |
TImage.Picture Referenz (!) auf TPicture?
Hi @ all,
ich bin gerade mal wieder zu doof und komm nicht drauf. Wie verlgeiche ich, ob ein TPicture-Object Leer ist? image1.picture = nil... ist NIE true assigned(image1.picture) ist IMMER true pointer(image1.picture) = nil ist auch NIE true Laut hilfe ist ein Picture (von TImage) ist eine "Referenz" (Dachte das gibt es gar ned soo richtig in delphi... Entweder Pointer oder Obj?!) auf ein TPicture-Objekt. Hmm eine Referenz... Wie prüft man Referenzen in delphi ordenlich? Irgendwie ist das für mich so eine art grauzone zwischen Pointer und Objekt. Eigentlich ist doch eine Referenz eine "Variable" der ein "speicherbereich" zugewiesen wird, in der ein Gültiges Obj liegt. (Was von irgend wem anderes mal mit Create instatziert wurde) Also wenn man das mal vereinfacht ausfrückt eine art von delphi automatisch gehandlter Pointer? Ich bin mal vollends verwirrt... Kann mir das nochmal wer in einfachen worten, delphi spezifisch erklären? Vielen Dank im Voraus! cya Corelgott |
Re: TImage.Picture Referenz (!) auf TPicture?
|
Re: TImage.Picture Referenz (!) auf TPicture?
hallo,
SizeOf(TObject) = SizeOf(Pointer) => Object = Pointer => Object Referenz = Pointer auf Instanzedaten eines Objectes. Eine Objectinstanz zeigt also auf den Speicherbereich wo die Daten für das Object liegen (genau wie bei pointern). |
Re: TImage.Picture Referenz (!) auf TPicture?
hmm ok...
also auf picture.graphics(.empty) zu prüfen ist schon mal sehe hilfreich...! Thx Aber wie nutzt man nun das wissen in einer eignen Komponente? Wenn ich bei meiner Kompo ne eingenschaft picture:TPicture habe? ich muss also zwingen eine Instanz des TPicture dafür erzeugen... Aber wie muss der setter dafür aussehen? Wein einfach nur
Delphi-Quellcode:
procedure setPic(var pic : TPicture);
begin self.fPicture := pic; end; macht es nicht so wie ich mir das vorstelle... self.fPicture.assigne(pic); ??? oder muss ich es per rect und per hand "kopieren"? thx Corelgott |
Re: TImage.Picture Referenz (!) auf TPicture?
Was spricht gegen TPicture? Es unterstützt als TGraphic-Countainer mehrere Grafiktypen (bmp, jpg,...) und dürfte omit das Mittel der Wahl sein.
Die Zuweisung solltest du über
Delphi-Quellcode:
durchführen. Am besten schaust du mal im Quelltext zu TImage (Unit ExtCtrls) nach, wie die Borländer das gemacht haben. :wink:
FPicture.Graphic.Assign (pic);
Gruß Hawkeye |
Re: TImage.Picture Referenz (!) auf TPicture?
Hallo,
eine prüfung mit
Delphi-Quellcode:
ist nicht sinvoll, denn Graphic ist unter umständen nil wenn nicht schon was drin gesteckt hat. TGraphic auch ist nur eine abstakte klasse für "die eigentlich Bilder", welche ja TBitmap, TJPEGImage, TPNGObject etc. sind.
Picture.Graphic.Empty
z.B. würde das hier nicht funktionieren:
Delphi-Quellcode:
aber so:
var
Pic:TPicture; begin Pic:=TPicture.Create; if Pic.Graphic.Empty then Pic.Graphic.LoadFromFile('default.bmp'); Pic.Free; end;
Delphi-Quellcode:
das eigentlich laden der Bilder sollte auch eigentlich von TPicture übernommen werden mit LoadFromFile denn es übernimmt die verwaltung von Graphic.
var
Pic:TPicture; begin Pic:=TPicture.Create; Pic.Graphic:=TBitmap.Create; if Pic.Graphic.Empty then Pic.Graphic.LoadFromFile('default.bmp'); Pic.Free; end; Und Graphic.Assign ist auch nicht sinvoll wenn du mehrere Typen von Bildern verwendest, z.B. würde ein Assign in die hose gehen wenn dein Graphic von typ TBitmap ist und du aber nun ein TPNGObject hast... Picture.Assign(AnderesPicture) wäre das richtige. |
Re: TImage.Picture Referenz (!) auf TPicture?
Zitat:
Der zweite Teil war mir so gar nicht bewußt! Danke für die Klarstellung, wieder etwas gelernt. :) Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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