Delphi Can

Orjinalini görmek için tıklayınız: Image nesnesinde resim olup olmadığın kontrolü
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Merhaba

Vcl tarafında
if Assigned(Resim1.Picture.graphic) then
komutuyla image nesnesinin içerisinde resim olup olmadığını kontrol ediyorum.

Android tarafında böyle bir kontrolü nasıl yapabilirim?

İyi Çalışmalar.
(17-03-2019, Saat: 09:05)41linea41 Adlı Kullanıcıdan Alıntı: [ -> ]Merhaba

Vcl tarafında
if Assigned(Resim1.Picture.graphic) then
komutuyla image nesnesinin içerisinde resim olup olmadığını kontrol ediyorum.

Android tarafında böyle bir kontrolü nasıl yapabilirim?

İyi Çalışmalar.

Resim1.Bitmap.Width >0
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.  Idea
Cevaplarınız için teşekkür ederim.

Soruyu sormadan önce dün gece iş de ilerlemek için geçici olarak herimage nesnesinin durumunu bir boolean a atadım ve bu şekilde devam ettim. Demekki doğru yoldaymışım.

Şimdi değişkeni kontrol ederek android den indy ile resim göndermeye çalışıyorum.
Merhaba,
Hazır atanmışı da var: bitmap.isEmpty
@"Fesih ARSLAN" FMX.Graphics unitindeki TBitmap'den yürümüşsünüz güzeldi  Smile

- TBitmap için isEmpty function aşağıdaki gibi

function TBitmap.IsEmpty: Boolean;
begin
 Result := (Width = 0) or (Height = 0);
end;

Ancak Width veya Height  (0) olursa TRUE dönüyor. Denediğinizi değerlendirerek teşekkürler üstadım. Idea

EK : Anlatmak istediğim    Item.Scale := FScreenScale; kısmından kasıt. En az bir kere GetBitmap çalıştıran seçenek hayata geçmezse bu da sorun olmazdı.  Ama Bitmap.IsEmtpy dediğiniz an bu da ( TImage.GetBitmap: TBitmap; ) mecbur çalışacak.


Şimdi üşenmedim denedim...
procedure TForm1.Button1Click(Sender: TObject);
begin
 if Image1.Bitmap.IsEmpty then ShowMessage( 'Empty' ) else ShowMessage( 'Not Empty' );
end;

- Cevap Empty   Rolleyes