AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TImage.Picture Referenz (!) auf TPicture?
Thema durchsuchen
Ansicht
Themen-Optionen

TImage.Picture Referenz (!) auf TPicture?

Ein Thema von Corelgott · begonnen am 25. Apr 2006 · letzter Beitrag vom 25. Apr 2006
Antwort Antwort
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#1

TImage.Picture Referenz (!) auf TPicture?

  Alt 25. Apr 2006, 12:17
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
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#2

Re: TImage.Picture Referenz (!) auf TPicture?

  Alt 25. Apr 2006, 12:23
Hallo,

schaue mal in der Online-Hilfe unter Delphi-Referenz durchsuchenTPicture.Graphic.Empty nach.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: TImage.Picture Referenz (!) auf TPicture?

  Alt 25. Apr 2006, 12:26
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).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Corelgott
Corelgott

Registriert seit: 11. Apr 2003
Ort: Lübeck
213 Beiträge
 
Delphi 2006 Enterprise
 
#4

Re: TImage.Picture Referenz (!) auf TPicture?

  Alt 25. Apr 2006, 13:00
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
wer Rächtschraibfehler findet daaf sie behalten...
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TImage.Picture Referenz (!) auf TPicture?

  Alt 25. Apr 2006, 13:28
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

FPicture.Graphic.Assign (pic); durchführen. Am besten schaust du mal im Quelltext zu TImage (Unit ExtCtrls) nach, wie die Borländer das gemacht haben.

Gruß Hawkeye
  Mit Zitat antworten Zitat
static_cast

Registriert seit: 19. Okt 2003
Ort: Peine
300 Beiträge
 
#6

Re: TImage.Picture Referenz (!) auf TPicture?

  Alt 25. Apr 2006, 13:58
Hallo,

eine prüfung mit Picture.Graphic.Empty 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.

z.B. würde das hier nicht funktionieren:

Delphi-Quellcode:
var
  Pic:TPicture;
begin
  Pic:=TPicture.Create;
  if Pic.Graphic.Empty then Pic.Graphic.LoadFromFile('default.bmp');
  Pic.Free;
end;
aber so:

Delphi-Quellcode:
var
  Pic:TPicture;
begin
  Pic:=TPicture.Create;
  Pic.Graphic:=TBitmap.Create;
  if Pic.Graphic.Empty then Pic.Graphic.LoadFromFile('default.bmp');
  Pic.Free;
end;
das eigentlich laden der Bilder sollte auch eigentlich von TPicture übernommen werden mit LoadFromFile denn es übernimmt die verwaltung von Graphic.

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.
Daniel M.
"The WM_NULL message performs no operation. An application sends the WM_NULL message if it wants to post a message that the recipient window will ignore."
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#7

Re: TImage.Picture Referenz (!) auf TPicture?

  Alt 25. Apr 2006, 14:12
Zitat von static_cast:
eine prüfung mit Picture.Graphic.Empty ist nicht sinvoll, denn Graphic ist unter umständen nil wenn nicht schon was drin gesteckt hat.
[..]
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...
Ok, das mit dem möglichen Zugriff auf NIL hatte ich übersehen.

Der zweite Teil war mir so gar nicht bewußt! Danke für die Klarstellung, wieder etwas gelernt.

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz