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

Langage Delphi Discussion :

Comment créer un bitmap de travail dans une DLL


Sujet :

Langage Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Comment créer un bitmap de travail dans une DLL
    Bonjour à tous,

    Dans une fonction développée avec ExpertDLL j'ai besoin de créer provisoirement une image bitmap
    Voici le type de fonction
    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
     
    function ModifieCanvas( Canvas: TCanvas; CanRect: TRect ): Integer;
    var
      W,H: Integer;
      BMP:TBitmap;
    begin
      W:= CanRect.Right-CanRect.Left;
      H:= CanRect.Bottom-CanRect.Top;
      BMP:= TBitmap.Create;
      try
    //  faitquelquechose;
      finally
        BMP.Free;
      end;
      result:= W*H;
    end;
    Le code source de la DLL ne reconnait pas Tbitmap.Create
    J'utilise TBitmap car j'ai besoin d'utiliser la fonction ScanLine sui n'existe pas dans TCanvas

    Quelqu'un a-t'il une idée ?

    Bon apres midi à tous

  2. #2
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 340
    Points
    13 340
    Par défaut
    Ajoute Graphics au uses.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Mais Graphics est déjà déclaré
    Graphics est déjà déclaré dans les uses

    D'ailleurs dans cette DLL j'ai déclaré d'autres fonctions qui travaillent sur des paramètres TCanvas sasn poser aucun problème.

    D'ailleurs la déclaration dans Var de BMP: TBitmap ne me signale aucune erreur alors que sur la ligne BMP:= Tbitmap.Create; la fonction .create est soulignée en rouge avec à la compilation l'erreur "E2003 : Identificateur non déclaré : 'Create'"

    As-tu une autre idée ?

  4. #4
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 340
    Points
    13 340
    Par défaut
    Alors c'est que tu as un type record déclaré comme... TBitmap:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    type
      TBitmap = record
        ...
      end;
    Passe ta souris dessus pour voir où il est déclaré.
    Ensuite, si tu es responsable , renomme-le! Sinon modifie l'ordre des uses.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut
    sur la TBitmap de la déclaration dans var

    tagTBIMAPtype
    TBitmap - =Windows.tagBITMAP

    sur la ligne TBitmap.Create

    identificateur TBitmap non déclaré

  6. #6
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 340
    Points
    13 340
    Par défaut
    Comme je te dis, change l'ordre du uses.
    C'est le type trouvé dans la dernière unité déclarée qui est utilisé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //Juste
    uses Windows, Graphics;
     
    //Faux
    uses Graphics, Windows;

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Points : 2 153
    Points
    2 153
    Billets dans le blog
    1
    Par défaut
    Dans ce genre de cas, mieux vaut préfixer le nom du type par le nom de l'unité :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var
      W,H: Integer;
      BMP:Graphics.TBitmap;

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Rien ne marche
    Windows était dans le uses de l'implantation et Graphics dans le uses de l'interface.
    J'ai donc déplacé windows dans le uses de l'interface en prenant soin de le placer avant Graphics :
    Pas de changement, même problème !

    J'ai essayé en déclarant ma variable par Graphics.Tbitmap :
    Pas de changement, même problème !

    Toujours même problème je n'ai pas d'erreur à la déclaration mais elle se situe à l'utilisation d'une méthode du type comme create ou Free

  9. #9
    Rédacteur/Modérateur
    Avatar de Andnotor
    Inscrit en
    Septembre 2008
    Messages
    5 754
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 754
    Points : 13 340
    Points
    13 340
    Par défaut
    Difficile de t'aider beaucoup plus (c'est la seule explication )

    Si tu veux essayer ce que te propose Aka, tu dois préfixer toutes les lignes contenant TBitmap:

    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
    function ModifieCanvas( Canvas: TCanvas; CanRect: TRect ): Integer;
    var
      W,H: Integer;
      BMP:Graphics.TBitmap;
    begin
      W:= CanRect.Right-CanRect.Left;
      H:= CanRect.Bottom-CanRect.Top;
      BMP:= Graphics.TBitmap.Create;
      try
    //  faitquelquechose;
      finally
        BMP.Free;
      end;
      result:= W*H;
    end;

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    803
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 803
    Points : 182
    Points
    182
    Par défaut Ok Ok Ok
    Enfin ça marche mais en réécrivant la fonction sour un autre nom, l'ancienne écriture pose toujours le problème !!! A n'y rien comprendre

    Merci à tous

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 14/03/2012, 15h01
  2. Réponses: 6
    Dernier message: 22/02/2011, 22h46
  3. Réponses: 16
    Dernier message: 06/08/2006, 23h45
  4. Réponses: 4
    Dernier message: 03/03/2004, 11h04
  5. Comment créer un bitmap à partir d'un panel ?
    Par calou34 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 19/08/2003, 15h06

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