Konuyu Oyla:
  • Derecelendirme: 4.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Image nesnesi saydam kısımlara tıklamama
#1
Question 
Merhaba,
Projedeki Image nesnelerin saydam kısımlarına fare ile tıklanmasını istemiyorum. Altta hangi nesne varsa ona tıklansın.

Örnek olarak aşağıda 3 Image nesnesi var ve bunların dikdörgen olarak kapladığı alanlar görülüyor. En üstte duran nesnenin saydam kısımları diğer bileşenin büyük kısmını kapladığı için alttaki bileşenin görünür yerleri yerine üstteki bileşenin saydam kısımları tıklanıyor.

Bu durumu nasıl çözebilirim?

G3vYky.png
Cevapla
#2
Merhaba.

Bu resmin siyah beyaz veya kırmızı beyaz gibi bir iz - düşümü maske kopyasını ikinci başka bir TImage nesnesine yüklersin. Ancak bu ikinci kopya ekranda görünmesin, Visible False olsun.

Birinci (orjinal) TImage üzerindeki OnMouseMove olayında X,Y koordinatını bu ikinci oluşturduğun anahtar olarak iş görecek TImage üzerinde aynı koordinatta hangi renk iz düşümü yapmışsan o renk varsa mouse ile tıklamaya müsaade edersin, yok koorinat noktası beyaz ise mouse ile tıklamaya müsaade etmezsin.

Bu durumu güncel olarak MouseMove sırasında Mouse Cursor şeklini değiştirerek kullanıcıya gösterebilirsin. Bu metodu ben Türkiye haritası vb. projelerde kullanıyorum ve çok başarılı sonuçlar alıyorum.

Başarılar.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#3
@mrmarman öncelikle ilgine teşekkürler.
Benzer bir yöntemi şöyle denemeyi düşündüm. Sonuçta ben saydam kısımlara tıklanmasını istemiyorum ve tıklandığında altındaki kısma tıklanmasını sağlamak istiyorum. Bileşenin mouse olaylarına tıklanan kısmın saydam olması durumunda bileşenin hittest (sanırım FMX ile gelen bir olay) olayını disable yapmayı planladım. Bir nevi bahsettiğin şekilde. Bunun üzerinde biraz çalışmak gerekiyor. Çünkü hittest disable dendiğinde o bileşen bir nevi devre dışı kalmış oluyor. Görünür kısımlar görünmeye devam ediyor ancak üzerine tıklanırsa alttakine geçiyor.
Bazı bileşenlerde bu olayı gördüğümden 1-2 kodla aktif edilebileceğini düşündüm.

Ancak sonradan gördüğüm kadarıyla image bileşeni bana çok ters. Türkiye haritası yaptığında pek sorun yok ancak binlerce bileşen olduğunda bellek kullanımı çok çok yüksek. TPath bileşeni işimin yarısından fazlasını görüyor. Tamda böyle vektörel çizim gerekli. Ancak oda bir nevi 1(2) bit. Yani bir çizgi ve dolgu ile oynayabiliyoruz. Üzerine yazı yazmak için çizgilerle yazmak gerekiyor. Bu yedekte.
Tam aradığım olay SVG veya vektörel bir bileşen. Ücretsiz SVG bileşeni bulamadım. http://www.riversoftavg.com/svg.htm adresindeki demo (http://www.riversoftavg.com/Files/SVGDemoApps.zip)

SVG veya benzer vektörel çiz bulamazsam Tpath olmadı riversoftsvg(ücretli) bileşeni gibi duruyor.
Cevapla
#4
(20-08-2016, Saat: 12:57)engerex Adlı Kullanıcıdan Alıntı: @mrmarman öncelikle ilgine teşekkürler.
Benzer bir yöntemi şöyle denemeyi düşündüm. Sonuçta ben saydam kısımlara tıklanmasını istemiyorum ve tıklandığında altındaki kısma tıklanmasını sağlamak istiyorum. Bileşenin mouse olaylarına tıklanan kısmın saydam olması durumunda bileşenin hittest (sanırım FMX ile gelen bir olay) olayını disable yapmayı planladım. Bir nevi bahsettiğin şekilde. Bunun üzerinde biraz çalışmak gerekiyor. Çünkü hittest disable dendiğinde o bileşen bir nevi devre dışı kalmış oluyor. Görünür kısımlar görünmeye devam ediyor ancak üzerine tıklanırsa alttakine geçiyor.
Bazı bileşenlerde bu olayı gördüğümden 1-2 kodla aktif edilebileceğini düşündüm.

Ancak sonradan gördüğüm kadarıyla image bileşeni bana çok ters. Türkiye haritası yaptığında pek sorun yok ancak binlerce bileşen olduğunda bellek kullanımı çok çok yüksek. TPath bileşeni işimin yarısından fazlasını görüyor. Tamda böyle vektörel çizim gerekli. Ancak oda bir nevi 1(2) bit. Yani bir çizgi ve dolgu ile oynayabiliyoruz. Üzerine yazı yazmak için çizgilerle yazmak gerekiyor. Bu yedekte.
Tam aradığım olay SVG veya vektörel bir bileşen. Ücretsiz SVG bileşeni bulamadım. http://www.riversoftavg.com/svg.htm adresindeki demo (http://www.riversoftavg.com/Files/SVGDemoApps.zip)

SVG veya benzer vektörel çiz bulamazsam Tpath olmadı riversoftsvg(ücretli) bileşeni gibi duruyor.

Aslında istediğiniz şeyin karşılığı; Region'dur. Bir çok region fonksiyonu vardır, bunlarla bir region oluşturduktan sonra handle(HWND)'ı vasıtası ile bir pencereyi ilgili region'a SetWindowRgn api'si ile sınırlandırabilirsiniz. Dolayısı ile o sınırların dışında kalan alana tıklamalarınıza ilgili alanın sahibi olan pencere yanıt verecektir.

İlgili API grubuna buradan erişebilirsiniz.

Not: PathToRegion ve CombineRgn API'lerine de bakmak isteyebilirsiiniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla
#5
Alıntı:Örnek olarak aşağıda 3 Image nesnesi var ve bunların dikdörgen olarak kapladığı alanlar görülüyor. En üstte duran nesnenin saydam kısımları diğer bileşenin büyük kısmını kapladığı için alttaki bileşenin görünür yerleri yerine üstteki bileşenin saydam kısımları tıklanıyor.

Sorunu alıntıladığım bu şekliyle güzelce ifade etmişsin ama ben önyargıyla atlamışım. 

Evet Tuğrul beyin söylediği şekilde yapılası bir durum.
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#6
Yalnız VCL windows altında geçerli.
Cevapla
#7
(21-08-2016, Saat: 12:42)engerex Adlı Kullanıcıdan Alıntı: Yalnız VCL windows altında geçerli.

Bir Firemonkey kullanıcısı değilim ama hedef platform Windows ise ilgili Windows API'leri kullanabileceğinizi düşünüyorum. FMX.Platform.Win altında FmxHandleToHWND isimli bir metod olmalı, onu inceleyebilirsiniz arzu ederseniz.
Mal sahibi, mülk sahibi
Hani bunun ilk sahibi ?
Mal da yalan mülk de yalan
Var biraz da sen oyalan...
WWW
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  FMX Listview Image Sorunu [ÇÖZÜLDÜ] Mesut 1 337 20-10-2023, Saat: 15:03
Son Yorum: Mesut
  Tıklanılan Image'yi Android Galeride Açmak kajmerantime 7 965 06-10-2023, Saat: 09:10
Son Yorum: kajmerantime
  Image Kalite Nasıl yükseltilir? barissagir 1 308 28-09-2023, Saat: 18:52
Son Yorum: hi_selamlar
Photo Rest Serverdan androide image download etmek serifaliyagci 6 1.245 17-07-2023, Saat: 09:55
Son Yorum: serifaliyagci
  ClientDataSet image field yükleme (DataSnap) 41linea41 29 8.213 25-01-2023, Saat: 19:18
Son Yorum: yemre



Konuyu Okuyanlar: 1 Ziyaretçi