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 :

Créer un TBitmap dans un module


Sujet :

Langage Delphi

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut Créer un TBitmap dans un module
    Bonjour,

    Je voudrais pouvoir utiliser un TBitMap à l'intérieur d'un module
    J'ai bien défini dans les Uses l'unité Graphics
    Par contre quand dans une précédure j'écris
    LO_Image = TBitMap.Create;

    J'obtiens une erreur indiquant que cette méthode n'est pas connue.

    Sur les différents sujets que j'ai lus cette instruction est toujours effectuée dans l'évènement Create d'une Form.
    J'ai besoin de ne le faire que dans un module classique.

    J'imagine que c'est possible mais que faut-il déclarer de plus ?

  2. #2
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Il faut préfixer la déclaration. TBitmap existe à la fois dans les unités Windows et Graphics:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LO_Image : Graphics.TBitmap;
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2022

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Merci j'essaie ce soir
    Pour le create je fais juste LO_Image := TBitmap.Create
    ou LO_Image := Graphics.TBitmap.Create

    Par contre j'ai fait plusieurs essais hier. Quelle différence entre Graphics et QGraphics ? Cela viendrait de QuickReport ?

  4. #4
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Le create reste inchangé.
    (si tu as une version professionelle, en faisant un ctrl+clic sur TBitmap, tu verras la différence avec et sans préfixage).

    QGraphics (comme la plupart des unités commençant par Q) étaient destinées à faire du multi-plateforme avec Kylix.

    Il vaut mieux éviter, cela te permettra de te passer de livrer la DLL qtintf.dll avec ton logiciel..
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2022

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Ca fonctionne mais j'ai été obligé de préfixer la création
    Il y a encore une chose que je ne comprends pas et je ne sais pas si cela vient de la création.
    Le bitmap est un fond de page : il contient un logo de Société, son adresse, etc... J'ai donc créé un BMP de 21 * 29 centimetres.

    Si j'imprime l'image sur le canvas elle ne prend qu'une toute petite partie de la page.

    Si j'essaie de la mettre en fond j'ai une erreur en hexa
    Voici le code et il me semble correct

    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
    var
       LO_Image : Graphics.TBitmap;
     
    Begin
        LO_Image := Graphics.TBitmap.Create;
        Try
           LO_Image.LoadFromFile(Image);
    //       Printer.Canvas.Draw(OrigX, OrigY, LO_Image);
           Printer.Canvas.Brush.Bitmap := LO_Image;
           Printer.Canvas.FillRect(Rect(0, 0, LO_Image.Width, LO_Image.Height));
        finally
           Printer.Canvas.Brush.Bitmap := nil;
           LO_Image.Free;
      end;
    End;
    Merci pour l'aide

  6. #6
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Une image est définie en pixels et non en centimètres.
    Or le Canvas d'un écran est beaucoup plus petit que celui d'une imprimante. (tu peux comparer Height du bitamp et ClientHeigth du Canvas de l'miprimate)

    Il faudrait mieux utiliser la fonction StretchDraw (de tête) et d'agrandir aux dimensions du canvas de l'imprimante.
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2022

  7. #7
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    Je vais essayer StretchDraw (en espèrant que cela existe en Delphi 6).
    Je ne comprends pas cette différence Pixel / Centimètre

    J'ai utilisé des centimètres quand j'ai construit le bitmap parce que c'était plus parlant pour moi. Quand je l'imprime il occupe bien toute la page

    Dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Printer.Canvas.FillRect(Rect(0, 0, LO_Image.Width, LO_Image.Height));
    je pensais que le width et le heignt étaient dans la même unité que le canvas. Non ?

  8. #8
    Membre chevronné

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 288
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 288
    Points : 1 936
    Points
    1 936
    Par défaut
    Il n'y a qu'une seule unité à manipuler: les pixels

    (Cela permet d'afficher la même chose pour un écran 20cm*10cm que sur un écran 10cm*5cm ayant la même résolution par exemple).
    Delphi 7/XE2/XE3
    C#
    Oracle 9i à 12c
    SQL Server 2008 à 2022

  9. #9
    Membre émérite Avatar de edam
    Homme Profil pro
    Développeur Delphi/c++/Omnis
    Inscrit en
    Décembre 2003
    Messages
    1 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur Delphi/c++/Omnis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 894
    Points : 2 770
    Points
    2 770
    Par défaut
    pour plus de détail voir ce lien
    bon dev
    PAS DE DESTIN, C'EST CE QUE NOUS FAISONS

  10. #10
    Membre confirmé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 184
    Points : 619
    Points
    619
    Par défaut
    J'ai utilisé la méthode StretchDraw et j'ai passé en paramètre la taille de la page canvas de l'imprimante.
    C'est correct.

    Je donne le code ici pour d'éventuelles générations futures.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    var
       LO_Image : Graphics.TBitmap;
     
    Begin
        LO_Image := Graphics.TBitmap.Create;
        Try
           LO_Image.LoadFromFile(Image);
           Printer.Canvas.StretchDraw(Rect(0, 0, Printer.PageWidth, Printer.PageHeight), LO_Image);
        finally
           LO_Image.Free;
      end;
    End;
    Merci à vous

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

Discussions similaires

  1. Comment créer une CheckBox dans un module Access
    Par schnee dans le forum Access
    Réponses: 3
    Dernier message: 06/03/2014, 22h20
  2. Réponses: 6
    Dernier message: 04/11/2004, 17h35
  3. [VB.NET] Appeler une sub public dans un module de form
    Par SergeF dans le forum Windows Forms
    Réponses: 3
    Dernier message: 01/06/2004, 13h08
  4. Comment créer une Table dans 1 Bdd ACCESS avec Builder??
    Par makandja dans le forum C++Builder
    Réponses: 6
    Dernier message: 17/03/2004, 20h21
  5. Créer une série dans un chart
    Par cyrose dans le forum C++Builder
    Réponses: 5
    Dernier message: 28/11/2002, 11h37

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