Copie en image d'un gadget.
Copie en image d'un gadget.
Bonjour,
Je voudrais savoir si apres avoir creer un gadget il serait possible de copier en memoire l'image de ce gadget et tout cela en pure code PureBasic?
Cordialement,
GallyHC
Je voudrais savoir si apres avoir creer un gadget il serait possible de copier en memoire l'image de ce gadget et tout cela en pure code PureBasic?
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Copie en image d'un gadget.
salut GallyHC,
qu'entend tu par copier l'image ?
@++
qu'entend tu par copier l'image ?
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Copie en image d'un gadget.
en fait, est'il possible de faire une fonction qui ferait la capture en memoire d'un gadget?
cordialement,
GallyHC
cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Copie en image d'un gadget.
Bonjour
Que veux tu dire par copier ou capturer l'image d'un gadget?? Je n'ai pas saisi ta question et puis je ne vois pas pourquoi car définir un gadget signifie déjà qu'il est en mémoire pendant le chargement du programme source. Peut être que tu veux copier le type, le nom, l'emplacement et la forme de ce gadget??? C'est ça ta question??
Que veux tu dire par copier ou capturer l'image d'un gadget?? Je n'ai pas saisi ta question et puis je ne vois pas pourquoi car définir un gadget signifie déjà qu'il est en mémoire pendant le chargement du programme source. Peut être que tu veux copier le type, le nom, l'emplacement et la forme de ce gadget??? C'est ça ta question??
Mekkisoft Editeur de logiciels et sites web
Re: Copie en image d'un gadget.
Un gadget sur Windows est une OCX (donc du graphique). Je voudrais savoir si un code pure PB, il est possible faire la capture de l'image du gadget et la mettre en memoire. En pure PB pour que ce soit multi-os.
Cordialement,
GallyHC
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Copie en image d'un gadget.
un code qui permet de créer des "gadgets" en tant qu'image.
Code : Tout sélectionner
; Hroudtwolf
; 2006. PB 4.00
If OpenWindow(0, 0,0, 300, 300, "DrawFrameControl", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
hdc.l=GetDC_(WindowID(0))
;>---Button--->
For x=0 To 2
framerect.RECT
framerect\left=10+(x*40)
framerect\top=10
framerect\right=25+(x*40)
framerect\bottom=25
DrawFrameControl_(hdc.l,@framerect,#DFC_BUTTON,x)
Next x
;<---Button---<
;>---Titlebar Buttons--->
For x=0 To 4
framerect.RECT
framerect\left=10+(x*40)
framerect\top=50
framerect\right=40+(x*40)
framerect\bottom=80
DrawFrameControl_(hdc.l,@framerect,#DFC_CAPTION,x)
Next x
;<---Titlebar Buttons---<
;>---Scroll Buttons--->
For x=0 To 3
framerect.RECT
framerect\left=10+(x*40)
framerect\top=90
framerect\right=40+(x*40)
framerect\bottom=120
DrawFrameControl_(hdc.l,@framerect,#DFC_SCROLL,x)
Next x
;<--Scroll Buttons---<
;>---Menü--->
For x=0 To 2
framerect.RECT
framerect\left=10+(x*40)
framerect\top=130
framerect\right=40+(x*40)
framerect\bottom=150
DrawFrameControl_(hdc.l,@framerect,#DFC_MENU,x)
Next x
;<--Menü---<
ReleaseDC_(WindowID(0),hdc.l)
Repeat:Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
End
; IDE Options = PureBasic 4.40 Beta 6 (Windows - x86)
; CursorPosition = 48
; FirstLine = 4
; Folding = -
; CompileSourceDirectory
Re: Copie en image d'un gadget.
code qui permet de capturer l'image de la fenêtre et les gadgets qui la composent
ces 2 codes ne sont pas portables, ils utilisent tout 2 des appels aux api de windows
si tu parviens à faire une capture d'écran portable tout OS, j'achète...
ces 2 codes ne sont pas portables, ils utilisent tout 2 des appels aux api de windows
si tu parviens à faire une capture d'écran portable tout OS, j'achète...
Code : Tout sélectionner
; fonctionne
Enumeration
#FEN_PRINCIPALE
#Gadget_button
#Gadget_string
#gadget_list
#Img_ZoneGraphique
#GDT_SCR_ZONE_DESSIN
#GDT_IMG_ZONE_DESSIN
EndEnumeration
Structure STRU_FENETRE
coord_X.w:coord_Y.w:Largeur.w:Hauteur.w
options.l
titre.s
Coord_X_Barre_chg_vue.w : Coord_Y_Barre_chg_vue.w
Largeur_Barre_chg_vue.w : Hauteur_Barre_chg_vue.w
Scr_Area_X.w:Scr_Area_Y.w:Scr_Area_Largeur.w:Scr_Area_Hauteur.w
Scr_Area_Largeur_Max.w : Scr_Area_Hauteur_Max.w
Scr_Area_deplacement.w
Scr_Area_options.l
EndStructure
Global INFO.STRU_FENETRE
Procedure.l capture_Gadget(PX.w,PY.w,PW.w,PH.w)
dm.DEVMODE ;structure for CreateDC()
srcDC.l
trgDC.l
BMPHandle.l
largeur_bordure_fenetre.w = GetSystemMetrics_(#SM_CXDLGFRAME)+GetSystemMetrics_(#SM_CXBORDER)
hauteur_bordure_fenetre.w = GetSystemMetrics_(#SM_CYDLGFRAME)+GetSystemMetrics_(#SM_CYMENUSIZE)+2*GetSystemMetrics_(#SM_CYBORDER)
srcDC = CreateDC_("DISPLAY", "", "", dm)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, PW, PH)
SelectObject_( trgDC, BMPHandle)
;BitBlt_( trgDC, 0, 0, PW, PH, srcDC, INFO\coord_X+largeur_bordure_fenetre+PX, INFO\coord_Y+PY+hauteur_bordure_fenetre, #SRCCOPY)
BitBlt_( trgDC, 0, 0, PW, PH, srcDC, largeur_bordure_fenetre+PX, PY+hauteur_bordure_fenetre, #SRCCOPY)
OpenClipboard_(#Null)
EmptyClipboard_()
SetClipboardData_(#CF_BITMAP , BMPHandle)
DeleteDC_( trgDC)
ReleaseDC_( BMPHandle, srcDC)
ciHwnd = GetClipboardData_(#CF_BITMAP)
If ciHwnd
GetObject_(ciHwnd, SizeOf(BITMAP), bm.BITMAP)
result.l = CreateImage(#PB_Any, PW, PH)
StartDrawing(ImageOutput(result))
DrawImage(ciHwnd, 0, 0)
StopDrawing()
EndIf
CloseClipboard_()
ProcedureReturn result
EndProcedure
Procedure.l capture_window(PX.w,PY.w,PW.w,PH.w)
dm.DEVMODE ;structure for CreateDC()
srcDC.l
trgDC.l
BMPHandle.l
largeur_bordure_fenetre.w = 2*GetSystemMetrics_(#SM_CXDLGFRAME)+2*GetSystemMetrics_(#SM_CXBORDER)
hauteur_bordure_fenetre.w = 2*GetSystemMetrics_(#SM_CYDLGFRAME)+3*GetSystemMetrics_(#SM_CYBORDER)+GetSystemMetrics_(#SM_CYMENUSIZE)
srcDC = CreateDC_("DISPLAY", "", "", dm)
trgDC = CreateCompatibleDC_(srcDC)
BMPHandle = CreateCompatibleBitmap_(srcDC, PW+largeur_bordure_fenetre, PH+hauteur_bordure_fenetre)
SelectObject_( trgDC, BMPHandle)
BitBlt_( trgDC, 0, 0, PW+largeur_bordure_fenetre, PH+hauteur_bordure_fenetre, srcDC, PX, PY, #SRCCOPY)
OpenClipboard_(#Null)
EmptyClipboard_()
SetClipboardData_(#CF_BITMAP , BMPHandle)
DeleteDC_( trgDC)
ReleaseDC_( BMPHandle, srcDC)
ciHwnd = GetClipboardData_(#CF_BITMAP)
If ciHwnd
GetObject_(ciHwnd, SizeOf(BITMAP), bm.BITMAP)
result.l = CreateImage(#PB_Any, PW+largeur_bordure_fenetre, PH+hauteur_bordure_fenetre)
StartDrawing(ImageOutput(result))
DrawImage(ciHwnd, 0, 0)
StopDrawing()
EndIf
CloseClipboard_()
ProcedureReturn result
EndProcedure
Procedure WindowCallback(WindowID, Message, lParam, wParam)
If Message = #WM_PAINT
StartDrawing(ImageOutput(WindowID))
DrawImage(ImageID(#Img_ZoneGraphique), 0, 0)
StopDrawing()
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure RedessineZoneGraphique()
couleur.w = $FF
If IsImage(#Img_ZoneGraphique)<>0
FreeImage(#Img_ZoneGraphique)
EndIf
If CreateImage(#Img_ZoneGraphique, INFO\Scr_Area_Largeur_Max,INFO\Scr_Area_Hauteur_Max)
StartDrawing(ImageOutput(#Img_ZoneGraphique))
Box(0,0,INFO\Scr_Area_Largeur_Max,INFO\Scr_Area_Hauteur_Max,RGB(128,128,128))
StopDrawing()
EndIf
EndProcedure
Procedure Draw_Window(PX.w,PY.w,Id_window.l)
StartDrawing(WindowOutput(#FEN_PRINCIPALE)) ; dessine l'image caturée...
DrawImage(ImageID(Id_window) , PX, PY)
StopDrawing()
EndProcedure
Procedure Draw_Gadget(PX.w,PY.w,Id_gadget.l)
StartDrawing(WindowOutput(#FEN_PRINCIPALE)) ; dessine l'image caturée...
DrawImage(ImageID(Id_gadget) , PX, PY)
StopDrawing()
EndProcedure
Procedure Open_FenetrePrincipale()
LB_quit.b = 0
LL_event.l = 0
INFO\coord_X = 100 : INFO\coord_Y = 100
INFO\Largeur = 400 : INFO\Hauteur = 400
INFO\options = #PB_Window_SystemMenu | #PB_Window_SizeGadget
INFO\titre = "RAD 0.1.5"
INFO\Scr_Area_X = 5 : INFO\Scr_Area_Y = 5
INFO\Scr_Area_Largeur = INFO\Largeur-INFO\Scr_Area_X : INFO\Scr_Area_Hauteur = INFO\Hauteur
INFO\Scr_Area_Largeur_Max = 1600 : INFO\Scr_Area_Hauteur_Max = 1200
INFO\Scr_Area_deplacement = 30
INFO\Scr_Area_options = #PB_ScrollArea_Single
If OpenWindow(#FEN_PRINCIPALE,INFO\coord_X,INFO\coord_Y,INFO\Largeur,INFO\Hauteur,INFO\titre,INFO\options)
If CreateGadgetList(WindowID(#FEN_PRINCIPALE))
col.w = 5 : lig.w = 5 : haut1.w = 20
ButtonGadget(#Gadget_button,10,20,80,20,"Bouton1")
StringGadget(#Gadget_string,10,50,120,20,"String1")
ListIconGadget(#gadget_list,10,70,200,200,"Essai",50)
;ScrollAreaGadget(#GDT_SCR_ZONE_DESSIN, INFO\Scr_Area_X, INFO\Scr_Area_Y,INFO\Scr_Area_Largeur,INFO\Scr_Area_Hauteur, INFO\Scr_Area_Largeur_Max, INFO\Scr_Area_Hauteur_Max,INFO\Scr_Area_deplacement ,INFO\Scr_Area_options)
;ImageGadget(#GDT_IMG_ZONE_DESSIN,0,0,INFO\Scr_Area_Largeur_Max,INFO\Scr_Area_Hauteur_Max,UseImage(#Img_ZoneGraphique))
;CloseGadgetList()
EndIf
INFO\coord_X = WindowX(#FEN_PRINCIPALE) : INFO\coord_Y = WindowY(#FEN_PRINCIPALE)
;capture_Gadget(0,0,80,20)
;HideGadget(#Gadget_button,1)
LB_quit = 0
Repeat
LL_event = WaitWindowEvent()
Select LL_event
Case #PB_Event_Gadget
Select EventGadget()
Case #Gadget_button
gadget1.l = capture_Gadget(INFO\coord_X+10,INFO\coord_Y+20,80,20)
HideGadget(#Gadget_button,1)
gadget2.l = capture_Gadget(INFO\coord_X+10,INFO\coord_Y+50,120,20)
HideGadget(#Gadget_string,1)
gadget3.l = capture_Gadget(INFO\coord_X+10,INFO\coord_Y+70,200,200)
HideGadget(#gadget_list,1)
fenetre1.l = capture_window(INFO\coord_X,INFO\coord_Y,INFO\Largeur,INFO\Hauteur)
ResizeWindow(#FEN_PRINCIPALE,-1,-1,INFO\Largeur+50,INFO\Hauteur+70)
Draw_Window(25,25,fenetre1)
Draw_Gadget(25+5,25+25,gadget1)
Draw_Gadget(25+15,25+45,gadget2)
Draw_Gadget(25+25,25+65,gadget1)
Draw_Gadget(25+25,25+105,gadget3)
EndSelect
Case #PB_Event_CloseWindow
LB_quit = 2
EndSelect
Until LB_quit > 0
EndIf
EndProcedure
Open_FenetrePrincipale()
; IDE Options = PureBasic v3.94 (Windows - x86)
; CursorPosition = 56
; FirstLine = 52
; Folding = -
Re: Copie en image d'un gadget.
Merci pour vos codes le seul problème est que j'aimerais un code qui ne soit pas que Windows, encore merci.
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Copie en image d'un gadget.
bah, pfff, oui mais...
ah bin, si t'as l'appareil photo numérique, clic tu prends la photo, transfert via usb, et zou, pis c'est portable... quoique le mac, des fois, ça pense pas comme les autres OS
pat
ah bin, si t'as l'appareil photo numérique, clic tu prends la photo, transfert via usb, et zou, pis c'est portable... quoique le mac, des fois, ça pense pas comme les autres OS



pat
Re: Copie en image d'un gadget.
Bonjour Patrick88,
Ouep pour le oui mais, pk sa repond pas exactement a ce que voufrais, mais ce n'est pas un prob. Je demandais ce qui est possible a faire en code PureBasic pas avec des fonction windows.
Et cela juste pour essaye de palier le problème de mettre un imagegadget et fond et des Gadget par dessus.
Cordialement,
GallyHC
Ouep pour le oui mais, pk sa repond pas exactement a ce que voufrais, mais ce n'est pas un prob. Je demandais ce qui est possible a faire en code PureBasic pas avec des fonction windows.
Et cela juste pour essaye de palier le problème de mettre un imagegadget et fond et des Gadget par dessus.
Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Re: Copie en image d'un gadget.
sans la fonction de windows "BitBlt_" je ne sais/vois pas comment faire...GallyHC a écrit :Et cela juste pour essaye de palier le problème de mettre un imagegadget et fond et des Gadget par dessus.
peut-être avec le "printscreen" mais est ce que c'est portable ?
pat
Re: Copie en image d'un gadget.
La touche Print Screen, elle est réservé Windows et Linux ou non?
Car sinon, une idée plutôt tordu, ce serait que tu fait un appui virtuel sur cette touche pour sauvegarder l'image de l'écran en mémoire, obtiens les coordonnées de la fenêtre et du gadget en question ainsi que ces dimensions et sauvegarde le tout en une image.
Tordu et simple à dire, mais je sais pas si c'est faisable!
Car sinon, une idée plutôt tordu, ce serait que tu fait un appui virtuel sur cette touche pour sauvegarder l'image de l'écran en mémoire, obtiens les coordonnées de la fenêtre et du gadget en question ainsi que ces dimensions et sauvegarde le tout en une image.
Tordu et simple à dire, mais je sais pas si c'est faisable!

Re: Copie en image d'un gadget.
j'y est penser mais comment va t'il savoir quel gadget a imprimé. si non oui si il connais les taille et position un screenshot et redecoupage de l'image peut se faire.Warkering a écrit :La touche Print Screen, elle est réservé Windows et Linux ou non?
Car sinon, une idée plutôt tordu, ce serait que tu fait un appui virtuel sur cette touche pour sauvegarder l'image de l'écran en mémoire, obtiens les coordonnées de la fenêtre et du gadget en question ainsi que ces dimensions et sauvegarde le tout en une image.
Tordu et simple à dire, mais je sais pas si c'est faisable!
@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Re: Copie en image d'un gadget.
bonsoir
Cet API Bitblt de Windows
doit bien y avoir un équivalent pour récupérer une zone écran sous Linux et Mac
il suffit de faire apparaitre les boutons avec une boucle avant le screenshot
pour Vista et W7 mettre un dossier C:\temp
Cordialement
Cet API Bitblt de Windows
doit bien y avoir un équivalent pour récupérer une zone écran sous Linux et Mac
il suffit de faire apparaitre les boutons avec une boucle avant le screenshot
pour Vista et W7 mettre un dossier C:\temp
Cordialement
Code : Tout sélectionner
Enumeration
#Window_0
#Button_0
#Button_1
#Button_2
#zoneimage
EndEnumeration
UseJPEGImageEncoder()
lecteur$="C:\"
hwnd=OpenWindow(#Window_0, 0, 0, 400, 400,"test save zone", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
CreateImage(#zoneimage,408, 432)
DC=StartDrawing(ImageOutput(#zoneimage))
ButtonGadget(#Button_2, 55, 200, 70, 35, "OK",#WS_DLGFRAME)
ButtonGadget(#Button_0, 55, 295, 70, 35, "OK")
ButtonGadget(#Button_1, 270, 295, 80, 35,"Annuler",#WS_DLGFRAME) ;#WS_BORDER
For i=1 To 50 ; boucle de dessin des boutons sur la fenetre avant screenshot
WindowEvent()
Next i
BitBlt_(DC,0,0,ImageWidth(#zoneimage),ImageHeight(#zoneimage)+32,GetDC_(hwnd),-4,-27,#SRCCOPY)
StopDrawing()
SaveImage(#zoneimage,lecteur$+"nom-image-temp"+".jpg",#PB_ImagePlugin_JPEG)
Repeat: Until WindowEvent() = #PB_Event_CloseWindow
Re: Copie en image d'un gadget.
Bah, tu prend les coordonnées du gadget, le X, le Y, par rapport à la fenêtre ainsi que sa largeur et sa hauteur. Tu prend par exemple la position de la fenêtre et là tu rajoute la position du gadget, tu prend seulement la taille du gadget, blablabla...
Demande moi pas comment faire, par exemple!
Edit : Mauvais smiley! ->
Demande moi pas comment faire, par exemple!

Edit : Mauvais smiley! ->
