Powerbuilder pour les completement Geeks !

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 18-11-2009 16:34:27

marty  
Membre
Date d'inscription: 02-07-2008
Messages: 19
Pépites: 1,252,440
Banque: 0

[RESOLU] Insérer un blob dans un datastore

Salut,

Je m'y connais pas super bien en PB et je voudrais un coup de main pour mon problème:
En gros, j'aimerais bien imprimer une capture d'écran d'une fenêtre PB... Jusque-là rien de bien compliqué.

Je me suis basé sur un des posts du forum (que je n'arrive pas à retrouver) et qui conseillais d'utiliser cette librairie pour récupérer une capture d'écran sous forme de blob en passant le handle de la window que je veux imprimer (fonction of_capture()).

Code: pb

Blob lblb_bitmap
lblb_bitmap = inv_bitmap.of_Capture(lul_hWnd, lul_xpos - 6, &
     lul_ypos - 30 , lul_width + 2, lul_height , True)

Donc, ce que je faisais à la base c'était d'écrire ce blob dans un fichier BMP en utilisant une autre fonction de cette librairie (of_writeblob())

Code: pb

inv_bitmap.of_WriteBlob(ls_filename, lblb_bitmap)

Et enfin je crée un datastore qui contient un picture control qui pointe vers ce fichier et j'imprime ce datastore.

Code: pb

lds_data = CREATE dataStore
lds_data.dataobject = 'd_print_window'
lds_data.setTransObject (SQLCA)
lds_data.Retrieve()
lds_data.Print()
destroy lds_data

Tout ça marche plutôt pas mal (au cas ou ça intéresse quelqu'un)...
MAIS ce que je voudrais arriver à faire, c'est charger le blob de l'image directement dans le datastore sans passer par la création d'un fichier BMP.

Si vous voulez savoir pourquoi, il arrive qu'on utilise des imprimantes virtuelles (du type office document image writer) qui changent le current directory et résultat, au moment du print le path change et on perd le fichier qui vient d'être créé et ça génère une page blanche.

DONC je voudrais savoir si c'est possible d'insérer le blob récupéré par of_capture() directement dans le picture control du datastore. (Je passe par un datastore pour l'impression parce que ça doit être imprimé en landscape et que c'est le plus facile pour ça.)
Où en utilisant un autre control. J'ai un peu chipoté avec les controls OLE Object et OLE Database Blob mais je connais pas la syntaxe exacte et je sais même pas si c'est vraiment possible...

Un truc du style:

Code: pb

lds_data.object.pic_1 = lblb_bitmap

ou

Code: pb

lds_data.object.blob_1.objectdata = lblb_bitmap

J'espère que tout ça est assez clair...
Je travaille sous PB 11.1 et Windows XP SP2.
Quelqu'un sait m'aider?

Dernière modification par marty (19-11-2009 13:01:24)

Hors ligne

 

#2 19-11-2009 08:29:35

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Insérer un blob dans un datastore

Bonjour,

J'ai travaillé sur ce problème il y a maintenant quelques années pour implémenter une telle solution dans notre application.

Il n'est pas possible d'afficher une image au format natif dans une datawindow en provenance d'un blob. Au niveau de l'affichage écran, on peut toujours tricher en superposant sur la datawindow un "picture control" qui lui dispose de la méthode SetPicture pour manipuler les blobs. Dans la mesure où tu veux seulement imprimer une image, la méthode print du "picture control" peut convenir dans ton cas.

On peut effectivement afficher une image avec un control OLE dans une datawindow, mais il faut avoir préalablement sauvegarder l'image au format OLE dans une colonne de type blob. Le principal inconvénient est de perdre le format natif de l'image.

Sinon, la fonction PrintScreen n'est pas adapté à ta situation :

Description

Prints the screen image as part of a print job.

Syntax

PrintScreen ( printjobnumber, x, y {, width, height } )

Hors ligne

 

#3 19-11-2009 09:42:06

marty  
Membre
Date d'inscription: 02-07-2008
Messages: 19
Pépites: 1,252,440
Banque: 0

Re: [RESOLU] Insérer un blob dans un datastore

merci pour ta réponse.
Je vais tenter le coup en créant un picture control et en utilisant la methode setPicture().
Seulement est-il possible de l'imprimer en landscape? (sans devoir récupérer et modifier la config de l'imprimante)

Sinon, j'étais parti sur une autre piste qui m'ammène à un autre problème:
Je suis reparti en créant un fichier BMP de la capture d'écran mais au lieu de le stocker dans le current directory de l'application, je récupère la variable d'environnement TEMP et je stocke le fichier dedans.
Ensuite je modifie le path du picture control de la datawindow

Code: pb

lds_data.modify('bitmap_pic.filename="' + ls_temp_path + "\" + ls_filename + '"' + "'")


MAIS comment je fais si le répertoire TEMP est du style :
C:\DOCU~1\user\LOCA~1\temp\ pour ne pas qu'il considère les ~ comme des caractères d'échappement?

Quelqu'un aurait une idée d'un algorithme qui cherche les caractères d'échappement et rajoute un 2ème ~ devant?
Ou alors existe-t-il un caractère qui désactive tous les caractères d'échappement d'une string (i.e.: @"\blablabla" en C#)

Dernière modification par marty (19-11-2009 09:49:11)

Hors ligne

 

#4 19-11-2009 13:01:04

marty  
Membre
Date d'inscription: 02-07-2008
Messages: 19
Pépites: 1,252,440
Banque: 0

Re: [RESOLU] Insérer un blob dans un datastore

Laissez tomber la dernière question, j'avais un peu de mal à comprendre le fonctionnement des ~.
En gros, ce que j'ai fait c'est donc de créer un fichier temporaire dans le répertoire correspondant à la variable d'environnement TEMP.
Je charge ce fichier dans un picture control d'une datastore et enfin j'imprime la datastore,
par contre, le path du fichier doit être modifié pour changer les ~ en ~~ avant de charger le fichier dans la datastore.

Hors ligne

 

#5 06-05-2010 16:13:06

mial  
White & The Farmerz Gang
Lieu: Nancy
Date d'inscription: 09-02-2007
Messages: 113
Pépites: 4,366
Banque: 18,191,568,319,324

Re: [RESOLU] Insérer un blob dans un datastore

On peut effectivement afficher une image avec un control OLE dans une datawindow, mais il faut avoir préalablement sauvegarder l'image au format OLE dans une colonne de type blob. Le principal inconvénient est de perdre le format natif de l'image.

Bonjour,

Je me permets de remonter le topique concernant cette citation.

Je cherche a afficher dans un rapport INFOMAKER une image BMP stockée dans un champs de type BLOB d'une base SQL Server ou Oracle.

Je n'y arrive pas, apres quelques recherches il semble qu'il faille sauvegarder l'image sur disque pour ensuite l'afficher dans une Picture.

Quelqu'un a t il déjà réussi?

Qu'est ce qu'une image au format OLE? Le BMP n'est pas du OLE par défaut?

Merci d'avance pour vos explications.

Hors ligne

 

#6 06-05-2010 18:13:15

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: [RESOLU] Insérer un blob dans un datastore

Bonsoir, désolé de passer en mode , mais dans ce genre de cas, merci d'ouvrir un nouveau sujet en mentionnant éventuellement un lien sur un autre sujet similaire.


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22