Průhlednost obrázku v PictureBox   zodpovězená otázka

VB.NET

Věděl by někdo jak na průhlednost obrázku v PictureBox?

Při nastavení BackColor u PictureBox na Transparent je obrázek průhledný, ale až na formulář. V případě překrývání jiné komponety ji nevidí a v místech s průhledností se ukazuje pozadí formuláře. Chtěl bych, aby byla v místě průhlednosti obrázku v PictureBox vidět komponenta, která je pod ním.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

S tímto případem je docela problém. PictureBox vytváří průhlednost vždy pouze proti mateřskému konteineru na komponenty, ve kterém se nachází, tudíž není žádné jednoduché cesty, jak tohoto dosáhnout. Existuje ovšem řada dalších možností, jak to vyřešit.

Jedním z řešení je změna regionu komponenty, tudíž funkční části komponenty, která je brána jako aktivní. V případě složitějších tvarů obrázků je tento způsob stává velmi složitým a nevhodným.

Jde o to, co má mít Vámi zamýšlený postup za efekt. Pokud mi to objasníte, pokusím se Vám pomoci najít řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jde o školní test - správně sestavit obrázek z tvarově nepravidelných dílů - šlo by to přirovnat k "vykrajovaným" puzzle. Tvary dílů jsou však dány tvarem toho, co zobrazují.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

V tomto případě bych Vám doporučil využít pouze jednu komponentu PictureBox a všechny operace provádět za pomoci vykreslování. Tam je průhlednost obrázků přes sebe aplikovatelná celkem jednoduchým způsobem a je to i elegantnější řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To je pravda, překrývající se obrázky s průhledností se zobrazí správně, dík za radu. Bohužel jsem tam, kde jsem byl protože potřebuji obrázky přetahovat myší. Jde to nějak?

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Samozřejmě, že to jde. PictureBox (a většina ostatních komponent) má události MouseDown a MouseUp, které se spustí při stisknutí, resp. puštění tlačítka myši. Souřadnice máte v e.X a e.Y. Dále je zde událost MouseMove, která se spouští co nejčastěji, pokud myší hýbete. Pokud je v e.Button hodnota Left (ve všech 3 událostech), znamená to, že se akce děje se stisknutým levým tlačítkem myši, což potřebujeme.

V MouseDown si tedy uložte pozici myši v rámci kostičky puzzle, v MouseMove překreslujte kostičku puzzle tak, aby uložené pozice myši v rámci kostičky souhlasily a v MouseUp dorovnejte kostičku tak, aby se přichytila k ostatním již poskládaným. Pokud to nepůjde, ať skočí na původní pozici.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Ano, přesouvání komponent myší jde. Problém je s průhledností, kterou poskytuje jenom formulář; nejde mi částečně překrýt dva boxy tak, aby v místě průhlednosti vyššího byl vidět spodní a ne pozadí formuláře - viz výše. Proto mně p. Vondráček doporučil použít jen jeden PictureBox a na něj vykreslovat. U vykreslených obrázků není s průhledností problém, ale zase je neumím myší přesouvat jako komponenty.

-------------------

Asi tu pletu pojmy - vykreslený a vložený - neuměl bych potřebné obrázky vykreslovat, jde tedy o vložené z grafických souborů. Když studuji zdejší BubbleBreaker vidím, že postupné vykreslování při tažení myší by mohlo jít, potřebné události jsou k mání. Ale nevím jak to realizovat s obrázkem ze souboru.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Zdravím.

Ak ešte stále potrebujete riešiť tento problém, pošlite mi emailovú adresu a pošlem Vám zdroják. Niečo som skúšal a funguje mi to. Nemám ošetrené ťahanie objektu pomocou mouse down, urobil som to narýchlo s trackbarmi, ale principiálne to ide.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Výborně! Pošlete na adresu: iss.ucitel zavináč seznam.cz

Díky.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pardon, nebyl jsem přihlášený - adresa je ode mne.

Vr. R.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

OK,poslal som Vám to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Pane Pavlíku, děkuji za zaslané. Příklad je inspirativní, cíl však mám ještě v nedohlednu. Budu rád, pokud něco objevíte v problému tažení myší. Vlastně ani tak ne tažení samotné, to zvládám, ale dobře jen pro jeden obrázek. Nevím, jak jednoduše identifikovat, na kterém vykresleném obrázku proběhlo mouse down. Jen porovnávání souřadnic nestačí, je potřeba ještě rozlišit, průhledná a neprůhledná místa obrázku. Viz Váš příklad: oba obrázky se při spojení úplně překrývají. Hledám nyní, jak barvy odlišit - průhledná je u všech stejná. Můžu klik na ní ignorovat, musí to tedy jít - jako všechno, jen vědět jak.

Při načtení obrázku ze souboru s Image.FromFile lze použít nejen ikonu, ale i GIF nebo PNG s průhledností. S obrázky samotnými tedy problém nemám. I tak děkuji za tip na IcoFX.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback