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
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
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.
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
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.
Ağlarsa kablosuz ağlar, gerisi yerel ağlar...
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
  ClientDataSet image field yükleme (DataSnap) 41linea41 6 1.781 23-10-2020, Saat: 14:22
Son Yorum: Jakarta2
  Image Height ve Width boyutu- çözüldü Nese 2 516 13-07-2020, Saat: 00:44
Son Yorum: Nese
  Image taşıma Haydar 1 425 17-06-2020, Saat: 21:26
Son Yorum: mrmarman
  Listview nesnesi ile birden fazla alan oluşturma Fesih ARSLAN 12 8.110 09-03-2020, Saat: 10:47
Son Yorum: Fesih ARSLAN
  Corner buton üzerinde image run time da görünmüyor 41linea41 1 816 20-09-2019, Saat: 08:37
Son Yorum: hi_selamlar



Konuyu Okuyanlar: 1 Ziyaretçi