FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» Logiciel de planétarium.
Capture d'une zone de l'écran total Emptypar Pedro Aujourd'hui à 8:08

» Un autre pense-bête...
Capture d'une zone de l'écran total Emptypar Froggy One Jeu 21 Nov 2024 - 15:54

» Récupération du contenu d'une page html.
Capture d'une zone de l'écran total Emptypar Pedro Sam 16 Nov 2024 - 14:04

» Décompilation
Capture d'une zone de l'écran total Emptypar JL35 Mar 12 Nov 2024 - 19:57

» Un album photos comme du temps des grands-mères
Capture d'une zone de l'écran total Emptypar jjn4 Mar 12 Nov 2024 - 17:23

» traitement d'une feuille excel
Capture d'une zone de l'écran total Emptypar jjn4 Jeu 7 Nov 2024 - 3:52

» Aide-mémoire mensuel
Capture d'une zone de l'écran total Emptypar jjn4 Lun 4 Nov 2024 - 18:56

» Des incomprèhension avec Timer
Capture d'une zone de l'écran total Emptypar Klaus Mer 30 Oct 2024 - 18:26

» KGF_dll - nouvelles versions
Capture d'une zone de l'écran total Emptypar Klaus Mar 29 Oct 2024 - 17:58

» instructions panoramic
Capture d'une zone de l'écran total Emptypar maelilou Lun 28 Oct 2024 - 19:51

» Figures fractales
Capture d'une zone de l'écran total Emptypar Marc Ven 25 Oct 2024 - 12:18

» Panoramic et Scanette
Capture d'une zone de l'écran total Emptypar Yannick Mer 25 Sep 2024 - 22:16

» Editeur d étiquette avec QR évolutif
Capture d'une zone de l'écran total Emptypar JL35 Lun 23 Sep 2024 - 22:40

» BUG QR Code DelphiZXingQRCode
Capture d'une zone de l'écran total Emptypar Yannick Dim 22 Sep 2024 - 11:40

» fichier.exe
Capture d'une zone de l'écran total Emptypar leclode Ven 20 Sep 2024 - 19:02

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Novembre 2024
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
252627282930 
CalendrierCalendrier
Le Deal du moment : -29%
DYSON V8 Origin – Aspirateur balai sans fil
Voir le deal
269.99 €

 

 Capture d'une zone de l'écran total

Aller en bas 
AuteurMessage
JL35




Nombre de messages : 7112
Localisation : 77
Date d'inscription : 29/11/2007

Capture d'une zone de l'écran total Empty
MessageSujet: Capture d'une zone de l'écran total   Capture d'une zone de l'écran total EmptyJeu 28 Avr 2016 - 14:11

Je précise tout de suite: rien à voir avec de la crème solaire ou autre...

Il s'agit de capturer une zone quelconque de tout l'écran.
Pour ça, j'ai utilisé l'excellente DLL de notre ami Nardo26: Pick.dll, qui donne en permanence la position de la souris sur l'écran, et l'état de ses boutons.
Elle donne également la couleur du pixel survolé, fonction que je n'ai pas utilisée ici.
(entre parenthèse, que devient l'ami Nardo ? J'espère qu'il ne s'est pas fait dévorer par un de ses poissons carnivores...).

Le programme trace à l'écran deux droites perpendiculaires, que l'on déplace à la souris, sans cliquer, leur croisement (situé au pointeur de la souris) représentant le futur sommet haut/gauche de la zone de capture.
On positionne ce croisement à l'endroit voulu, on clique, et ça se transforme en un rectangle que l'on dimensionne à sa guise, puis on relâche: la zone englobée par le rectangle ainsi tracé est recopiée dans le presse-papier sous forme d'image.

Les coordonnées absolues du croisement sur l'écran sont affichées en permanence, puis après le clic ce sont les dimensions du rectangle de capture (largeur x hauteur) qui sont affichées.
Au relâchement du bouton, la capture s'effectue, et le programme se termine et quitte.
Il n'y a plus qu'à récupérer le contenu du presse-papier par un moyen quelconque.

On peut abandonner à tout moment en tapant la touche Escape.

Problème: comment tracer des traits n'importe où sur l'écran en dehors de la fenêtre panoramic ?
C'est là qu'est l'astuce !
En fait, chaque trait est une Form d'une épaisseur d'1 pixel (ou plus si on préfère), de couleur noire (ou autre si on préfère) et de longueur voulue (épaisseur = WIDTH, largeur pour les lignes verticales, HEIGHT, hauteur pour les lignes horizontales), positionnée à la demande.

Et voilà le travail:
Code:
' Capture d'une zone de l'écran total
DIM wt%,x%,y%,x1%,y1%,w%,h%,b%,s%,a$,b$
' Pick.dll, de Nardo26, à télécharger ici:
'    http://nardo26.lescigales.org/dll-diverses-fonctions-28.html
DLL_ON "C:\Panoramic\NARDO\pick.dll": ' DLL Nardo
b$ = CHR$(10)+"Clic pour démarrer"+CHR$(10)+" ESC pour annuler"
wt% = 1: ' épaisseur du trait à l'écran
x% = SCREEN_X/2: y% = SCREEN_Y/2
HIDE 0
FORM 100: BORDER_HIDE 100: TOP 100,0: LEFT 100,x%: WIDTH 100,wt%: HEIGHT 100,SCREEN_Y
  COLOR 100,0,0,0: ' ligne verticale
FORM 101: BORDER_HIDE 101: TOP 101,y%: LEFT 101,0: WIDTH 101,SCREEN_X: HEIGHT 101,wt%
  COLOR 101,0,0,0: ' ligne horizontale
FORM 102: BORDER_HIDE 102: WIDTH 102,wt%: HEIGHT 102,100
  COLOR 102,0,0,0: HIDE 102: ' bord vertical droit
FORM 103: BORDER_HIDE 103: WIDTH 103,100: HEIGHT 103,wt%
  COLOR 103,0,0,0: HIDE 103: ' bord horizontal bas
FORM 105: BORDER_HIDE 105: TOP 105,0: LEFT 105,0
ALPHA 106: PARENT 106,105: COLOR 106,0,0,0: FONT_COLOR 106,255,255,0: FONT_BOLD 106
  WIDTH 105,105: HEIGHT 105,39

b% = 0
WHILE b% = 0
    s% = SCANCODE: SCANCODE = 0: IF s% = 27 THEN TERMINATE
    Pickmouse(): a$ = CLIPBOARD_STRING_PASTE$
    x% = VAL(LEFT$(a$,4)): y% = VAL(MID$(a$,5,4)): b% = VAL(RIGHT$(a$,1))
    LEFT 100,x%: TOP 101,y%
    LEFT 105,x%-110: TOP 105,y%-45
    CAPTION 106,"      "+STR$(x%)+" x "+STR$(y%)+b$
    PAUSE 50
END_WHILE
x1% = x%: y1% = y%: ' coin supérieur gauche de la saisie
SHOW 102: SHOW 103
WHILE b% > 0
    s% = SCANCODE: SCANCODE = 0: IF s% = 27 THEN TERMINATE
    Pickmouse(): a$ = CLIPBOARD_STRING_PASTE$
    x% = VAL(LEFT$(a$,4)): y% = VAL(MID$(a$,5,4)): b% = VAL(RIGHT$(a$,1))
    w% = x%-x1%: h% = y%-y1%
    CAPTION 106,"      "+STR$(w%)+" x "+STR$(h%)+b$
    TOP 100,y1%: HEIGHT 100,h%
    LEFT 101,x1%: WIDTH 101,w%
    LEFT 102,x%: TOP 102,TOP(100): HEIGHT 102,HEIGHT(100)
    LEFT 103,x1%: TOP 103,y%: WIDTH 103,WIDTH(101)
    PAUSE 50
END_WHILE
DELETE 100: DELETE 101: DELETE 102: DELETE 103: DELETE 105
Capture_T(x1%,y1%,w%,h%,""): ' -> capture dans le clipboard

TERMINATE
' ==============================================================================
SUB Capture_T(x,y,w,h,f$)
  ' Capture d'une zone de l'écran total, en x,y absolus, dimensions w x h,
  ' dans f$ (bmp), ou dans le presse-papier (clipboard) si f$ = ""
  ' ATTENTION: x et y absolus par rapport à la totalité de l'écran !
  DIM_LOCAL c2d%
  c2d% = NUMBER_2D_TARGET
  FORM 999: TOP 999,0: LEFT 999,0: WIDTH 999,SCREEN_X: HEIGHT 999,SCREEN_Y
    BORDER_HIDE 999: HIDE 999: 2D_TARGET_IS 999: WAIT 100: ' Tout l'écran
  IMAGE 1000: 2D_IMAGE_COPY 1000,x,y,x+w,y+h
  IF f$ = ""
      CLIPBOARD_COPY 1000
  ELSE
      FILE_SAVE 1000,f$
  END_IF
  2D_TARGET_IS c2d%
  DELETE 999: DELETE 1000
END_SUB
' ==============================================================================
SUB Pickmouse()
  ' Souris dans tout l'écran: position, boutons -> chaîne ascii xxxxyyyyb -> clipboard
  DIM_LOCAL Pc$,a$,xm%,ym%,bt%
  Pc$ = STRING$(8," ")
  bt% = DLL_CALL1("GetMouseXY",ADR(Pc$)): ' DLL Nardo
  a$ = LEFT$(Pc$,4)+RIGHT$(Pc$,4)+STR$(bt%): ' coordonnées et bouton
  xm% = VAL(LEFT$(Pc$,4)): ym% = VAL(RIGHT$(Pc$,4))
  CLIPBOARD_STRING_COPY a$
END_SUB
' ==============================================================================

REMARQUES:
- Il faut d'abord télécharger la Pick.dll de Nardo (le lien est en tête du programme), et ajuster son chemin dans la commande DLL_ON également en tête.
- On peut ajuster à sa guise l'épaisseur du tracé (variable wt%), et sa couleur: couleur des Forms 100 à 103.
- Le résultat est ici dans le presse-papier, mais on peut le récupérer dans un fichier bmp, il suffit de le préciser dans l'appel à la sub Capture_T

Remarque annexe concernant les Forms:
Si on définit une Form quelconque, sa largeur minimum est de 132 pixels, même si sa définition WIDTH est inférieure.
Par contre, dès qu'on lui donne l'attribut BORDER_HIDE, on peut lui donner n'importe quelle largeur ou hauteur, comme ici 1 pixel.

Ce programme peut être utile sous forme d'exécutable, avec un raccourci sur le bureau, pour faire une capture à tout moment, il ne pollue pas l'écran.
Revenir en haut Aller en bas
 
Capture d'une zone de l'écran total
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Capture d'une zone de l'écran total
» Capture d'une zone de l'écran total
» Afficher un texte sur l'écran total
» Capture vidéo et audio sur le web
» Capture des replay TV

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: