OnMouseDown i przezroczysty obrazek

problemy z tworzeniem aplikacji graficznych oraz audio i wideo

OnMouseDown i przezroczysty obrazek

Nowy postprzez GrassHoppeR » wtorek, 29 listopada 2011, 15:28

cześć,

podpowiedzcie koledzy jak uniknąć wywoływanie zdarzenia OnMouseDown na części obrazka, który jest przezroczysty, ale tak, aby wywołało się ono na obrazku, który jest pod spodem.

pozdrawiam
Avatar użytkownika
GrassHoppeR
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): wtorek, 4 stycznia 2011, 01:17
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 2491715
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez Corvis » wtorek, 29 listopada 2011, 21:34

Nie bardzo rozumiem.

Gdzie te obrazki leżą tzn. na czym ???
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    Windows VistaChrome

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez Pitek » wtorek, 29 listopada 2011, 21:55

Wydaje mi się że chodzi o przypadek kiedy na formatce mamy np. dwa komponenty TImage jeden na drugim. Po kliknięciu w przezroczysty obszar tego który jest najwyżej ma się zaznaczyć ten którego obraz przez tą przezroczystość widać czyli ten poniżej. Czyli w przezroczystym miejscu tego położonego najwyżej jest jakby dziura i można bezpośrednio kliknąć w TImage znajdujący się pod nim i tym samym wywołać zdarzenie OnMouseDown ale dla tego leżącego poniżej, pod tym z obszarem przezroczystym przez który klikamy ;)
Uff mam nadzieje że o oto chodziło i że jest to zrozumiałe bardziej :D
Komputer służy do tego aby ułatwić Ci pracę, której bez niego w ogóle byś nie miał.
E.Murphy
http://piotrekprogramy.pl
Avatar użytkownika
Pitek
Kreacjusz
Kreacjusz
 
Posty: 290
Dołączył(a): środa, 14 października 2009, 14:53
Lokalizacja: Rybnik/Wrocław
Podziękował : 43
Otrzymał podziękowań: 5
System operacyjny: Win 7 Ultimate 64bit SP1 / Ubuntu 19.04 LTS 64bit
Kompilator: Embarcadero RAD Studio XE2
SKYPE: pitek3010
Gadu Gadu: 7060047
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez GrassHoppeR » wtorek, 29 listopada 2011, 22:03

no leżą powiedzmy na panelu obiekty TImage. są to trójkąty na przezroczystym tle.
Obrazek
kliknięcie w czerwony obszar spodniego trójkąta wywołuje OnMouseDown trójkąta wierzchniego. jak tego uniknąć?

Edit: no właśnie, kolega wyżej dobrze to wytłumaczył.
Avatar użytkownika
GrassHoppeR
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): wtorek, 4 stycznia 2011, 01:17
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 2491715
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez polymorphism » środa, 30 listopada 2011, 10:41

Sprawdzasz, czy w miejscu kliknięcia piksel jest przezroczysty. Jeśli jest, wywołujesz on-clicka dla image'a poniżej. Wsio ;)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez GrassHoppeR » środa, 30 listopada 2011, 11:07

no ale skąd ma wiedzieć, że poniżej w ogóle jest jakiś image?
Avatar użytkownika
GrassHoppeR
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): wtorek, 4 stycznia 2011, 01:17
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 2491715
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez polymorphism » środa, 30 listopada 2011, 11:45

Stąd, że będzie sprawdzał, czy współrzędne kursora należą do obszaru zajmowanego przez image leżący poniżej.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez GrassHoppeR » środa, 30 listopada 2011, 12:04

no dobra, załóżmy, że w OnMouseDown sprawdzę czy Pixels[X][Y]!=przezroczysty i jeśli nie to co dalej? Imageów może być wiele, to znaczy, że musiałbym w pętli sprawdzić wszystkie, a tego chcę uniknąć, bo w takim przypadku równie dobrze mógłbym po prostu rysować po Panelu.
Avatar użytkownika
GrassHoppeR
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): wtorek, 4 stycznia 2011, 01:17
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 2491715
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez polymorphism » środa, 30 listopada 2011, 12:16

GrassHoppeR napisał(a): Imageów może być wiele, to znaczy, że musiałbym w pętli sprawdzić wszystkie, a tego chcę uniknąć (...)

Inaczej tego nie zrobisz.

(...) bo w takim przypadku równie dobrze mógłbym po prostu rysować po Panelu.

O, i to jest najlepszy pomysł.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez GrassHoppeR » środa, 30 listopada 2011, 12:31

nie wierzę :P

myślałem, że może są jakieś maski albo coś. a jeśli nie to chociaż może jakiś sposób żeby w przypadku gdy Pixels[X][Y]==przezroczysty nie obsługiwać tylko "przekazać dalej" ten komunikat i żeby system sam wywołał następny element? myślałem o chwilowym wyłączaniu imidża i wywoływaniu kliknięcia, ale to chała raczej.

inna sprawa, że imidże są tworzone dynamicznie i przy wspólnym dla wszystkich onmousedown robię po prostu rzutowanie więc w zasadzie zamiast tego mogę przejechać pętlą po wszystkich sprawdzając po kolei który się załapuje na współrzędne myszki, no ale jak pisałem nie bardzo mi to pasuje. z resztą to pytanie w celach edukacyjnych, bo byle jak to zawsze można zrobić...
Avatar użytkownika
GrassHoppeR
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): wtorek, 4 stycznia 2011, 01:17
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 2491715
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez polymorphism » środa, 30 listopada 2011, 12:48

nie ma jakiegoś sposobu aby w przypadku gdy Pixels[X][Y] nie obsługiwać tylko "przekazać dalej" ten komunikat?

No przecież to, co zaproponowałem wcześniej, to właśnie Twoje "przekazać dalej". Choć oczywiście w przypadku, gdy mamy więcej takich bitmap (obiektów graficznych), lepiej użyć jakiejś tablicy, która przechowuje ów bitmapy w kolejności z-order.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez GrassHoppeR » środa, 30 listopada 2011, 13:01

lepiej użyć jakiejś tablicy, która przechowuje ów bitmapy w kolejności z-order.

no i właśnie dlatego nie chciałem tego robić "ręcznie", dodawać jakiś tablic itp., tylko żeby system za mnie to zrobił.
to co zaproponowałeś to nie jest to moje "przekazać dalej", bo pisząc to miałem na myśli "sprawdzaj dalej i wywołaj komunikat jak coś znajdziesz". na pewno jest taka możliwość, czuję pod skórą. ;)
Avatar użytkownika
GrassHoppeR
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): wtorek, 4 stycznia 2011, 01:17
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 2491715
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez polymorphism » środa, 30 listopada 2011, 13:05

na pewno jest taka możliwość.

W VCL-u? Nie sądzę.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez Cyfrowy Baron » środa, 30 listopada 2011, 13:29

Nie da się tego zrobić tak jak chcesz. System tego w żaden sposób nie obsłuży, czyli sam musisz zaimplementować obsługę. Nakładając jeden Image na drugi masz dwa obiekty, ale z jedną powierzchnią na której jest to rysowane, gdyż TImage nie posiada własnej powierzchni i Twoim przypadku korzysta z powierzchni obiektu Panel, czyli równie dobrze możesz zaimplementować obsługę dla TPanel.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: OnMouseDown i przezroczysty obrazek

Nowy postprzez GrassHoppeR » środa, 30 listopada 2011, 13:50

ale jak sprawdzę w panelu onmousedown i wywołam mousedown imidża to onmousemove i tak będzie docierał do panela a nie do tego imidża. czyli cała obsługa musi być w panelu.
Avatar użytkownika
GrassHoppeR
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): wtorek, 4 stycznia 2011, 01:17
Podziękował : 3
Otrzymał podziękowań: 0
System operacyjny: Windows XP
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 2491715
    Windows XPFirefox

Następna strona

  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Aplikacje multimedialne, graficzne

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości

cron