IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 Delphi Discussion :

lire et afficher le jpg depuis une dll !


Sujet :

Delphi

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut lire et afficher le jpg depuis une dll !
    Bonjour à toutes et à tous,

    J'aimerai lire l'image jpg (1033) qui se trouve dans une dll.

    La ressource de cette dll se trouve dans le groupe IMAGE, 5031, 1033

    J'avais testé avec ceci mais forcément seul le bitmap est affiché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    procedure Tfrm_Main.Btn_OpenClick(Sender: TObject);
    Var      BmpList : TStringList ; 
    begin 
      With TOpenDialog . Create ( Self ) do 
      Try 
        InitialDir := '%SYSTEMROOT%\System32' ;
        Filter := 'Fichier avec resources|*.EXE;*.DLL;*.OCX' ;
        FilterIndex := 1 ;
        If Execute Then Begin 
          CloseLib ;
          HandleLib := LoadLibrary ( PChar ( FileName ));
          If HandleLib <> 0 Then Begin 
            lb_Bitmaps . Clear ;
            BmpList := GetResources ( HandleLib , RT_BITMAP );
            lb_Bitmaps . Items . AddStrings ( BmpList );
            BmpList . Free ;
          End ;
        End ;
      Finally 
        Free ;
      End ;
     
    end;
    Merci de l'aide ou si quelqu'un avait une autre idée pour afficher depuis la dll concernée qui se trouve dans (C:\Windows\System32\imageres.dll) cette image.

    @+,

    Cincap

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Bonjour à toutes et à tous,

    J'ai testé ceci pour un Bitmap, cela fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    Var
        HandleLib : THandle;
        aBmp : TBitmap;
        NumBmp: Byte;
        FilePath: string;
    begin
     HandleLib := LoadLibrary(PChar(FileListBox1.FileName));
      If HandleLib <> 0 Then Begin
      aBmp := TBitmap.Create;
        Try
          aBmp.LoadFromResourceID(HandleLib, 1033);
          Image1.Picture.Assign(aBmp);
        Finally
          FreeLibrary(HandleLib);
          aBmp.Free;
        End;
      End;
     
    end;
    J'ai modifié pour un Jpeg et erreur !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    Var
        HandleLib : THandle;
        aBmp : TJpegimage;
        NumBmp: Byte;
        FilePath: string;
    begin
     HandleLib := LoadLibrary(PChar(FileListBox1.FileName));
      If HandleLib <> 0 Then Begin
      aBmp := TJpegimage.Create;
        Try
          aBmp.LoadFromResourceID(HandleLib, 1033); //Ici      
    Image1.Picture.Assign(aBmp);
        Finally
          FreeLibrary(HandleLib);
          aBmp.Free;
        End;
      End;
    
    end;
    Merci d'une aide possible !

    @+,

    Cincap

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 128
    Points : 41 285
    Points
    41 285
    Billets dans le blog
    63
    Par défaut
    voici comment je fais pour un png , pour un jpeg il y a pas grand chose a modifier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    var
      h : THandle;
      Res: TResourceStream;
      png : TPNGImage;
    begin
      h := LoadLibrary('maGUI.DLL');
      try
        if h <> 0 then
        begin
          png := nil;
          Res := nil;
          png := TPNGImage.Create;
          Res := TresourceStream.Create(H, 'BWCODEGEAR', RT_RCDATA);
          png.LoadFromStream(Res);
          AboutDelphi.Picture.Bitmap.assign(png);
        end;
      finally
        Res.Free;
        png.Free;
        FreeLibrary(h);
      end;
    end;

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ SergioMaster, merci de ta réponse, j'ai testé sans résultat, en fait je dois pointer sur la ressource IMAGE, 5031, 1033 de la Dll qui se nomme "imageres.dll"

    Le but est de pouvoir changer cette image qui sert de background lors d'une session Vista.

    Bien entendu, ResHacker sait le faire, mais j'aurai bien aimé faire un petit soft qui permet de le faire.

    @+,

    Cincap

  5. #5
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 128
    Points : 41 285
    Points
    41 285
    Billets dans le blog
    63
    Par défaut
    IMAGE, 5031, 1033
    c'est ce que te donnes reshacker ?

    essayes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      h := LoadLibrary('imageres.DLL');
    ..
      Res := TresourceStream.Create(H, '5031', 'IMAGE');
    je vais essayer de mon coté

    [edit]
    ca devient plus compliqué que prévu !!
    TresourceStream ne trouve pas la ressource , la faute à 'IMAGE' qui n'est pas une valeur connue contrairement a RT_xxxxxx , pourtant le findresource trouve bien l'image !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          c:=findresource(H,'5031','IMAGE');  //  trouve bien la ressource
          if c<>null then
              begin
                Res := TresourceStream.Create(H, '5031','IMAGE'); // ne la trouve pas ????????
    le challenge est donc maintenant de :
    - soit utiliser un TMemoryStream et continuer avec LoadResource etc...
    - soit de trouver la bonne valeur de 'IMAGE'

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Bonjour à toutes et à tous,

    @ SergioMaster, attention, que le groupe est IMAGE puis 5031 et l'image jpg est 1033.

    J'ai fait le test avec le groupe Bmp, et l'image s'affiche bien.

    Je teste aussi à mes moments perdus.

    @+,

    Cincap

  7. #7
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 128
    Points : 41 285
    Points
    41 285
    Billets dans le blog
    63
    Par défaut
    en fait 1033 c'est pour 'la localisation' testable par findresourceX


    en fait , il fallait le savoir , voilà la solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Res := TresourceStream.Create(H, '#5031','IMAGE');
    trouvée vraiment par hasard, j'ai lu une phrase je n'arrive pas a retrouver où, disant que si l'id de la ressource est numérique il faut rajouter un # au début (je pense que c'est dans la MSDN mais je ne retrouve pas)

    [reedit]
    Otherwise, those parameters are long pointers to null-terminated strings. If the first character of the string is a pound sign (#), the remaining characters represent a decimal number that specifies the integer identifier of the resource's name or type. For example, the string "#258" represents the integer identifier 258.
    c'etait ici

  8. #8
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ SergioMaster, bravo, chapeau bas, je viens de tester ce qui avait été fait et bien entendu en rajoutant le signe "chemin de fer" le jpg s'affiche, comme quoi je cherche compliqué.

    Reste à la remplacer par un autre JPG et sauvegarder à nouveau cette dll sans que Vista ne rouspète.

    Grand merci,

    @+,

    Cincap

  9. #9
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 128
    Points : 41 285
    Points
    41 285
    Billets dans le blog
    63
    Par défaut
    pour ça j'ai aussi la réponse

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    @ SergioMaster,

    pour ça j'ai aussi la réponse
    je n'en doute pas

    En étudiant la structure de cette Dll, il faut tenir compte que le Jpeg soit de 256 c et en le mettant sous le n° 1033 de la référence 5031, le strech se fait automatiquement.

    En effet, il y a aussi les réf. 5031, 5032 ect pour différentes résolutions

    @+,

    Cincap

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 450
    Détails du profil
    Informations personnelles :
    Âge : 71
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 450
    Points : 1 336
    Points
    1 336
    Par défaut
    Bonjour à toutes et à tous,

    @ SergioMaster, j'ai ajouter un fichier Xml à mon application qui me permet d'avoir le droit Administrateur (icône sur mon icône) par contre comme imageres.dll est utilisé lors de la session, impossible de le modifier et de le remplacer.

    As tu réalisé un test ?

    @+,

    Cincap

  12. #12
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 128
    Points : 41 285
    Points
    41 285
    Billets dans le blog
    63
    Par défaut
    un test , non

    ce que je sais en revanche , c'est qu'il faut passer par
    1-findresource
    2-lockresource
    avant de modifier

    s'il doit y avoir test , ce ne sera pas avant le WE , un 'casse-tête' par semaine seulement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. afficher les messages printf depuis une dll
    Par keenan dans le forum C++
    Réponses: 2
    Dernier message: 16/01/2008, 09h22
  2. [DLL] Afficher le contenu d'une dll dans un Tpanel
    Par Fabs dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/08/2007, 14h30
  3. Afficher une fenêtre depuis une DLL
    Par swayvill dans le forum VC++ .NET
    Réponses: 3
    Dernier message: 05/04/2007, 19h14
  4. Afficher une fenêtre depuis une DLL
    Par swayvill dans le forum C++
    Réponses: 1
    Dernier message: 07/01/2007, 16h43
  5. Comment charger un TFrame depuis une dll ?
    Par Millenod dans le forum Langage
    Réponses: 29
    Dernier message: 22/12/2004, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo