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 :

[D7] Erreur EOleSysError


Sujet :

Delphi

  1. #1
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut [D7] Erreur EOleSysError
    Bonjour,

    j'ai trouvé ce code pour charger tous les types d'image, les convertir en Bmp et les afficher dans un TImage :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    { ========================================================================== }
    procedure TF_Princ.Btn_AfficherClick(Sender: TObject);
    //  Afficher une image dans un TImage
    Var
      OleGraphic    : TOleGraphic;
      fs      : TFileStream;
      Source     : TImage;
      BMP      : TBitmap;
      Image : String ;
      Rapport : Real ;
    Begin
      If ListeImage2.Items.Count > 0 Then
        Begin
          Image := ListeImage2.Items[ListeImage2.ItemIndex] ;
          Image := ExcludeTrailingBackslash(EditDestination.Text) + '\'+Image ;
     
          Try
            OleGraphic := TOleGraphic.Create;
     
            fs := TFileStream.Create(Image, fmOpenRead Or fmSharedenyNone);
            // Erreur ici sur le loadfromstream avec les png :
            OleGraphic.LoadFromStream(fs);
     
            Source := Timage.Create(Nil);
            Source.Picture.Assign(OleGraphic);
     
            BMP := TBitmap.Create;
            bmp.Width := Source.Picture.Width;
            bmp.Height := source.Picture.Height;
            bmp.Canvas.Draw(0, 0, source.Picture.Graphic);
            // Mise à l'echelle de Image1
            Rapport := Image1.Height / bmp.Height ;
            // Affichage dans la form F_Afficher
            F_Afficher.Image1.Width := Round(bmp.Width * Rapport) ;
            F_Afficher.image1.Picture.Bitmap := bmp;
            F_Afficher.ShowModal ;
          Finally
            fs.Free;
            OleGraphic.Free;
            Source.Free;
            bmp.Free;
          End;
        End ;
     
    End;
    { ========================================================================== }
    Mais pour les fichiers de type png, j'ai une erreur EOleSysError OLE 800A01E1

    Le code est protégé, mais les png ne s'affichent pas.

    Y a t il un moyen pour éviter cette erreur ?

    J'ai cherché sur Google, parfois cette erreur arrive quand une dll n'est pas installé sur le poste. Je ne suis pas sûr que ce soit cela ? (j'aD7 et D10.3 installé sur mon Windows 10 64 bits)

    Merci
    A+
    Charly

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 454
    Points : 24 866
    Points
    24 866
    Par défaut
    OleLoadPicture retourne une erreur si tu utilises les DCU de débogage
    Essayse OleLoadPictureFile et voir si cela retourne CTL_E_INVALIDPICTURE dans ton cas je suppose
    Est-ce tous les PNG sont pris en charge ?

    Sinon, en D7, tu trouves de vieilles unité JPEGImage et PNGImage
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Merci ShaiLeTroll,

    j'ai bien pngImage dans la clause Uses.

    j'ai remplacé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleGraphic.LoadFromStream(fs);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    OleGraphic.OleLoadPictureFile(fs) ;
    Mais j'ai : Identificateur non déclaré : OleLoadPictureFile

    PS : comment on utilise les DCU de débogage ?

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 454
    Points : 24 866
    Points
    24 866
    Par défaut
    OleLoadPictureFile c'est l'API OleAut32.dll
    Sans la surcouche VCL

    les DCU de Débogage, c'est une option du compilateur (option de projet) qui permet de débogguer la VCL, utile pour comprendre une erreur bas niveau parfois masquée


    Si tu as pngImage, autant utiliser la classe dedans et faire toi même le code d'aiguillage entre BMP, JPEG et PNG (manquera GIF mais ça se trouve aussi pour D7)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Ok, merci. Je vais utiliser PngImage en testant l'extension.

    A+
    Charly

  6. #6
    Membre expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 344
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 344
    Points : 3 122
    Points
    3 122
    Par défaut
    Finalement, j'ai fait un cas à part juste pour les png. Voici le résultat :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    { ========================================================================== }
    Procedure TF_Princ.Btn_AfficherClick(Sender: TObject);
    //  Afficher une image dans un TImage
    Var
      OleGraphic    : TOleGraphic;
      fs      : TFileStream;
      Source     : TImage;
      BMP      : TBitmap;
      Image : String ;
      Rapport : Real ;
      Extension : String ;
      vPng: TPNGObject;
    Begin
      If ListeImage2.ItemIndex = -1 Then Exit ;
      If ListeImage2.Items.Count > 0 Then
        Begin
          Image := ListeImage2.Items[ListeImage2.ItemIndex] ;
          Extension := ExtractFileExt(Image) ;
          Image := ExcludeTrailingBackslash(EditDestination.Text) + '\'+Image ;
          If LowerCase(Extension) = '.png' Then
            Begin
              Try
                vPng := TPNGObject.Create;
                vPng.LoadFromFile(Image);
                BMP := TBitmap.Create;
                bmp.Width := vPng.Width;
                bmp.Height := vPng.Height;
                bmp.Canvas.Draw(0, 0, vpng);
                // Mise à l'echelle de Image1
                Rapport := Image1.Height / bmp.Height ;
                // Affichage dans la form F_Afficher
                F_Afficher.Image1.Width := Round(bmp.Width * Rapport) ;
                F_Afficher.image1.Picture.Bitmap := bmp;
                F_Afficher.ShowModal ;
              Finally
                vPng.Free ;
                bmp.Free ;
              End ;
            End
          Else
            Begin
              Try
                OleGraphic := TOleGraphic.Create;
                fs := TFileStream.Create(Image, fmOpenRead Or fmSharedenyNone);
                OleGraphic.LoadFromStream(fs);
                Source := Timage.Create(Nil);
                Source.Picture.Assign(OleGraphic);
                BMP := TBitmap.Create;
                bmp.Width := Source.Picture.Width;
                bmp.Height := source.Picture.Height;
                bmp.Canvas.Draw(0, 0, source.Picture.Graphic);
                // Mise à l'echelle de Image1
                Rapport := Image1.Height / bmp.Height ;
                // Affichage dans la form F_Afficher
                F_Afficher.Image1.Width := Round(bmp.Width * Rapport) ;
                F_Afficher.image1.Picture.Bitmap := bmp;
                F_Afficher.ShowModal ;
              Finally
                fs.Free;
                OleGraphic.Free;
                Source.Free;
                bmp.Free;
              End;
        End ;
            End ;
    End;
    { ========================================================================== }
    C'est pas terrible, mais cela fonctionne bien avec tous les types d'images y compris les png.

    A+
    Charly

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

Discussions similaires

  1. Erreur fréquente avec ASP et IIS
    Par Community Management dans le forum ASP
    Réponses: 2
    Dernier message: 11/02/2004, 22h20
  2. Check Url pour savoir si erreur 404 ou si le site existe
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 13h49
  3. Réponses: 2
    Dernier message: 27/05/2002, 19h46
  4. erreur IDL:omg.org/CORBA/MARSHAL:1.0
    Par Pinggui dans le forum CORBA
    Réponses: 3
    Dernier message: 13/05/2002, 15h05
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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