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] Lister les résolution d'une imprimante


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut [D7] Lister les résolution d'une imprimante
    Bonjour à tous,

    J'arrive à charger les imprimantes installées sur le poste dans une combo de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      for i:=0 to Printer.Printers.Count-1 do begin
        cbImp.Items.Add(Printer.Printers.Strings[i]);
      end;
    Seulement, j'aimerais (une fois que l'utilisateur a choisit son imprimante dans la liste), lister toutes les résolutions possibles de cette imprimante.

    Est-ce possible ? (et si oui, comment ).

    Merci d'avance.

  2. #2
    Membre Expert Avatar de philnext
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 553
    Par défaut
    Regarde peut être WinSpool.DeviceCapabilities il me semble que ça fournit les résolutions.

  3. #3
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour philnext,

    J'arrivais bien à récupérer la définition courante avec GetDeviceCaps(), mais c'est tout. Je supposait que la réponse tournerait autour.

    Il y a bien un printer.Capabilities, mais je ne sais pas comment on s'en sert.

    Quand à WinSpool, je ne connaissait pas du tout, il faut un uses spécial ?
    (je ne suis plus devant mon PC).

    Merci.

  4. #4
    Expert confirmé
    Avatar de anapurna
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par défaut
    salut


    regarde ici

    @+ Phil

  5. #5
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    Bonjour anapurna,

    Pas mal ton code, il retourne pas mal de chose... Mais pas toutes les résolutions que l'imprimante sait faire.

    __________________________
    philnext,

    J'ai réussi à récupérer l'alimentation papier de l'imprimante avec WinSpool:
    http://www.swissdelphicenter.ch/torr...ode.php?id=796
    Mais c'est un objet qui contient à boire et a manger... Je n'ai pas réussi à trouver s'il pouvait récuperer ce que je veux.

    (quand à printer.Capabilities, c'est juste pour l'orientation et ce genre de chose... Mauvaise piste)

  6. #6
    Membre éprouvé Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 065
    Par défaut
    J'ai trouvé une solution:
    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
    type 
    TPrinterResolution = record 
    resx, resY: Longint; 
    end; 
    TPrinterResolutions = array of TPrinterResolution; 
     
    function GetPrinterResolutions: TPrinterResolutions; 
    var 
    numResolutions: Integer; 
    Device, Driver, Port: array[0..255] of Char; 
    hDevMode: THandle; 
    begin 
    Printer.GetPrinter(Device, Driver, Port, hDevmode); 
    numResolutions := WinSpool.DeviceCapabilities(Device, Port, DC_ENUMRESOLUTIONS, nil, 
    nil); 
    SetLength(Result, numResolutions); 
    if numResolutions > 0 then 
    begin 
    WinSpool.DeviceCapabilities(Device, Port, DC_ENUMRESOLUTIONS, @Result[0], nil); 
    end; 
    end; 
     
    procedure TForm1.FormCreate(Sender: TObject); 
    var 
    resarray: TPrinterResolutions; 
    i: Integer; 
    begin 
    resArray := GetPrinterResolutions; 
    for i := 0 to Length(resarray) - 1 do 
    begin 
    {create a radiobutton for each resolution, pack the actual resolution into 
    its Tag property} 
    radiogroup1.Items.add(format('%d x %d dpi', [resarray[i].resX, 
    resarray[i].resY])); 
    radiogroup1.Controls[i].Tag := MakeLong(LoWord(resarray[i].resX), 
    LoWord(resarray[i].resY)); 
    end; 
    if radiogroup1.items.count > 0 then 
    begin 
    radiogroup1.itemindex := 0; 
    radiogroup1.clientheight := radiogroup1.ControlCount * 
    radiogroup1.controls[0].height; 
    end 
    else 
    button1.enabled := false; 
    end; 
     
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    Device, Driver, Port: array[0..255] of Char; 
    hDevMode: THandle; 
    pDevMode: PDeviceMode; 
    dw: DWORD; 
    begin 
    with radiogroup1 do 
    dw := Controls[itemindex].Tag; 
    {test print using selected resolution} 
    Printer.GetPrinter(Device, Driver, Port, hDevmode); 
    {force reset of devmode} 
    Printer.SetPrinter(Device, Driver, Port, 0); 
    Printer.GetPrinter(Device, Driver, Port, hDevmode); 
    if hDevmode <> 0 then 
    begin 
    pDevmode := GlobalLock(hDevmode); 
    if pDevmode <> nil then 
    try 
    pDevMode^.dmPrintQuality := LoWord(dw); 
    pDevmode^.dmYResolution := HiWord(dw); 
    pDevmode^.dmFields := pDevmode^.dmFields or DM_PRINTQUALITY or DM_YRESOLUTION; 
    finally 
    GlobalUnlock(hDevmode); 
    end; 
    Printer.beginDoc; 
    try 
    with Printer.Canvas.Font do 
    begin 
    Name := 'Arial'; 
    Size := 24; 
    end; 
    {print test string 1 inch from margins} 
    Printer.Canvas.textOut(LoWord(dw), HiWord(dw), 'This is a test'); 
    finally 
    Printer.endDoc; 
    end; 
    end; 
    end;
    C'est WinSpool.DeviceCapabilities qui m'a mis sur la voie.
    J'ai vu qu'il y avait une constante nommée: DC_ENUMRESOLUTIONS
    Un p'tit coup d'google et voilou !

    Merci à vous.

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

Discussions similaires

  1. [Debutant] Lister les tables d'une base de données
    Par Konrad Florczak dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/07/2005, 16h24
  2. Lister les tables d'une base
    Par pg_user dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/05/2005, 10h41
  3. [reseaux] Lister les processus sur une machine donnée
    Par BEAUJAULT dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 29/07/2004, 15h55
  4. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46
  5. Lister les tables d'une Base
    Par YanK dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 08/10/2003, 10h40

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