# Sources PureBasicConsultez toutes les sources

Nombre d'auteurs : 41, nombre de sources : 88, dernière mise à jour : 13 août 2011

Sommaire→Linux

- Boîte de dialogue imprimante avec gtk

Version hors-ligne
Boîte de dialogue imprimante avec gtk
Sélectionnez

    ;http://www.purebasic.fr/english/viewtopic.php?t=29904
    ; ---------------------------------------------------------------------------------------
    ; using the GTK print dialog
    ; 2007 walker
    ; not fully functional yet but shows how to use this dialog
    ; BUT with a working preview ;-)
    ; ---------------------------------------------------------------------------------------
    ;---------------- Preparations ---------------------------------------------------
    ;import needed functions
    ImportC "/usr/lib/libgtk-x11-2.0.so"
      gtk_print_operation_new()
      gtk_print_operation_run(*op, action, *parent, *error);the print dialog
      gtk_print_settings_new()
      gtk_print_operation_set_print_settings(*print,*settings)
      gtk_print_context_create_pango_layout(*context)
      pango_layout_set_text(layout,txt.p-utf8,length)
      pango_font_description_from_string(font.p-utf8)
      pango_font_description_free(desc)
      pango_layout_set_font_description(layout,desc)
      cairo_move_to(cr,x,y)
      pango_cairo_show_layout(cr,layout)
      gtk_print_context_get_cairo_context(context)
      gtk_print_operation_set_n_pages(*op,n_pages)
      gtk_print_operation_set_unit(*op,unit)
      gtk_print_operation_get_status_string (*op); a (translated) string
      gtk_print_operation_get_status (*op);the numer enumerated below
      gtk_print_operation_is_finished (*op);returns true or false
    EndImport

    ;print actions
    Enumeration
      #GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG
      #GTK_PRINT_OPERATION_ACTION_PRINT
      #GTK_PRINT_OPERATION_ACTION_PREVIEW
        #GTK_PRINT_OPERATION_ACTION_EXPORT
    EndEnumeration
    ;return values from printdialog
    Enumeration
      #GTK_PRINT_OPERATION_RESULT_ERROR
      #GTK_PRINT_OPERATION_RESULT_APPLY
      #GTK_PRINT_OPERATION_RESULT_CANCEL
      #GTK_PRINT_OPERATION_RESULT_IN_PROGRESS
    EndEnumeration
    ;status of printing
    Enumeration
      #GTK_PRINT_STATUS_INITIAL
      #GTK_PRINT_STATUS_PREPARING
      #GTK_PRINT_STATUS_GENERATING_DATA
      #GTK_PRINT_STATUS_SENDING_DATA
      #GTK_PRINT_STATUS_PENDING
      #GTK_PRINT_STATUS_PENDING_ISSUE
      #GTK_PRINT_STATUS_PRINTING
      #GTK_PRINT_STATUS_FINISHED
      #GTK_PRINT_STATUS_FINISHED_ABORTED
    EndEnumeration
    ;layout units
    Enumeration
      #GTK_UNIT_PIXEL
      #GTK_UNIT_POINTS
      #GTK_UNIT_INCH
      #GTK_UNIT_MM
    EndEnumeration

    ProcedureCDLL begin_print(*op,context, user_data)
    ;this procedure is called before rendering the pages...

    ;set number of pages.. ESSENTIAL!!!! never forget this! (or you'll wait forever)
    gtk_print_operation_set_n_pages(*op,1);

    EndProcedure

    ProcedureCDLL  draw_page(*op,context,page_nr,user_data)
    ;this Procedure is called for each page to print.... so a fixed text like this example isn't a good idea
    gtk_print_operation_set_unit (*op, #GTK_UNIT_MM);
    cr= gtk_print_context_get_cairo_context(context)
    layout = gtk_print_context_create_pango_layout (context);
    pango_layout_set_text (layout, "Hello World!", -1);
    desc = pango_font_description_from_string ("sans 28");
    pango_layout_set_font_description (layout, desc);
    pango_font_description_free (desc);
    pango_cairo_show_layout (cr, layout)
    g_object_unref_(layout)

    EndProcedure

    ProcedureCDLL  print_preview(*op,*preview, *context, *parent, user_data)
    ;for your own preview routine...

    EndProcedure

    ProcedureCDLL end_print(*op, *context, user_data)
    ;if printig is finished, you can add code here for some cleanups etc...

    EndProcedure

    ;-------------------- DEMO -------------------------
    OpenWindow(0,0,0,400,400,"printtest",#PB_Window_SystemMenu)
    CreateGadgetList(WindowID(0))
    ButtonGadget(0,10,50,100,30,"Print")
    CloseGadgetList()

    Repeat
    event=WaitWindowEvent()

        If event=#PB_Event_Gadget
            If EventGadget()=0
                ;print button
                ;create a new printoperation
                print=gtk_print_operation_new()
                ;connect teh actions to a procedure
                g_signal_connect_(print, "begin-print", @begin_print(), user_data);
                g_signal_connect_(print, "draw-page", @draw_page(), user_data);
                ;If you activate the following line, the built in preview is DISABLED
                ; g_signal_connect_(print, "preview", @print_preview(), d);
                g_signal_connect_(print, "end-print", @end_print(), user_data);
                ;finally calling the GTK+ printrequester
                res=gtk_print_operation_run(print,#GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG,WindowID(0),*error)
                ;If res returns  #GTK_PRINT_OPERATION_RESULT_CANCEL the user had clicked on cancel - else one of the callbacks is called
            EndIf
        EndIf

    Until event=#PB_Event_CloseWindow

Créé le 20 février 2008 par Walker
Version hors-ligne

Les sources présentés sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une œuvre intellectuelle protégée par les droits d'auteurs. Copyright ©2008 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.