Yorumları: 1.683
Konuları: 20
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 19.178
Üstad
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
Yorumları: 1.463
Konuları: 80
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 11.915
Üstad
(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...
Yorumları: 979
Konuları: 44
Kayıt Tarihi: 24-07-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 2.737
Uzman
Yalnız VCL windows altında geçerli.
Yorumları: 1.463
Konuları: 80
Kayıt Tarihi: 05-08-2016
Aktif Kullandığınız Delphi Sürümü:
Rep Puanı: 11.915
Üstad
(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...