Merhaba.
- Şahsen bir TImage içinde resim bulundurursam TAG vs. bir yerlere not eder normalde bilirim.
- Direkt cevap yazmak yerine
sizin için eğitici olsun diye ( bu tip sorunsala nasıl cevap aranır ) şeklinde şöyle bir yöntem sunacağım.
- TImage ( FMX için ) tanımlı olduğu kaynak Unit'e bakarak ve buradan yürüyerek nil olup olmadığına cevap arayacağız. Nasıl mı ?
// "c:\Program Files (x86)\Embarcadero\Studio\20.0\source\fmx\FMX.Objects.pas" dosyasıdır.
TImage = class(TControl, IBitmapObject, IMultiResBitmapObject)
tanımının içinde Bitmap property'si bakıldığında diyor ki...
public
constructor Create(AOwner: TComponent); override;
... ... ...
property Bitmap: TBitmap read GetBitmap write SetBitmap;
Biliyoruz ki siz Bitmap'a bir TBitmap eşitlediğinizde write kısmı yani "SetBitmap" çalışır, tersi TImage.Bitmap'i bir TBitmap'e eşitler gibi içeriğini sorarsanız "GetBitmap" çalışır.
Şimdi sizin ilgilendiren kısım GetBitmap olduğuna göre aynı UNIT içindeki bu function'u beraber inceleyelim.
function TImage.GetBitmap: TBitmap;
var
Item: TCustomBitmapItem;
begin
Result := nil;
// Return the most appropriate non-empty picture
Item := ItemForCurrentScale(False);
if Item <> nil then
Result := Item.Bitmap;
if Result = nil then
begin
// If there isn't non-empty pictures, then return an empty picture for the screen scale (exact match)
Item := FMultiResBitmap.ItemByScale(FScreenScale, True, True);
if Item <> nil then
Result := Item.Bitmap;
end;
if Result = nil then
begin
// If there isn't item at the given scale, then create a new item with specified screen scale
Item := FMultiResBitmap.Add;
Item.Scale := FScreenScale;
Result := Item.Bitmap;
end;
end;
Anlaşılıyor ki özetle ITEM varsa uygun SCALE içim uygun resmi koyar,
eğer yoksa sonuna kadar result "nil" dönmesine karşılık nihayetinde "nil" kalmasın diye nesnenizin boyutlarında
yeni boş bir tane otomatik oluşturuluyor.
Diyebiliriz ki eğer nil'e eşitse VCL tarafında
if Assigned( Image1 ) then dercesine bir sorgu maalesef yok. FMX tarafında
if Image1.Bitmap = nil then derseniz de benzeri şekilde içindeki Bitmap'i sorgulayan başka bir şey de olmayacak size ilk satırda ifade ettiğim şekilde atama zamanı bir yere not edip bunun takibi düşecek.