Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1470 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Ressources et Images

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ressources et Images

n°1619547
the big be​n
Posté le 05-10-2007 à 11:35:27  profilanswer
 

Bonjour,
 
J'ai créé un Web Server Control, enfin un Composite Control pour etre précis.  
Mais j aimerais pouvoir mettre des icones qui serait inclus dans la dll de manière à ce que les utilisateurs ne doivent pas se préoccuper des icones du tout mais que tout soit dans cette dll.
J'ai donc mit les images dans un fichier ressources mais appres comment attribuer mon Image à un ImageButton?
 
D'avance merci
 
Ben


Message édité par the big ben le 05-10-2007 à 13:29:09
mood
Publicité
Posté le 05-10-2007 à 11:35:27  profilanswer
 

n°1619652
MagicBuzz
Posté le 05-10-2007 à 13:50:34  profilanswer
 

Je doute qu'il existe une solution toute faite.
 
Le plus simple est donc d'ajouter à ta DLL une page CS (un autre contrôle utilisateur peut-être) nommé "LoadResource".
 
Ce contrôle attends en QueryString le nom de l'icône.
 
Il recherche l'image correspondante dans les recources du projet, et retourne avec un Response.BinaryWrite() le contenu binaire du fichier, et en header ce qu'il faut pour que ça corresponde au format du fichier.
 
Ensuite, dans ton contrôle principal, tu indiques juste l'url de ta page avec le bon paramètre :
 

Code :
  1. MonImageButton.ImageUrl = "LoadResource.aspx?resourcename=btnOk.png";


 
Il y a peut-être moyen de faire plus simple, mais cette solution devrait fonctionner sans problème, donc à défaut de mieux...

n°1619675
the big be​n
Posté le 05-10-2007 à 14:13:08  profilanswer
 

Bon je me lance je vais tenter ca...

n°1619676
MagicBuzz
Posté le 05-10-2007 à 14:13:42  profilanswer
 

Testé et approuvé :
 
TestBtn.ascx :

Code :
  1. <%@ Control Language="C#" AutoEventWireup="true" CodeFile="TestImg.ascx.cs" Inherits="Controls_TestImg" %>
  2. <asp:ImageButton ID="ImageButton1" runat="server" />


 
TestBtn.ascx.cs :

Code :
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Web;
  6. using System.Web.Security;
  7. using System.Web.UI;
  8. using System.Web.UI.WebControls;
  9. using System.Web.UI.WebControls.WebParts;
  10. using System.Web.UI.HtmlControls;
  11.  
  12. public partial class Controls_TestImg : System.Web.UI.UserControl
  13. {
  14.    protected void Page_Load(object sender, EventArgs e)
  15.    {
  16.        ImageButton1.ImageUrl = "LoadResource.aspx?resourcename=avatar_hfr";
  17.    }
  18. }


 
LoadResource.aspx

Code :
  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="LoadResource.aspx.cs" Inherits="Controls_LoadResource" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" >
  4. <head id="Head1" runat="server">
  5.    <title>Untitled Page</title>
  6. </head>
  7. <body>
  8.    <form id="form1" runat="server">
  9.    </form>
  10. </body>
  11. </html>


 
LoadResource.aspx.cs :

Code :
  1. using System;
  2. using System.IO;
  3. using System.Drawing;
  4. using System.Drawing.Imaging;
  5. /*
  6. using System.Configuration;
  7. using System.Collections;
  8. using System.Web;
  9. using System.Web.Security;
  10. using System.Web.UI;
  11. using System.Web.UI.WebControls;
  12. using System.Web.UI.WebControls.WebParts;
  13. using System.Web.UI.HtmlControls;
  14. */
  15.  
  16. public partial class Controls_LoadResource : System.Web.UI.Page
  17. {
  18.    protected void Page_Load(object sender, EventArgs e)
  19.    {
  20.        if (Request.QueryString["resourcename"] == null)
  21.        {
  22.            Response.Redirect("~/Default.aspx" );
  23.        }
  24.  
  25.        Image i = (Image)Resources.Resource.ResourceManager.GetObject(Request.QueryString["resourcename"]);
  26.        MemoryStream ms = new MemoryStream();
  27.        i.Save(ms, ImageFormat.Png);
  28.        Response.ContentType = "image/png";
  29.        Response.BinaryWrite(ms.ToArray());
  30.        ms.Close();
  31.    }
  32. }


 
Main.master :

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" >
  3. <head runat="server">
  4.    <title>Untitled Page</title>
  5. </head>
  6. <body>
  7.    <form id="form1" runat="server">
  8.    <div>
  9.        <uc1:Login ID="Login1" runat="server" />
  10.        <uc2:TestImg ID="TestImg1" runat="server" />
  11.        <asp:Menu ID="Menu1" runat="server" DataSourceID="SiteMapDataSource1" BackColor="#E3EAEB" DynamicHorizontalOffset="2" Font-Names="Verdana" Font-Size="0.8em" ForeColor="#666666" StaticSubMenuIndent="10px">
  12.            <StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
  13.            <DynamicHoverStyle BackColor="#666666" ForeColor="White" />
  14.            <DynamicMenuStyle BackColor="#E3EAEB" />
  15.            <StaticSelectedStyle BackColor="#1C5E55" />
  16.            <DynamicSelectedStyle BackColor="#1C5E55" />
  17.            <DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" />
  18.            <StaticHoverStyle BackColor="#666666" ForeColor="White" />
  19.        </asp:Menu>
  20.        <asp:SiteMapDataSource ID="SiteMapDataSource1" runat="server" />
  21.        <asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
  22.        </asp:contentplaceholder>
  23.        </div>
  24.    </form>
  25. </body>
  26. </html>


 
Résultat :
http://img214.imageshack.us/img214/2234/btnresourceta7.png

n°1619678
MagicBuzz
Posté le 05-10-2007 à 14:16:43  profilanswer
 

Par contre, t'as parfaitement le droit de dire que...
 

Code :
  1. Image i = (Image)Resources.Resource.ResourceManager.GetObject(Request.QueryString["resourcename"]);
  2. MemoryStream ms = new MemoryStream();
  3. i.Save(ms, ImageFormat.Png);
  4. Response.ContentType = "image/png";
  5. Response.BinaryWrite(ms.ToArray());
  6. ms.Close();


 
C'est bien du bordel pour afficher une bête image :D
 
- Extraction du fichier de la DLL vers la mémoire avec décodage de la compression
- Réencodage de la compression et recopie en mémoire dans un stream
- Recopie du stream en mémoire dans un array de byte
- Recopie du array de byte vers le outputstream
 
:pt1cable:

n°1619689
the big be​n
Posté le 05-10-2007 à 14:22:09  profilanswer
 

Et normalement je peut inclure une page aspx dans une Web Control Library?

n°1619692
MagicBuzz
Posté le 05-10-2007 à 14:23:07  profilanswer
 

Ca, aucune idée. J'espère que oui :D
 
Je trouve pas ce type de projet dans mon vs... Alors du coup j'ai juste fais ça dans un site.


Message édité par MagicBuzz le 05-10-2007 à 14:24:18
n°1619698
the big be​n
Posté le 05-10-2007 à 14:27:45  profilanswer
 

Ca se trouve sous Visual C# - Windows
Ben oui je pige pas non plus pourquoi ils l ont mis la...

n°1619704
MagicBuzz
Posté le 05-10-2007 à 14:30:43  profilanswer
 

Ca y est, j'ai trouvé.
(planqué dans les projets "windows"... pige pas trop pkoi c'est pas dans "web"...)
-- grillaid en fait --
 
Ca marche comment ton bouzin ?


Message édité par MagicBuzz le 05-10-2007 à 14:31:24
n°1619709
the big be​n
Posté le 05-10-2007 à 14:34:12  profilanswer
 

Simplement ma classe est la suivante. puis tu compile, tu ajouter la dll que tu viens de compiler dans ton Design Panel et ensuite comme un control normal tu fait un drag and drop dans ta page web
 

Code :
  1. using System;
  2. using System.Data;
  3. using System.Configuration;
  4. using System.Collections;
  5. using System.Collections.Generic;
  6. using System.ComponentModel;
  7. using System.Text;
  8. using System.Web;
  9. using System.Web.Security;
  10. using System.Web.UI;
  11. using System.Web.UI.WebControls;
  12. using System.Web.UI.WebControls.WebParts;
  13. using System.Web.UI.HtmlControls;
  14. using System.Resources;
  15. using System.IO;
  16. using System.Drawing;
  17. using System.Drawing.Imaging;
  18. using System.Drawing.Drawing2D;
  19. namespace BenFileManager
  20. {
  21.     public delegate void ClickBrowseEvent(object sender, EventArgs e);
  22.     [DefaultProperty("UploadPath" )]
  23.     [ToolboxData("<{0}:FileManager runat=server></{0}:FileManager>" )]   
  24.     public class FileManager : CompositeControl
  25.     {       
  26.         //Initialize method   
  27.         protected override void CreateChildControls()
  28.         {
  29.             ImageButton ib = new ImageButton();
  30.             ib.ImageUrl = "LoadRessource.aspx?resourcename=avi";
  31.             Controls.Add(ib);
  32.            
  33.         }       
  34.     }
  35. }

mood
Publicité
Posté le 05-10-2007 à 14:34:12  profilanswer
 

n°1619714
the big be​n
Posté le 05-10-2007 à 14:35:06  profilanswer
 

Par contre je viens d essayer et je pense pas que l on puisse mettre de page aspx
 
Au besoin mini tuto pour le Server Web Control: http://www.techheadbrothers.com/Ar [...] nfirmation


Message édité par the big ben le 05-10-2007 à 14:36:24
n°1619720
MagicBuzz
Posté le 05-10-2007 à 14:39:52  profilanswer
 

Bon, effectivement, t'es mal, je vois pas du tout comment tu peux faire.
 
(pourquoi tu passes par ce truc ? ç'a m'a l'aire bien compliqué pour pas grand chose ce bignou)

n°1619722
MagicBuzz
Posté le 05-10-2007 à 14:42:11  profilanswer
 

Par contre, je pense à un truc.
 
Certains sites fonctionnent de la façon suivante :
 
http://domaine/toto.dll?methodname [...] 1=coincoin
 
=> et ça lance plop(coincoin) qui est une méthode située dans la dll
Je suppose que ton salut se trouve dans cette "solution". Reste à trouver comment la mettre en place :D
 
ceci dit, c'est gore, parceque ça oblige à exposer la DLL dans path public (donc sujet aux attaques) et ça oblige à travailler avec un nom de dll et un chemin d'accès à cette dernière qui soit figé... donc source de pas mal de problèmes de dépoliement.
deplus, pour "exécuter une dll" cela nécessite d'avoir IIS paramétré en mode "autoriser l'exécution d'exécutable", ce qui est une faille potentielle très importante : un petit malin uploade un EXE sur ton serveur, et zou, il a juste à taper l'url où le fichier a été déposé pour démarrer le programme sur le serveur... je te laisse imaginer les ravages que ça peut faire si l'admin du serveur n'a aucune expérience dans la sécurisation :D


Message édité par MagicBuzz le 05-10-2007 à 14:45:12
n°1619725
the big be​n
Posté le 05-10-2007 à 14:44:38  profilanswer
 

Pourquoi je passe par ca? Ben pour créer vraiment un user control que je pourrai intégrer facilement sur tout mes site et mon but est de le rendre totalement libre donc que d autres personne puissent égelement en profiter et sans devoir se prendre la tete.

n°1619730
the big be​n
Posté le 05-10-2007 à 14:48:08  profilanswer
 

Mais donc non ca ne fonctionne pas trop avec ta solution snif surtout que j avais utilisé la meme methode pour créer mes images Thumbs (tu m avais d ailleur aidé aussi il y a qq jours) et du coup j en revient au point de départ!  :pfff:  :pfff:  :pfff:


Message édité par the big ben le 05-10-2007 à 14:48:26
n°1619732
MagicBuzz
Posté le 05-10-2007 à 14:48:34  profilanswer
 

Je crois que tu te feras moins chier en rendant l'accès aux images paramétrage... :/
 
autre solution, tu stockes les images sur un serveur public et tu hardcode leur chemin d'accès dans la dll.
mais bon c'est très très moyen

n°1619735
MagicBuzz
Posté le 05-10-2007 à 14:50:20  profilanswer
 

sinon, tu fais de l'ascii art, c'est joli l'ascii art :D

n°1619739
the big be​n
Posté le 05-10-2007 à 14:55:22  profilanswer
 

LOL. Non mais ca veut dire que  
 - soit je ne le met pas en dll donc on doit chaque fois copier
    - le user control
    - la page de génération de Thumbs
    - les icones
 - soit j arrive à créer par une autre methode en gardant ma dll (je voit pas trop comment) et on a juste à intégrer la dll, on peut le prendre en mode design, le jour ou je fait un changement je doit pas changer tout les site, il suffit de redeployer la dll.

n°1619774
the big be​n
Posté le 05-10-2007 à 15:27:57  profilanswer
 

Whoooooo ca fonctionne. Ils expliquent ici : http://aspnet.4guysfromrolla.com/a [...] 906-1.aspx comment faire pour embarquer une ressource et il suffit d adapter un peu pour faire de meme avec des images.

n°1619788
the big be​n
Posté le 05-10-2007 à 15:42:30  profilanswer
 

Et hop un petit post sur mon blog en francais pour les alergiques à l anglais: http://www.pharmacommerce.be/blog/ [...] ns-le-code
 
Merci pour ton aide en tt cas!


Message édité par the big ben le 05-10-2007 à 15:50:33
n°1619816
MagicBuzz
Posté le 05-10-2007 à 16:02:25  profilanswer
 

grmpf ! :)

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Ressources et Images

 

Sujets relatifs
[SGBD]Normalisation Hosting images[Macro WORD] Comment insérer plusieurs images ?
[Résolu] compiler plusieur images dans un fichier phpinserer des images sur excel
modifié une images avant de l'affichercherche bibliotheque pour manipulation d'images
Envoi d'un mail en HTML avec imagesenchaînement d'images en fondu ?
ResourceManager: images en ressources incorporéesOù trouver des ressources et images pour faire un site internet
Plus de sujets relatifs à : Ressources et Images


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR