dan93190
Messages postés33Date d'inscriptionmercredi 4 juillet 2007StatutMembreDernière intervention19 août 2008
-
24 juin 2008 à 14:07
dan93190
Messages postés33Date d'inscriptionmercredi 4 juillet 2007StatutMembreDernière intervention19 août 2008
-
25 juin 2008 à 10:44
Slt à tous,
C'est la première fois que je poste sur un forum, je vais essayer d'être le plus clair possible
J'ai besoin de développer une petite application qui permette à l'utilisateur de "dessiner" un logigramme (une sorte de diagramme avec des questions et des réponses "oui/non", afin de guider l'utilisateur vers la réponse à un problème).
J'avais donc pensé à créer une picturebox puis ensuite l'utilisateur y ajoutait dynamiquement des labels, des flêches, des rectangles...
Pour créer ces éléments, il clique sur un bouton, l'élément apparaît puis il le place où il le désire. De ce côté là, pas de problème.
Seulement, je voulais également enregistrer le logigramme (sous forme d'image par exemple) car il doit être consultable par d'autres personnes. Et lorsque j'essaie d'enregistrer la picturebox avec Call SavePicture(Picture2.Picture, App.Path & "/test.jpg"), il me sauvegarde:
- la ligne que j'ai faite avec Picture2.Line (1000, 1000)-(5000, 5000)
- le texte que j'ai écrit avec Picture2.Print "salut"
mais il ne me sauvegarde pas:
- le label que j'ai créé avec Load Label1(1)
Set Label1(1).Container = Picture2
Label1(1).Caption = "test"
Label1(1).Visible = True
C'est assez problématique car le texte peut être lié à un évènement (comme l'ouverture d'un document Word), ce que je ne peut faire avec Picture2.Print. Et je suppose que ce sera la même chose pour l'ajout d'un rectangle ou d'un losange
La seule méthode que j'ai trouvée, c'est de tout stocké dans Access (coordonnées, taille, texte, couleur,...) quand j'enregistre et tout charger à l'ouverture du logigramme, mais c'est pas terrible et j'aurais aimé avoir un document fixe.
Avez-vous une solution à me proposer, je suis désespéré.
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202171 24 juin 2008 à 16:34
ton logigramme doit etre sauvegardé de manière a pouvoir etre rechargé, modifié, dynamique, etc...
exclu, donc, de l'enregistrer en JPG.
base Access, Fichier contenant des Records, INI, XML, Excel, ....
peu importe, a toi de voir.
Par contre, pour que ton appli puisse être utile, il faut pouvoir exporter des images JPG ou autres (Attention, SavePicture génère des BMP, meme s'ils se nomment JPG^^)
Elle devrait également pouvoir imprimer...
et là, c'est dans un deuxième temps... même si tu joues dans un pictureBox (ce qui est une bonne chose), il te faudra, pour l'export, redessiner le tout...
possible en faisant une capture d'ecran... a voir (je parles de GetDCEx, BitBlt...)
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202171 25 juin 2008 à 09:25
Permet de faire une capture de Picture1 (et de ses enfants) et de placer l'image dans un second PictureBox
a toi d'arranger la chose, ensuite, pour en sortir ton image BMP
Private Declare Function BitBlt Lib "gdi32.dll" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDc As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDCEx Lib "user32.dll" (ByVal hwnd As Long, ByVal hrgnclip As Long, ByVal fdwOptions As Long) As Long
Private Declare Function ReleaseDC Lib "user32.dll" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Const DCX_EXCLUDERGN As Long = &H40&
Private Const DCX_WINDOW As Long = &H1&
Private Sub Form_Click()
Dim hSrcDc As Long
With Picture1
hSrcDc = GetDCEx(.hwnd, 0, DCX_EXCLUDERGN Or DCX_WINDOW)
dan93190
Messages postés33Date d'inscriptionmercredi 4 juillet 2007StatutMembreDernière intervention19 août 2008 25 juin 2008 à 08:34
Merci de m'avoir répondu. Je vais passer par Access.
En fait le JPG (ou BMP ^^) c'était juste pour que les utilisateurs visualisent le résultat final et garder tous les logigrammes dans un dossier.
Donc si j'ai bien compris, pour faire ça, je suis obligé de passer par une capture d'écran?
J'y avais déjà pensé et j'avais regarder les méthodes BitBlt et StretchBlt mais j'avais pas compris grand chose,lol!!
Est-ce que tu peux me dire (en trois mots) le rôle des méthodes GetDCEx,BitBlt et StretchBlt.
(Je suis au taf et je n'ai pas accès à internet, juste vbfrance.com)
Merci beaucoup
Vous n’avez pas trouvé la réponse que vous recherchez ?
dan93190
Messages postés33Date d'inscriptionmercredi 4 juillet 2007StatutMembreDernière intervention19 août 2008 25 juin 2008 à 10:27
En fait j'ai parlé un petit peu trop vite:
j'ai copié ton code qui marche nickel
j'ai ajouté un label à picture1 et après j'essai de l'enregistrer sous forme d'image. Seulement, le label apparait bien dans picture2 mais pas dans l'image.
Je pensais que le code, que tu m'a donné faisait, une capture d'écran, donc logiquement le label devrait y être !!