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

Lazarus Pascal Discussion :

Impression sur MacOsX Cocoa


Sujet :

Lazarus Pascal

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Points : 26
    Points
    26
    Par défaut Impression sur MacOsX Cocoa
    Bonjour à tous,

    Pas d'impression possible avec la nouvelle version 2.0 sous Cocoa ?

    Quelqu'un a-t-il vu la possibilité d'imprimer (un simple contenu de canvas, par exemple) en profitant de la pré visualisation, sur le Mac ?

    J'utilise Lazarus 2.0 avec les options 'cocoa' hélas toujours en 32 bits...

    Merci d'avance

    Phil
    http://www.philippe-georges.com
    Formations Purebasic & Lazarus Free Pascal
    Création de logiciels

  2. #2
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonsoir

    Pourrais-tu fournir le code que tu utilises ou en cherches tu un ?

    Si tu as déja du code. Est ce que ce code fonctionnait avec une version antérieur ?

    En attendant voici un bout de code que j'utilise pour imprimer un "Canvas" (uniquement tester sous windows. Cela fait un gros moment que je n'ai pas allumé mon Mac)

    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
    uses
      PrintersDlgs,
      Printers;   // Unité utile pour l'impression
     
    Type 
      TfrmMain = class(TForm)
        DlgPrint: TPrintDialog
      private
      end;
     
    procedure TfrmMain.sbtnPrintClick(Sender: TObject);
    var
      LPrinter : TPrinter;
      LBitMap : TBitMap;
      nw,nh : Integer;
     
     Procedure KeepAspectRatio(Const SrcW, SrcH: Integer; Var NewWidth, NewHeight: Integer);
     Var
       w, h: Integer;
     Begin
     
       W := NewWidth;
       H := newHeight;
       H:=(SrcH*W) div SrcW;
       if (H>newHeight) then
       begin
         H:=newHeight;
         W:=(SrcW*H) div SrcH;
       end;
       NewWidth:=W;
       newHeight:=H;
     End;
     
    begin
      if DlgPrint.Execute then
      begin
        LPrinter := Printer;
        LPrinter.Copies := DlgPrint.Copies;
        try
     
          LBitMap := TBitMap.Create;
          nw := LPrinter.PaperSize.Width;
          nh := LPrinter.PaperSize.Height;
          KeepAspectRatio(pnlResultat.Width,pnlResultat.Height,nw,nh);
          LBitMap.Width := pnlResultat.Width;
          LBitMap.Height := pnlResultat.Height;
          pnlResultat.Color:= clWhite;
          pnlResultat.PaintTo(LBitMap.Canvas, 0, 0);
          pnlResultat.Color:= clDefault;
     
          LPrinter.BeginDoc;
         // LPrinter.Title := 'Un titre';
     
          LPrinter.Canvas.CopyRect(Classes.Rect(0, 480, nw, 480+nh),
                   LBitMap.Canvas, Classes.Rect(0, 0, LBitMap.Width, LBitMap.Height));
     
        finally
          LPrinter.EndDoc;
          LBitMap.Free;
        end;
      end;
    end;
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Points : 26
    Points
    26
    Par défaut Impression Lazarus / Cocoa
    Bonjour

    Voici le code que j'ai utilisé pour faire le test :

    Sous windows, pas de problème,

    Sous cocoa, rien ! même la prévisualisation Cocoa n'affiche rien. Page blanche à l'impression.

    Si quelqu'un a une idée....et un mac pour tester avec la dernière version de Lazarus !!

    Merci d'avance,

    // code de l'unité

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    unit Unit1;
     
     
    {$mode objfpc}{$H+}
     
     
    interface
     
     
    uses
      Classes, SysUtils, Forms, Controls, Graphics, Dialogs,
      Printers,
      StdCtrls, ExtCtrls,
      PrintersDlgs;
     
     
    type
     
     
      { TForm1 }
     
     
      TForm1 = class(TForm)
      DlgPrint: TPrintDialog;
        Button1: TButton;
        Image1: TImage;
        Pnlresultat: TPanel;
     
     
        procedure Button1Click(Sender: TObject);
        procedure Image1Click(Sender: TObject);
      private
     
     
      public
     
     
      end;
     
     
    var
      Form1: TForm1;
     
     
    implementation
     
     
    {$R *.lfm}
     
     
    { TForm1 }
     
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      LPrinter : TPrinter;
      LBitMap : TBitMap;
      nw,nh : Integer;
     
     
     Procedure KeepAspectRatio(Const SrcW, SrcH: Integer; Var NewWidth, NewHeight: Integer);
     Var
       w, h: Integer;
     Begin
     
     
       W := NewWidth;
       H := newHeight;
       H:=(SrcH*W) div SrcW;
       if (H>newHeight) then
       begin
         H:=newHeight;
         W:=(SrcW*H) div SrcH;
       end;
       NewWidth:=W;
       newHeight:=H;
     End;
     
     
    begin
      if DlgPrint.Execute then
      begin
        LPrinter := Printer;
        LPrinter.Copies := DlgPrint.Copies;
        try
     
     
          LBitMap := TBitMap.Create;
          nw := LPrinter.PaperSize.Width;
          nh := LPrinter.PaperSize.Height;
          KeepAspectRatio(pnlResultat.Width,pnlResultat.Height,nw,nh);
          LBitMap.Width := pnlResultat.Width;
          LBitMap.Height := pnlResultat.Height;
          pnlResultat.Color:= clWhite;
          pnlResultat.PaintTo(LBitMap.Canvas, 0, 0);
          pnlResultat.Color:= clDefault;
     
     
          LPrinter.BeginDoc;
         // LPrinter.Title := 'Un titre';
     
     
          LPrinter.Canvas.CopyRect(Classes.Rect(0, 480, nw, 480+nh),
                   LBitMap.Canvas, Classes.Rect(0, 0, LBitMap.Width, LBitMap.Height));
     
     
        finally
          LPrinter.EndDoc;
          LBitMap.Free;
        end;
      end;
    end;
     
     
    procedure TForm1.Image1Click(Sender: TObject);
    begin
     
     
    end;
     
     
    end.
    http://www.philippe-georges.com
    Formations Purebasic & Lazarus Free Pascal
    Création de logiciels

  4. #4
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonjour

    Après

    pnlResultat.PaintTo(LBitMap.Canvas, 0, 0);Peux-tu rajouter LBitmap.SavetToFile('test.bmp'); et vérifier que le bitmap n'est pas vide. Si c'est le cas c'est qu'il y a un soucis en rapport avec le TImage..
    Si tu rajoutes un Label dans "pnlResultat" est-ce que le Label est imprimé ?

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Points : 26
    Points
    26
    Par défaut Impression Lazarus / Cocoa
    Merci de t'interesser à mon cas !!

    Donc, j'ai ajouté cette ligne : Lbitmap.savetofile(extractfilepath(application.exename)+'georges.bmp');.

    Sur PC : ça marche, j'ai bien un contenu dans mon image ! l'impression est correcte.

    Sur MAC : l'image est toute blanche, comme l'est la page blanche !!

    Une idée ? Le PaintTo ne marche pas sur mac....???

    Phil
    http://www.philippe-georges.com
    Formations Purebasic & Lazarus Free Pascal
    Création de logiciels

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Points : 26
    Points
    26
    Par défaut
    Citation Envoyé par BeanzMaster Voir le message
    Bonjour

    Après

    pnlResultat.PaintTo(LBitMap.Canvas, 0, 0);Peux-tu rajouter LBitmap.SavetToFile('test.bmp'); et vérifier que le bitmap n'est pas vide. Si c'est le cas c'est qu'il y a un soucis en rapport avec le TImage..
    Si tu rajoutes un Label dans "pnlResultat" est-ce que le Label est imprimé ?

    A+
    J'oubliai ! Le label ajouté sur le Panel n'est présent ni dans l'image sur Mac, ni bien sur à l'impression.
    Par contre ça marche sur PC ! L'image en BMP est bien produite, et l'impression est correcte.

    Phil
    http://www.philippe-georges.com
    Formations Purebasic & Lazarus Free Pascal
    Création de logiciels

  7. #7
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Bonsoir

    Cocoa n'étant toujours pas en version stable, il n'est pas étonnant que certains problèmes subsistent. Il n'y a d'ailleurs aucun rapport de bogue ouvert à ce sujet dans le bugtracker. Il serait bon d'en faire un.

    Essaye de remplacer pnlResultat.PaintTo(LBitMap.Canvas, 0, 0); par LBitmap.Canvas.CopyRect(Rect(0,0,pnlResultat.ClientWidth, pnlResultat.ClientHeight),pnlResultat.Canvas, pnlResultat.ClientRect);
    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Points : 26
    Points
    26
    Par défaut Impression cocoa
    Rien de plus, j'ai placé un message sur le forum lazarus / Free Pascal.

    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
     try
     
          LBitMap := TBitMap.Create;
          nw := LPrinter.PaperSize.Width;
          nh := LPrinter.PaperSize.Height;
          KeepAspectRatio(pnlResultat.Width,pnlResultat.Height,nw,nh);
          LBitMap.Width := pnlResultat.Width;
          LBitMap.Height := pnlResultat.Height;
     
          LBitMap.Canvas.Brush.Color := clWhite;
          LBitMap.Canvas.Pen.Color :=ClWhite;
          LBitMap.Canvas.Pen.Width:=2;
          LBitMap.Canvas.Rectangle(0, 0,  LBitMap.Width,  LBitMap.Height);
          LBitMap.Canvas.Pen.Color :=Clblack;
     
          //pnlResultat.Color:= clWhite;
          //pnlResultat.PaintTo(LBitMap.Canvas, 0, 0);
          LBitmap.Canvas.CopyRect(Rect(0,0,pnlResultat.ClientWidth, pnlResultat.ClientHeight),pnlResultat.Canvas, pnlResultat.ClientRect);
          Lbitmap.savetofile(extractfilepath(application.exename)+'georges.bmp');
     
          pnlResultat.Color:= clDefault;
     
          LPrinter.BeginDoc;
         // LPrinter.Title := 'Un titre';
     
          LPrinter.Canvas.CopyRect(Classes.Rect(0, 480, nw, 480+nh),
                   LBitMap.Canvas, Classes.Rect(0, 0, LBitMap.Width, LBitMap.Height));
     
        finally
          LPrinter.EndDoc;
          LBitMap.Free;
        end;
    C'est un peu triste.... Maintenant, s'il y avait une solution pour créer un PDF et écrire comme sur Canvas.....

    Avez vous peut être une idée là dessus ?

    Phil
    http://www.philippe-georges.com
    Formations Purebasic & Lazarus Free Pascal
    Création de logiciels

  9. #9
    Expert confirmé
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Points : 4 346
    Points
    4 346
    Billets dans le blog
    2
    Par défaut
    Salut, bon vu sur le forum anglais, il semblerai que l'impression ne soit par encore supportée par Cocoa. N'empêche qu'il y a un bug avec TCanvas et les fonctions Draw, CopyRect et PaintTo.

    Pour la génération de PDF, il y a la suite LazReport, mais il semble y avoir des problèmes avec macOSx à tester.
    Sinon il y existe les composants PowerPDF. Les composant JPFPDF et en enfin TMS FNC UI Pack dans lequel il y a un générateur PDF compatible Windows, macOS, iOS, Android, Linux & Raspbian,..

    A+
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  10. #10
    Membre éprouvé Avatar de der§en
    Homme Profil pro
    Chambord
    Inscrit en
    Septembre 2005
    Messages
    763
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Chambord
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2005
    Messages : 763
    Points : 959
    Points
    959
    Par défaut
    Je serait curieux de voir vers où pointe le application.exename sur Mac ?

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Mai 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Mai 2004
    Messages : 28
    Points : 26
    Points
    26
    Par défaut application.exename sur Mac
    Bonjour

    En fait, le programme Mac est en fait une application dans un dossier .app. Application.exename pointe sur un executable présent dans ce dossier, dans le sous dossier "contents"

    Voilà !!
    http://www.philippe-georges.com
    Formations Purebasic & Lazarus Free Pascal
    Création de logiciels

Discussions similaires

  1. [CR] débuter l'impression sur une étiquette X
    Par theflamme dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 11/01/2005, 08h47
  2. Enlever le boutton impression sur une image !
    Par Gab-Gab dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 13/11/2004, 23h30
  3. [CR9] impression sur papier à entête
    Par liosec dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 30/08/2004, 10h52
  4. [CR10][ASP.NET]Impression sur le poste Client
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 30/04/2004, 13h41
  5. [TP]Impression sur port USB
    Par haypo dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 18/07/2003, 11h09

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