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 :

Printer.Title et Windows 8.1


Sujet :

Delphi

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut Printer.Title et Windows 8.1
    Bonjour,

    Voici un problème que je viens de découvrir en passant mon application favorite sur Windows 8.1


    Cette application permet à un moment donné d'imprimer réellement des fiches produites mais aussi jusqu'à présent d'imprimer virtuellement avec PDFCreator.

    Voici le code
    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
     
      Image_Bouton(Main.IAeverButton8, 'MainB8_In');
      Date_Impression := FormatDateTime('yyyy"" mm"" dd"" hh"" mm"" ss', Now); //  On définit l'heure de l'impression.
     
     
     
      If Consulte then  // Volet de consultations.
        begin
          If MDIChildCount = 0 then
            begin
              StatusBar1.SimpleText := ' Aucun titre n''a été sélectionné.';
              Exit;
            end;
     
         If Printer.Printers.Count > 0 then Printer.PrinterIndex := -1;  
     
         If PrintDialog1.Execute then If Printer.Aborted = True
           then Exit
           else
             begin
               Printer.Orientation := poLandscape;
               Type_Enfant := MDIChildren[0].Tag;
               case Type_Enfant of   // Ici c'est simplement pour s'y retrouver dans les identifications (une seule ligne aurait fait l'affaire).
                 0: Oui_Ascenseur := TEnfant_Net(MDIChildren[0]).Ascenceur;  // icone d'identification "PN"
                 1: Oui_Ascenseur := TEnfant_Fisc(MDIChildren[0]).Ascenceur;  // icone d'identification "PF"
               3,4: Oui_Ascenseur := TEnfant_Frais(MDIChildren[0]).Ascenceur;  // icone d'identification "St"
                 5: Oui_Ascenseur := TEnfant_Cessions(MDIChildren[0]).Ascenceur;  // icone d'identification "Cs"
                 6: Oui_Ascenseur := TEnfant_Histo(MDIChildren[0]).Ascenceur;  // icone d'identification "Ht"
                 7: Oui_Ascenseur := TEnfant_Abattement(MDIChildren[0]).Ascenceur;  // icone d'identification "Ab"
                 8: Oui_Ascenseur := TEnfant_Abat_Annee(MDIChildren[0]).Ascenceur;  // icone d'identification "+/-"
                 9: Oui_Ascenseur := TEnfant_Titre_Dispo(MDIChildren[0]).Ascenceur;  // icone d'identification "Td"
               end;
               Titre := MDIChildren[0].Caption;
            // Vérifie la fin du titre...
            // Si il se termine par "P.E.A." ou "...", on conserve le titre tel quel,
               If (AnsiPos('P.E.A', Titre) <> 0) or (AnsiPos('...', Titre) <> 0)
                 then Titre_Imprimante := Titre  //  On attribut le titre du document pour l'imprimante.
              // sinon suppression du point à la fin du titre.
                 else Titre_Imprimante := Copy(Titre, 1, Length(Titre) -1);  //  On corrige le titre du document pour l'imprimante.
               case Type_Enfant of  //  On complète le titre du document pour l'imprimante avec la date et l'heure d'impression.
                 0: Titre_Imprimante := Titre_Imprimante + ' - PR Net - ' + Date_Impression;
                 1: Titre_Imprimante := Titre_Imprimante + ' - PR Fiscal - ' + Date_Impression;
           3,4,5: Titre_Imprimante := Titre_Imprimante + ' - ' + Date_Impression;
                 6: Titre_Imprimante := Titre_Imprimante + ' - ' + Date_Impression;
           7,8,9: Titre_Imprimante := Titre_Imprimante + ' - ' + Date_Impression;
               end;
     
               Printer.Title := Titre_Imprimante;  // On définit le titre du document à imprimer ou à sauvegarder au format .pdf par exemple.
            // et oui ... valable pour n'importe quel type de fiche ...
               ImprimeGrille(TEnfant_Net(MDIChildren[0]).Grille, Titre, Type_Enfant, Oui_Ascenseur);
             end;
         Application.ProcessMessages;
     
         If not Desactivationdescommandes1.Checked  // Mise à jour du journal de bord.
           then EcrireFichierLog('-> demande d''impression d''un document.', 2);
      end;
     
      If not Consulte then  // Volet de saisies.
        begin
          If LigneStringGrid = 1 then
            begin
              StatusBar1.SimpleText := ' Aucune opération n''a été effectuée.';
              Exit;
            end;
          If PrintDialog1.Execute then If Printer.Aborted = True
            then Exit
            else
              begin
                for i := 0 to StringGrid1.ColCount -1  do  // réaligne les colonnes.
                    StringGrid1.ColWidths[i] := Largeur_Colonne[Numero_Colonne[i]];
                StringGrid1MouseUp(Sender, (mbLeft),[],0, 0); // formate les contenus.
                Printer.Orientation := poLandscape;
                Titre := 'Liste des opérations saisies le '
                         + FormatDateTime('dddd d mmmm yyyy"."', Now);
                Printer.Title := Copy(Titre, 1, Length(Titre) -1) + ' - ' + Date_Impression;
                ImprimeGrille(StringGrid1, Titre, 2, UpDownStrGrid, LigneStringGrid);
              end;
          Application.ProcessMessages;
    Dans le volet de saisie, pas de problème, voici un exemple :
    Date_Impression := 2015 05 13 14 35 52
    Liste des opérations saisies le lundi 6 juillet 2015 - 2015 05 13 14 35 52.pdf

    Jusqu'à présent voilà un exemple de ce que cela donnait dans le volet consultations :
    Date_Impression := 2015 05 13 14 35 52

    titre du document :
    Titre := BIDONNE code Isin FR0000000001 sur le Compte P.E.A. // donc il n'est pas modifié initialement.
    Comme c'est Type_Enfant of 1 on complète avec ' - PR Fiscal - ' + Date_Impression

    Voici par exemple ce que cela donnait quelle que soit la version que j'utilisais sous Windows :
    BIDONNE code Isin FR0000000001 sur le Compte P.E.A. - PR Fiscal - 2015 05 13 14 35 52.pdf

    Et voici ce que cela me donne avec Windows 8.1 :
    BIDONNE code Isin FR0000000001 sur le Compte P.E.A.pdf

    Tout se passe comme si Printer.Title prenait la valeur Titre et ignorait Titre_Imprimante

    Quelqu'un a-t-il une idée de ce qui se passe SVP ?

  2. #2
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    En fait Delphi n'y est évidemment pour rien après différentes formulations, le problème était récurrent.

    Le problème c'est Windows 8.1 qui installe les applications automatiquement dans C:\Program Files (x86)\ et pour PDFCreator-1_6_0_setup le problème fait que comme Windows 8.1 travaille "parfois" dans des fichiers séparés, le comportement de l'application change et influe donc sur le comportement de PDFCreator.

    par exemple l'appli installée traditionnellement avec InnoSetUP -> Problème au fonctionnement de l'.exe
    l'application développée dans son fichier d'élaboration dans XP et copiée en brut avec tout le dossier -> pas de problème, mais si l'on crée un nouveau dossier et que l'on y copie l'exe de l'appli -> problème à nouveau.

    La solution :
    Il suffit d'installer PDFCreator non pas en automatique mais en personnalisée en choisissant C:\Program\ qui est en fait l'ancien C:\Program Files\ tel qu'il apparaît dans une installation alors que l'on a choisi C:\Program\

    Si quelqu'un a des précisions supplémentaire... je suis évidemment preneur.

  3. #3
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par F@bien.fd Voir le message
    Le problème c'est Windows 8.1 qui installe les applications automatiquement dans C:\Program Files (x86)\ et pour PDFCreator-1_6_0_setup le problème fait que comme Windows 8.1 travaille "parfois" dans des fichiers séparés, le comportement de l'application change et influe donc sur le comportement de PDFCreator
    C'est effectivement du à Windows surtout s'il s'agit d'un 64 bits (ce que j'ai déduit par le nom du répertoire) et au niveau de l'UAC déduit du "parfois"
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  4. #4
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,


    C'est effectivement du à Windows surtout s'il s'agit d'un 64 bits (ce que j'ai déduit par le nom du répertoire) et au niveau de l'UAC déduit du "parfois"
    Et oui cela a été une surprise pour moi car en effet une de mes applications construit et ouvre de multiples fichiers ".db" temporaires mais surtout définitifs. Et accidentellement j'ai voulu consulter un des fichiers récemment créé dans "C:\Program Files\F@bien\NinaPerf\NinaPerf.exe", et... surprise l'appli utilise bien ce fichier que l'on... ne trouve pas dans le dossier alors que le fichier général semble bien y être. Donc en cherchant un peu je me suis aperçu que le fichier général est dupliqué dans C:\Users\Fabien\Local Settings\VirtualStore\Program Files\F@bien\NinaPerf et que tous les autres fichiers s'y trouvent... aussi, ils semblent donc bien être traités dans des fichiers séparés.

    Si vous voulez utiliser cette application pour me confirmer mes observations elle est libre sur NinaPerf

  5. #5
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 031
    Points : 40 930
    Points
    40 930
    Billets dans le blog
    62
    Par défaut
    Re,
    Et accidentellement j'ai voulu consulter un des fichiers récemment créé dans "C:\Program Files\F@bien\NinaPerf\NinaPerf.exe",
    c'est une erreur de votre part que de mettre les fichiers de données dans le répertoire des programmes, depuis Windows Vista (apparition de l'UAC donc) les données doivent être séparées du programme (application data) . De plus l'arrivée de l'OS 64 bits complique encore les choses par convention les programmes 32 bits doivent se placer dans Program Files [x86] à contrario de ceux en 64 bits Program Files il est encore plus difficile de comprendre la logique de Microsoft lorsqu'elle place les Dll 32 bits dans SYSWOW64 et les 64 dans system

    faites une recherche sur les répertoires spéciaux de windows pour plus d'information
    par exemple ce post
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  6. #6
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Mon application une fois installée peut être dupliquée autant de fois que l'on veut, mais les sessions ne peuvent être simultanées sur la même machine. (délibéré car libre mais je souhaite qu'un professionnel par exemple ne puisse l'utiliser qu'à titre personnel)
    Donc à son origine en W98 chaque utilisateur avait son dossier avec l'appli, l'aide, son fichier portefeuille et les différents titres qui le composaient.
    Ensuite j'ai suivi les évolutions et en changeant d'OS, j'ai tout simplement importé mes propres dossiers que je sauvegarde régulièrement sur un DD externe. Tout a bien fonctionné avec XP, Vista, Seven et même... 8.1. En effet y compris avec 8.1 les nouveau fichiers sont bien créés dans le dossier de l'application respective, mais il faut dire que mes dossiers sont sur un second DD. Et si je viens pour m'amuser à en faire une copie ça fonctionne comme avant, c'est à dire très bien.
    C'est le fichier installé avec InnoSetup (installation indispensable pour que mes duplications puissent fonctionner) qui m'a fait prendre conscience du problème et surtout l'impression virtuelle avec PDFCreator des fiches virtuelles dont les libellés de sauvegarde étaient parfois tronquées qui m'a posé problème. Donc pour moi c'est le dossier test lorsque je... teste un module supplémentaire sur W8.
    Concernant l'individu lambda qui l'utilisera sur W8, que les fichiers .db soit ou non dans son répertoire ne changera rien, car c'est transparent et cela fonctionne très bien, il n'a pas à aller fouiller dans les config et c'est très bien comme cela.
    Donc je ne vais pas refondre ce qui fonctionne très bien sur toutes les plateformes, mais je conseillerai sur le lieu d'installation de PDFCreator et sur la version à utiliser téléchargeable à partir du site dédié.

    Merci pour tous les conseils et surtout le suivi.

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5 685
    Points : 13 102
    Points
    13 102
    Par défaut
    Citation Envoyé par F@bien.fd Voir le message
    Concernant l'individu lambda qui l'utilise, que les fichiers .db soit ou non dans sont répertoire ne change rien, car c'est transparent et cela fonctionne très bien.
    Ça fonctionne parce que ton application est virtualisée du fait de l’absence de manifest et que tu as accès (inconsciemment) en écriture sur ce répertoire virtualisé.

    Citation Envoyé par F@bien.fd Voir le message
    je conseillerai sur le lieu d'installation de PDFCreator...
    Dommage que deux petits problèmes facilement gérables (ajouter un manifest et choisir un répertoire utilisateur) oblige l'utilisateur final à revoir l'installation d'autres programmes.

  8. #8
    Membre régulier
    Homme Profil pro
    Enseignant
    Inscrit en
    Octobre 2004
    Messages
    264
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 264
    Points : 104
    Points
    104
    Par défaut
    Citation Envoyé par Andnotor Voir le message
    Ça fonctionne parce que ton application est virtualisée du fait de l’absence de manifest et que tu as accès (inconsciemment) en écriture sur ce répertoire virtualisé.
    A une époque sur le forum Delphi, quelqu'un m'avait branché sur le manifest je ne sais plus à quel sujet. Je ne connaissais pas, j'ai cherché, j'ai essayé, je n'ai pas réussi vraisemblablement par manques de compétences car je suis amateur autodidacte en info, tout appris par moi-même ou presque depuis le LM sur apple en 80 et ainsi de suite...). Donc j'ai laissé tombé du fait que tout fonctionnait à merveille.

    Citation Envoyé par Andnotor Voir le message
    Dommage que deux petits problèmes facilement gérables (ajouter un manifest et choisir un répertoire utilisateur) oblige l'utilisateur final à revoir l'installation d'autres programmes.
    Concernant le répertoire utilisateur, si j'ai dix utilisateurs, soit ils sont importés et tout se passe dans le (ou les) répertoire(s) d'importation, je viens d'essayer, ça crée, ça modifie, ça efface, ça envoie à la corbeille, etc... sans soucis.
    Si ils sont installés puis copiés à partir de l'installation alors là, les répertoire se créent disons... tout seuls... ailleurs en transparence.

    De plus pourquoi je ne suis pas tenté par le manifest ? D'abord comme je l'ai déjà écrit je n'arrive pas à en trouver les subtilités (bien que je ne demande pas mieux que de les saisir).
    Ensuite je fais des modifs régulières de l'application avec parfois de nouveaux modules et les mises à jour sont rapidement mises en ligne.
    L'installation a été téléchargée depuis 2 ans plus de 3400 fois et la MAJ plus de 1500 fois. Si je commence à tout chambouler c'est là où il va y avoir des soucis.

    En fait les problèmes sont apparus aves PDFCreator... qui me donnait des poids de... 0 bit (je viens de m'en apercevoir sur les impressions virtuelles vides) et surtout les libellées édulcorés. C'est ce dernier élément qui m'a fait créer cette file.
    Quand je sauvegarde un fichier plusieurs fois, ils peuvent porter le même nom et donc à chaque fois se pose le problème on garde le précédent ou on l'écrase ?...
    Moi j'ai pris l'option de ne pas avoir à le demander en complétant le libellé avec la date et l'heure de l'impression virtuelle.
    Exemple :
    supposons que je veuille conserver une trace des opérations que je viens de saisir aujourd'hui le 09/07/2015 vers 14h
    cela me donnera par exemple :
    Liste des opérations saisies le lundi 7 juillet 2015 - 2015 07 09 14 03 52.pdf
    si en fin de journée j'ai de nouvelles opérations avant la clôture de la bourse, je vais faire mes saisies après bourse et sauvegarder avec un libellé du type
    Liste des opérations saisies le lundi 7 juillet 2015 - 2015 07 09 18 38 04.pdf

    Du coup aucun risque d'écrasement.

    Que me donnait PDFCreator ?... Liste des opérations saisies le lundi 7 juillet 2015.pdf dans les deux cas.

    En fait je n'aurai pas à conseiller où l'installer car ce qui s'est passé c'est que PDF Architect3 m'a mis le bazar en l'installant par dessus PDF Architect...
    Je les ai tous désinstallés y compris PDFCreator et refait une installation propres et cette fois tout est rentré dans l'ordre.

    Je suis toutefois preneur d'infos précises sur le manifest. Merci pour tous les conseils.

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

Discussions similaires

  1. [Home Server] Windows 2012 server+Printer Services
    Par mouss77 dans le forum Windows Serveur
    Réponses: 4
    Dernier message: 12/01/2014, 23h45
  2. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  3. Programme de boot qui passe la main à Windows
    Par Bob dans le forum Assembleur
    Réponses: 7
    Dernier message: 25/11/2002, 03h08
  4. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45
  5. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 10h59

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