Zobrazení image ve WebBrowseru   zodpovězená otázka

VB.NET, Komponenty

Zdravím, ve form aplikaci mám komponentu webBrowser ve které generuji html. Narazil jsem na problém, že nevím jak do webBrowseru propašovat obrázek který je umístění v Resources. Pokud zadám:

"<img src='~/Resources/menu_down.JPG' style='width: 75px'>"

'nebo

"<img src='Resources/menu_down.JPG' style='width: 75px'>"

Objeví se mi vždy prázdný obrázek (zástupný obrázek s křížkem). Pokud zadám jako zdroj obrázku nějáké místo na internetu, je to bez problémů.

A pak bych měl ještě dotaz ohledně formátu obrázku. Bude to fungovat i s koncovkou ICO?

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

Máte v Resources nastaveno CopyToOutputDirectory na CopyAlways? Bude třeba zadat absolutní cestu, jelikož dynamicky generovaná stránka ve WebBrowseru má adresu about:blank. S ICO to bude fungovat též, ale ujistěte se, že ico soubor obsahuje pouze jeden snímek, protože jádro IE nevybírá defaultně ten nejbohatší (nejvyšší množství barev a rozlišení) snímek. Tak to aspoň bývalo u starších verzích, u 7+ netuším.

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

Díky za nakopnutí, absolutní cestu jsem zadal takto:

"<img src='" & My.Application.Info.DirectoryPath & "/Resources/menu_down.JPG' style='width: 75px'>"

a v pořádku to funguje. Bohužel pouze při ladění, ne když udělám relase a aplikaci někam přesunu. Pokud totiž nastavím CopyAlways jak jste mi radil, tak se mi vygeneruje adresář resources který bych musel distribuovat s aplikací (pokud ho tam dám tak to samozřejmě funguje). Já to mám ale řešené tak, že mám jeden exe soubor ve kterém je všechno a ten jediný dávám k dispozici uživatelům, takže další adresáře nejsou žádoucí. Zkouším přijít na to zda jde k těmto obrázkům přistupovat stejně jako když je dávám třeba jako backGround na buttonu nebo na pictureBoxu, tzn. takto:

Me.PictureButtonSmlouva.BackgroundImage = My.Resources.down

Bohužel zatím se mi to nedaří.

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

Na spojování složek raději použijte Path.Combine viz článek:

http://www.vbnet.cz/blog-clanek--160-net...

Vyvarujete se tím případného problému, kdy bude cesta zadána se zpětným lomítkem na konci (popřípadě bez něj) a vy s tím nebudete počítat.

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

No tak to vás ujišťuji že to nepůjde, protože ten WebBrowser to musí mít jako externí soubor, je to přece HTML.

Takže jedině předtím extrahovat z Resources do externího souboru.

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

Nebo ještě mě napadá (ale pro tento případ zbytečně složité) řešení spočívající ve vytvoření .ASHX, který bude mít nějaký parametr, dejme tomu R, a který vytáhne ze zadané binárky resource R a vrátí ho klientovi (MIME typ by měl jít určit podle typu resource). Jen si nejsem jistý, jak si to poradí s (často tvrdě nastavenou) CAS na webhostingu.

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

Předpokládám, že když se mluví o komponentě WebBrowser, tak tazatel používá klasickou Windows Forms aplikaci a tedy ASP.NET handler použít nebude možné.

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

Díky, to jsem potřeboval vědět.

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

Já zadávám cestu k obrázku takto a šlape to ;-)

"<img src='../Resources/menu_down.JPG' style='width: 75px'>"

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

To je ale špatně. To "../" znamená, že se odkazuje do složky zdrojových kódů projektu, která se přeci s aplikací kopírovat nebude.

Řešením je nastavit CopyToOuputDirectory u souborů obrázků a odkazovat se pak pomocí relativní cesty, například:

<img src='./Images/menu_down.JPG' style='width: 75px'>

Sloužka resources jak již psal pan Linhart se používá pro soubory, které přibalíte do projektu přímo do výstupní assembly a nebude se tedy možné se na ně odkázat přímo jako na soubor.

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

Jenže my se tu bavíme o použití obrázku z Resources v binárce, tj. přímo v té assembly. No ty obrázky které můžete přidat ve vlastnostech projektu na kartě Resources. To nejsou žádné externí soubory.

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