FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  
Derniers sujets
» KGF_dll - nouvelles versions
par Klaus Aujourd'hui à 0:29

» track_bar circulaire
par Klaus Hier à 21:41

» Gestionnaire de Projets Panoramic
par Jean Claude Hier à 20:41

» Mah-Jong européen new-look
par Jean Claude Hier à 20:34

» Gestion de l'Unicode
par jean_debord Hier à 11:21

» Button_picture
par pascal10000 Jeu 14 Déc 2017 - 11:41

» Pourquoi le compilateur stagne
par Minibug Jeu 14 Déc 2017 - 11:09

» 4 (en analyse): SYNEDIT_TARGET_IS_OBJECT devient inactif
par Jack Jeu 14 Déc 2017 - 10:09

» 3 (en analyse): Mauvaise interprétation du string "THEN"
par Jack Jeu 14 Déc 2017 - 10:03

» KGF.dll - demandes ou suggestions de modifications ou ajouts
par Marc Jeu 14 Déc 2017 - 10:00

» API Windows
par Klaus Mar 12 Déc 2017 - 3:21

» Cartes de voeux, menus, etc.
par JL35 Lun 11 Déc 2017 - 17:48

» a l'aide klaus
par Minibug Lun 11 Déc 2017 - 11:42

» bug SYNEDIT_TARGET_IS_OBJECT
par Jack Lun 11 Déc 2017 - 0:16

» Jukebox : Serge Reggiani
par papydall Sam 9 Déc 2017 - 5:58

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Décembre 2017
LunMarMerJeuVenSamDim
    123
45678910
11121314151617
18192021222324
25262728293031
CalendrierCalendrier

Partagez | 
 

 KGF_dll - nouvelles versions

Voir le sujet précédent Voir le sujet suivant Aller en bas 
Aller à la page : Précédent  1 ... 9 ... 14, 15, 16, 17, 18, 19  Suivant
AuteurMessage
pascal10000

avatar

Nombre de messages : 621
Localisation : Troyes
Date d'inscription : 05/02/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 21 Juil 2017 - 13:15

bonjour Klaus
La fonction "FindPanoramicObject" fonctionne correctement

Il y a un mais! Elle ne fonctionne uniquement avec la commande "GetAbsoluteMousePosition"
et non avec "GetMousePosition" donc une petit rectification s'impose dans l'aide KGF.chm
bonne journée et merci
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 21 Juil 2017 - 14:29

Tu as raison ! Merci de l'avoir signalé. Ce sera corrigé pour la prochaine version.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Dim 13 Aoû 2017 - 17:35

Klaus, la capture d" écran ne fonctionne apparemment plus. pale

Code:
sub CaptureJeu()
 show BtnShot%
 SNAP% = dll_call5("CreateScreenSnapshot",1,(screen_x-430)/2,(screen_y-430)/2,430,430)
end_sub

sub TakeSnapshot()
 dim_local f$,res%,m%
 
 f$=mid$(date$,7,4)+mid$(date$,4,2)+mid$(date$,1,2)+"_"
 f$=f$+mid$(Time$,1,2)+mid$(Time$,4,2)+mid$(Time$,7,2)+".jpg"
 f$=Path$+"Capture_"+f$

 hide BtnShot%
 ' message f$+chr$(13)+str$(Snap%)+chr$(13)+str$(adr(f$))
 res% = dll_call2("TakeScreenSnapshot",SNAP%,adr(f$))
 if res%<0
 m%=message_warning_ok("Désolé !"+chr$(13)+"Une erreur s' est produite, la capture a échouée.")
 end_if
 res% = dll_call1("DeleteScreenSnapshot",SNAP%)
end_sub

J' ai droit au message à chaque essai... Crying or Very sad

Précision : Avec le compilateur. (cela fonctionne avec l' interpréteur)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 6 Oct 2017 - 2:22

Nouvelle version:
KGF.dll V7.88 du 05/10/2017

Nouveautés:
- Nouvelles fonctions: MoveRegion, CheckRegionIntersection

Modules modifiés:
KGF.dll
KGF.chm


La doc est à jour. Les sources seront à jour prochainement.

Les fichiers sont sur mon site (et mon site miroir). Le WebDav suivra prochainement.

Voici une démo:
Code:
' test_collisions_de_sprites_avec_regions.bas

label key

dim res%, RGN1%, RGN2%, key%, posx%, posy%, M1%


dll_on "KGF.dll"

M1% = 0 - 1


caption 0,"Flèches pour déplacer le sprite rouge, ESC pour sortir"
image 1 : picture 2 : hide 2 : width 2,100 : height 2,50
scene2d 3 : full_space 3 : color 3,200,200,200

2d_target_is 2
  
color 2,255,0,0 : 2d_image_copy 1,0,0,100,50
sprite 1 : sprite_image_load 1,1
sprite_position 1,50,20
posx% = 50
posy% = 20
RGN1% = 0
RGN1% = DLL_call5("WindowAddRectangleRegion",adr(RGN1%),posx%,posy%,100,50)

color 2,0,0,255 : 2d_image_copy 1,0,0,100,50
sprite 2 : sprite_image_load 2,1
sprite_position 2,200,150
RGN2% = 0
RGN2% = DLL_call5("WindowAddRectangleRegion",adr(RGN2%),200,150,100,50)

sprite 3
font_size 3,20
font_color 3,255,0,0
font_bold 3
sprite_text 3,"Contact !"
sprite_position 3,200,0
sprite_hide 3

on_key_down 0,key

end

key:
  key% = scancode
  if key%=27 then terminate
  if key%=37 then gauche()
  if key%=38 then haut()
  if key%=39 then droite()
  if key%=40 then bas()
  
  return
  
sub gauche()
  sprite_hide 3
  posx% = posx% - 1
  sprite_position 1,posx%,posy%
  res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  if res%=0 then message "oups"
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),1,0)  
  end_if
end_sub

sub haut()
  sprite_hide 3
  posy% = posy% - 1
  sprite_position 1,posx%,posy%
  res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  if res%=0 then message "oups"
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  end_if
end_sub

sub droite()
  sprite_hide 3
  posx% = posx% + 1
  sprite_position 1,posx%,posy%
  res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  if res%=0 then message "oups"
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  end_if
end_sub

sub bas()
  sprite_hide 3
  posy% = posy% + 1
  sprite_position 1,posx%,posy%
  res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  if res%=0 then message "oups"
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  end_if
end_sub


Avec les flèches, essayez de déplacer le sprite mobile sur le sprite fixe...

La touche Echap termine le programme.

EDIT

Le WebDav est à jour également - DLL, CHM et sources.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Pedro Alvarez

avatar

Nombre de messages : 882
Date d'inscription : 19/01/2014

MessageSujet: kgf.dll   Ven 6 Oct 2017 - 10:09

Bonjour à tous.

Ah, je suis vraiment très content de te retrouver sur ce forum Klaus.

Amicalement.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 6 Oct 2017 - 11:39

J'ai corrigé une petite maladresse de programmation dans mon code exemple Panoramic. En effet, il vaut mieux faire le test de collision AVANT de déplacer physiquement le sprite:
Code:
' test_collisions_de_sprites_avec_regions.bas

label key

dim res%, RGN1%, RGN2%, key%, posx%, posy%, M1%


dll_on "KGF.dll"

M1% = 0 - 1


caption 0,"Flèches pour déplacer le sprite rouge, ESC pour sortir"
image 1 : picture 2 : hide 2 : width 2,100 : height 2,50
scene2d 3 : full_space 3 : color 3,200,200,200

2d_target_is 2
 
color 2,255,0,0 : 2d_image_copy 1,0,0,100,50
sprite 1 : sprite_image_load 1,1
sprite_position 1,50,20
posx% = 50
posy% = 20
RGN1% = 0
RGN1% = DLL_call5("WindowAddRectangleRegion",adr(RGN1%),posx%,posy%,100,50)

color 2,0,0,255 : 2d_image_copy 1,0,0,100,50
sprite 2 : sprite_image_load 2,1
sprite_position 2,200,150
RGN2% = 0
RGN2% = DLL_call5("WindowAddRectangleRegion",adr(RGN2%),200,150,100,50)

sprite 3
font_size 3,20
font_color 3,255,0,0
font_bold 3
sprite_text 3,"Contact !"
sprite_position 3,200,0
sprite_hide 3

on_key_down 0,key

end

key:
  key% = scancode
  if key%=27 then terminate
  if key%=37 then gauche()
  if key%=38 then haut()
  if key%=39 then droite()
  if key%=40 then bas()
 
  return
 
sub gauche()
  sprite_hide 3
  posx% = posx% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  else 
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub haut()
  sprite_hide 3
  posy% = posy% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub droite()
  sprite_hide 3
  posx% = posx% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub bas()
  sprite_hide 3
  posy% = posy% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Ven 6 Oct 2017 - 15:05

Nouvelle version:
KGF.dll V7.89 du 06/10/2017

Nouveautés:
- Nouvelle fonction: CheckPointInRegion

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Cette fonction complète les possibilités de travail avec des régions compexes, associées à des sprites. Elle permet de svoir si un point fait partie d'une région quelconque, ou noon. Ceci permet par exemple de tester si un tir touche un sprite, à un endroit précis. Il y a plein d'autres applications.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Sam 7 Oct 2017 - 12:45

Nouvelle version:
KGF.dll V7.90 du 07/10/2017

Nouveautés:
- Nouvelle fonction: DeleteRegion

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Cette fonction permet de suprimer une région lorsqu'elle n'est plus utilisée. Dans Windows, chaque région est représentée par un handle global pointant vers uns structure de taille variable en mémoire décrivant la région. Cet espace, ainsi que le handle global lui-même, représente une consommation de resources qu'on peut optimiser dès l'instant qu'on n'a plus besoin de la région. Certes, cela ne s'applique pas pour les régions décrivant la forme d'une fenêtre, pour des raisons évidentes. Par contre, lors de l'utilisation des régions en lien avec des sprites, il est fortement conseillé de supprimer ces régions dès que les sprites concernés sont supprimés, ou au plis tard à la fin du programme.

Voici le programme de démo, adapté à a suppression propre des régions utilisées:
Code:
' test_collisions_de_sprites_avec_regions.bas

label key, exit

dim res%, RGN1%, RGN2%, key%, posx%, posy%, M1%


dll_on "KGF.dll"

M1% = 0 - 1

on_close 0,exit

caption 0,"Flèches pour déplacer le sprite rouge, ESC pour sortir"
image 1 : picture 2 : hide 2 : width 2,100 : height 2,50
scene2d 3 : full_space 3 : color 3,200,200,200

2d_target_is 2
 
color 2,255,0,0 : 2d_image_copy 1,0,0,100,50
sprite 1 : sprite_image_load 1,1
sprite_position 1,50,20
posx% = 50
posy% = 20
RGN1% = 0
RGN1% = DLL_call5("WindowAddRectangleRegion",adr(RGN1%),posx%,posy%,100,50)

color 2,0,0,255 : 2d_image_copy 1,0,0,100,50
sprite 2 : sprite_image_load 2,1
sprite_position 2,200,150
RGN2% = 0
RGN2% = DLL_call5("WindowAddRectangleRegion",adr(RGN2%),200,150,100,50)

sprite 3
font_size 3,20
font_color 3,255,0,0
font_bold 3
sprite_text 3,"Contact !"
sprite_position 3,200,0
sprite_hide 3

on_key_down 0,key

end

key:
  key% = scancode
  if key%=27 then sortie()
  if key%=37 then gauche()
  if key%=38 then haut()
  if key%=39 then droite()
  if key%=40 then bas()
 
  return
 
exit:
  res% = dll_call1("DeleteRegion",adr(RGN1%))
  res% = dll_call1("DeleteRegion",adr(RGN2%))
  return
 
sub sortie()
  gosub exit
  terminate
end_sub
 
sub gauche()
  sprite_hide 3
  posx% = posx% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  else 
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub haut()
  sprite_hide 3
  posy% = posy% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% + 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub droite()
  sprite_hide 3
  posx% = posx% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub bas()
  sprite_hide 3
  posy% = posy% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% - 1
    sprite_position 1,posx%,posy%
    res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Dim 8 Oct 2017 - 18:36

Voici une nouvele version dui programme de démo des collisions détectées par l'utilisation des régions Windows. A la place de simples rectangles, le programme utilise des triangles, créées dans le code Panoramic par les commandes 2D. Puis, on construit les régions à partir des bitmaps de ces triangles. Cela montr qu'on peut utiliser n'importe quelle bitmap pour cela, en spécifiant la couleur de transparence (ici, c'est 0=noir car c'est la couleur de transparence des sprites en Panoramic).

On déplace toujours le sprite rouge par les fléches. Et dès qu'une des pointes du traingle rouche touche un point du triangle bleu (ou inversement), le contact est détecté. Cela montre à la perfection que la détection ne se jour plus sur le rectangle englobant, mais bien sur la partie significative (non transparente) des sprites.

Voici le code:
Code:
' test_collisions_de_sprites_avec_regions.bas

label key, exit

dim type_sprite%
' type_sprite% = 1 : ' rectangle
type_sprite% = 2 : ' triangle

dim res%, RGN1%, RGN2%, key%, posx%, posy%, M1%, bmp$
bmp$ = "temp.bmp"


dll_on "KGF.dll"

M1% = 0 - 1

on_close 0,exit

caption 0,"Flèches pour déplacer le sprite rouge, ESC pour sortir"
image 1 : picture 2 : hide 2 : width 2,100 : height 2,50
scene2d 3 : full_space 3 : color 3,200,200,200

2d_target_is 2
  
select type_sprite%
  case 1
    color 2,255,0,0 : 2d_image_copy 1,0,0,100,50
    sprite 1 : sprite_image_load 1,1
    sprite_position 1,50,20
    posx% = 50
    posy% = 20
    RGN1% = 0
    RGN1% = DLL_call5("WindowAddRectangleRegion",adr(RGN1%),posx%,posy%,100,50)
  case 2
    color 2,0,0,0
    2d_pen_color 255,0,0
    2d_pen_width 3
    2d_fill_color 255,0,0
    2d_poly_from 50,10 : 2d_poly_to 90,45 : 2d_poly_to 20,30 : 2d_poly_to 50,10
    2d_flood 50,30,255,0,0
    2d_image_copy 1,0,0,100,50
    file_save 2,bmp$
    sprite 1 : sprite_image_load 1,1
    sprite_position 1,50,20
    posx% = 50
    posy% = 20
    RGN1% = 0
    RGN1% = DLL_call5("WindowCreateRegionFromBMP",adr(bmp$),adr(RGN1%),0,0,0)
    res% = DLL_call3("MoveRegion",adr(RGN1%),posx%,posy%)
    file_delete bmp$
end_select

select type_sprite%
  case 1
    color 2,0,0,255 : 2d_image_copy 1,0,0,100,50
    sprite 2 : sprite_image_load 2,1
    sprite_position 2,200,150
    RGN2% = 0
    RGN2% = DLL_call5("WindowAddRectangleRegion",adr(RGN2%),200,150,100,50)
  case 2
    color 2,0,0,0
    2d_pen_color 0,0,255
    2d_pen_width 3
    2d_fill_color 255,0,0
    2d_poly_from 50,10 : 2d_poly_to 90,45 : 2d_poly_to 20,30 : 2d_poly_to 50,10
    2d_flood 50,30,0,0,255
    2d_image_copy 1,0,0,100,50
    file_save 2,bmp$
    sprite 2 : sprite_image_load 2,1
    sprite_position 2,200,150
    RGN2% = 0
    RGN2% = DLL_call5("WindowCreateRegionFromBMP",adr(bmp$),adr(RGN2%),0,0,0)
    res% = DLL_call3("MoveRegion",adr(RGN2%),200,150)
    file_delete bmp$
end_select

sprite 3
font_size 3,20
font_color 3,255,0,0
font_bold 3
sprite_text 3,"Contact !"
sprite_position 3,200,0
sprite_hide 3

on_key_down 0,key

end

key:
  key% = scancode
  if key%=27 then sortie()
  if key%=37 then gauche()
  if key%=38 then haut()
  if key%=39 then droite()
  if key%=40 then bas()
  
  return
  
exit:
  res% = dll_call1("DeleteRegion",adr(RGN1%))
  res% = dll_call1("DeleteRegion",adr(RGN2%))
  return
  
sub sortie()
  gosub exit
  terminate
end_sub
  
sub gauche()
  sprite_hide 3
  posx% = posx% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% + 1
    res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  else  
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub haut()
  sprite_hide 3
  posy% = posy% - 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% + 1
    res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub droite()
  sprite_hide 3
  posx% = posx% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),1,0)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posx% = posx% - 1
    res% = dll_call3("MoveRegion",adr(RGN1%),M1%,0)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

sub bas()
  sprite_hide 3
  posy% = posy% + 1
  res% = dll_call3("MoveRegion",adr(RGN1%),0,1)
  res% = dll_call2("CheckRegionIntersection",adr(RGN1%),adr(RGN2%))
  if res%=1
    sprite_show 3
    posy% = posy% - 1
    res% = dll_call3("MoveRegion",adr(RGN1%),0,M1%)
  else
    sprite_position 1,posx%,posy%
  end_if
end_sub

Et voici une détection, en abaissant le triangle rouge sur le triangle bleu, par le haut:


EDIT

Un peu de didactique autour de cela:
Imaginons un personnage comme un combattant avec une épée. On peut placer son image dans un sprite sur fond noir, et il va se déplacer normalement. On va maintenant définir une région par WindowCreateRegionFromBMP comprenant la totalité du personnage. Conséquence: on peut facilement savoir si le personnage va se heurter ) un élément du décor (mur, arbre, ...), en définissant une seule région contenant l'ensemble des éléments fixes du décor. Mais on peut aussi définir une région juste pour l'épée, et savoir ainsi si l'épée "pique" un autre personnage (entre en collision avec la région associée à l'autre personnage). On obtient ainsi une gestion très fine des collisions, avec une application directe sur les actions à effectuer.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Lun 9 Oct 2017 - 12:20

Nouvelle version:
KGF.dll V7.91 du 09/10/2017

Nouveautés:
- Nouvelles fonctions: CreateRegionGroup, AddRegionToGroup, DeleteRegionGroup, MoveRegionGroup

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Ces fonctions introduisent une nouvelle notion: le groupe de régions. C'est un simple regroupement logique de plusieurs régions (le nombre n'est pas limité) dans le but de pourvoir déplacer toutes ces régions en un sel appel d'une fonction DLL, de façon synchrone. Ce sera beaucoup plus performat que de faire appel à la fonction de déplacement d'une région dans une boucle Panoramic.

A quoi ça sert ? Imaginons un personnage dans un jeu video en 2D. On veut tester les contacts (collisions) avec certaines parties du personnage (pieds, tête, épée, bouclier, ...). On définit alors une région pour chacune de ces parties et une région globae pour l'ensemble du personnage. Cette dernière va servir à détecter les collisions avec les éléments fixes du décor (mor, arbres, rochers, ...) et éléments mobiles inertes (voitures, ...). Les autres servent à détecter une collision entraînant une action (épée du personnage A sur tête du personnage B ==> mort du personnage B, etc). Mais le problème est le déplacement de tout ce système lorsque le personnage se déplace. Alors, au lieu de faire une boucle sur toutes les régions du personnage, il suffit de déplacer le groupe lui étant associé - c'est beaucoup plus simple et surtout beaucoup plus rapide.

Simple mise en garde: avant de quitter un programme utilisant de telles régions, il faut veiller à supprimer toutes les régions créées, ainsi que les éventuels groupes de régions. Pour voir comment faire, regarder le programme de démo dans le post plus haut.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Mar 10 Oct 2017 - 15:08

Nouvelle version:
KGF.dll V7.912du 10/10/2017

Nouveautés:
- Nouvelle fonction: CheckRegionGroupIntersection

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

C'est une fonction très puissante, et elle complète la collection de fonctions gérant les groupes de régions. On peut maintenant tester s'il è a un point commun (contact) entre une région et une région quelconque d'un groupe de régions, ou entre une région quelconque d'un groupe de régions avec une région quelconque d'un autre groupe de régions. De plus, on peut savoir exactement quelles régions sont concernées.

Ceci permet, lors du déplacement d'un personnage décliné en plusieurs régions, de savoir par exemple si sont épée a touché la tête, l'épée ou le bouclier d'un autre personnage. C'est un seul appel d'une fonction DLL qui réalise cela.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Mar 10 Oct 2017 - 18:49

Nouvelle version:
KGF.dll V7.93 du 10/10/2017

Nouveautés:
- Nouvelle fonction: GetRegionRectangle

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Cette fonction permet de récupérer la position et le dimensions du rectangle englobant une région, quelque soit sa forme.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Mer 1 Nov 2017 - 13:57

Nouvelle version:
KGF.dll V7.94 du 31/10/2017

Nouveautés:
- Nouvel objet: Scanner

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Ce nouvel objet (invisible) permet de gérer un scanner en mode TWAIN et acquérir des images. On peut donc maintenant scanner et archiver des documents directement à partir du programme Panoramic, un peu comme c'est fait dans les pharmacies qui scannent les ordonnances, etc.

Voici une démo:
Code:
' test_Scanner.bas

label pret, close0, choix, scan1, scan2, sauver

dim TW%, res%, sel%, f$, e$

dll_on "KGF.dll"

button 1 : top 1,10 : left 1,10 : width 1,110 : caption 1,"Scanner direct" : on_click 1,scan1
button 2 : top 2,10 : left 2,130 : width 2,110 : caption 2,"Scanner dialogue" : on_click 2,scan2
button 3 : top 3,10 : left 3,250 : width 3,110 : caption 3,"Sauver" : on_click 3,sauver

save_dialog 9 : filter 9,"Images|*.bmp;*.jpg; *.png"

list 11 : top 11,40 : left 11,10 : width 11,150 : on_click 11,choix
picture 12 : top 12,40 : left 12,180 : width 12,300 : height 12,400 : stretch_on 12

TW% = dll_call0("CreateScanner")

res% = dll_call2("GetScannerSources",TW%,handle(11))
sel% = dll_call1("GetSelectedScannerSource",TW%)
res% = dll_call2("SelectListBoxItem",handle(11),sel%)

on_user_event pret
on_close 0,close0

end

close0:
  res% = dll_call1("DeleteScanner",TW%)
  return
 
choix:
  sel% = item_index(11)
  res% = dll_call2("SelectScannerSource",TW%,sel%)
  return

scan1:
  res% = dll_call1("StartSelectedScanner",TW%)
  return

scan2:
  res% = dll_call1("StartScannerWithDialog",TW%)
  return
 
sauver:
  f$ = file_name$(9)
  if f$="_" then return
  e$ = lower$(file_extract_extension$(f$))
  message e$
  return
  if (e$<>".bmp") and (e$<>".jpg") and (e$<>".png")
    message "Choisissez le format BMP, JPG ou PNG!"
    return
  end_if
  if file_exists(s$)=1
    if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then return
  end_if
  clipboard_copy 12
  res% = dll_call1("SaveAnyImageFile",adr(f$))
  return

pret:
  message "reçu !"
  res% = dll_call1("CopyScannerImapeToClipBoard",TW%)
  clipboard_paste 12
  display
  message "reçu !"
  return


Ce programme de démo est placé égement dans le fichier d'aide KGF.chm.

L'objet Scanner est réalisé à l'aide d'un composant freeware sous licence GPL trouvé sur SourceForge, avec les conditions de licence suivantes:
Citation :
DelphiTwain by Kluug.net
------------------------

Licensed under: MPL / GPL / LGPL

Copyright:
Gustavo Daud (delphitwain.sourceforge.net)
Nemeth Peter
vcldeveloper (stackoverflow.com/questions/2059343/twain-scanning-components-for-delphi)
Ondrej Pokorny (www.kluug.net/delphitwain.php)
J'ai intégré cela dans KGF.dll et créé les fonctions nécessaires pour réaliser une enveloppe (wrapper) autour de cet objet réalisé en Delphi. Aucune DLL externe ni contrôle ActiveX n'est nécessaire.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Yannick

avatar

Nombre de messages : 8002
Age : 46
Localisation : Bretagne
Date d'inscription : 15/02/2010

MessageSujet: re   Mer 1 Nov 2017 - 16:20

cheers Bravo Klaus !

Après la gestion de l'imprimante, celle du scanner.
La gestion des périphériques donne de nouvelles ouvertures à Panoramic.
Bravo et encore merci Klaus.
Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc



Nombre de messages : 551
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: KGF_dll - nouvelles versions   Jeu 2 Nov 2017 - 0:12

Merci Klaus pour cette nouvelle extension sur le monde extérieur !  cheers

N'ayant pas de scanner, je ne peux pas faire les tests.

Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Jeu 2 Nov 2017 - 0:49

Tu peux tester le logiciel en utilisant un simulateur de scanner. A côté de mon scanner physique, j'utilise ceci:
http://developer.dynamsoft.com/dwt/kb/2659
Cela marche sans problème (version 64 bits dans mon cas, sous W10 64 bits). L'image "scannée" est lme logo de TWAIN.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Marc



Nombre de messages : 551
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: KGF_dll - nouvelles versions   Jeu 2 Nov 2017 - 1:03

Merci Klaus !

L'objet SCANNER que tu as implanté dans ta DLL fonctionne parfaitement !

Test fait sous W10 64bits

Spoiler:
 

Bravo et encore merci !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Mar 14 Nov 2017 - 1:47

Nouvelle version:
KGF.dll V7.95 du 13/11/2017

Nouveautés:
- Nouvelle fonction: GetFileDateTime

Modules modifiés:
KGF.dll
KGF.chm


La doc et les sources sont à jour.

Cette fonction est un extension de la fonction GetFileDate. Elle prend un paramètre supplémentaire permettant de choisir le type de date et heure à retourner: date de création, modification ou dernier accès. En voici une petite démo:
Code:
' test_GetFileDateTime.bas

dim f$, res%, cre$, mod$, acc$

open_dialog 1

dll_on "KGF.dll"

f$ = file_name$(1)
if f$="_" then terminate

cre$ = string$(255," ")
res% = dll_call3("GetFileDateTime",adr(f$),0,adr(cre$))
cre$ = trim$(cre$)
mod$ = string$(255," ")
res% = dll_call3("GetFileDateTime",adr(f$),1,adr(mod$))
mod$ = trim$(mod$)
acc$ = string$(255," ")
res% = dll_call3("GetFileDateTime",adr(f$),2,adr(acc$))
acc$ = trim$(acc$)

message "création: "+cre$+chr$(13)+chr$(10)+"Modification: "+mod$+chr$(13)+chr$(10)+"Accès: "+acc$


end
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
bignono

avatar

Nombre de messages : 1104
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Mar 14 Nov 2017 - 12:35

Bonjour à tous, Smile  Bonjour Klaus Very Happy
Je viens d'essayer ta dernière version de KGF.dll avec ton programme exemple. Ça fonctionne très bien. Mais quand j'insère tes fonctions dans mon programme qui recherche tous les dossiers et fichiers dans mon ordinateur, dès le début à la racine de C:\ il m'affiche 7 dossiers et 12 fichiers, et arrivé au 20ème élément, il m'affiche un message d'erreur: "erreur système. Code: 32. Le processus ne peut accéder au fichier car ce fichier est utilisé par un autre processus."
Je n'avais pas ce problème avec la version précédente de ta dll avec la fonction "res% = dll_call2("GetFileDate",adr(f$),adr(v$))"
Merci de ton aide par avance
A+ Wink  Wink  Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Mar 14 Nov 2017 - 14:14

Est-ce que tu as essayé d'exécuter le programme comme administrateur (clic droit sur l'EXE - l'option est proposée). C'est une question de droit d'accès pour ce mode particulier d'accès au fichier. Puis, essaie de déterminer quel fichier est en cause -système ? invisible ? ouvert par le système ? fichier SWAP ou similaire ? Les informations de directory ne sont pas totalement accessibles pour tous les fichiers.

De toutes façons, je vais modifier ma fonction de sorte que l' problème d'accès ne conduise plus au plantage.

EDIT

La fonction est sécurisée maintenant (pas de changement de documentation). En cas de problème d'accès (ou fichier inexistant), elle retourne "00/00/0000 00:00:00".
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Mer 15 Nov 2017 - 0:41

Après la correction mentionnée ci-dessus, on peut "scanner" la racine C:\ sans problème. Voici le code:
Code:
' test_GetFileDateTime.bas

dim f$, res%, cre$, mod$, acc$, dir$

dll_on "KGF.dll"

memo 1 : full_space 1 : bar_both 1
dir$ = dir_current$
dir_change "C:"
f$ = file_find_first$
while f$<>"_"
  if left$(f$,1)<>"."
    cre$ = string$(255," ")
    res% = dll_call3("GetFileDateTime",adr(f$),0,adr(cre$))
    cre$ = trim$(cre$)
    mod$ = string$(255," ")
    res% = dll_call3("GetFileDateTime",adr(f$),1,adr(mod$))
    mod$ = trim$(mod$)
    acc$ = string$(255," ")
    res% = dll_call3("GetFileDateTime",adr(f$),2,adr(acc$))
    acc$ = trim$(acc$)
    item_add 1, f$+" création: "+cre$+chr$(13)+chr$(10)+"Modification: "+mod$+chr$(13)+chr$(10)+"Accès: "+acc$+chr$(13)+chr$(10)
  end_if
  f$ = file_find_next$
end_while
file_find_close

dir_change dir$
end

Et voici le résultat:
Spoiler:
 
On voit que les fichiers Hiberfile, Pagefile et Swapfile ne fournissent pas de date valide, mais ça marche pour tout le reste. Plus de bloquage.


Dernière édition par Klaus le Mer 15 Nov 2017 - 2:09, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
bignono

avatar

Nombre de messages : 1104
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Mer 15 Nov 2017 - 1:25

Bonsoir KLAUS Smile
Ça fonctionne parfaitement bien maintenant. Le bloquage se faisait sur le fichier install.exe dans la racine C:\
Merci bien Klaus, et bonne soirée.
A+ Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Marc



Nombre de messages : 551
Age : 56
Localisation : TOURS
Date d'inscription : 18/03/2014

MessageSujet: Re: KGF_dll - nouvelles versions   Mer 15 Nov 2017 - 1:59

Bonjour à tous !

Merci Klaus !
Je viens de faire l'essai sous Windows 10 : it's OK ! cheers
J'ai juste ajouté un espace ligne 22 devant le mot création pour séparer ce mot du nom du fichier. Autrement ils se touchent.

Avant, sans espace :
Spoiler:
 

Après, avec un espace devant "création" :
Spoiler:
 
Revenir en haut Aller en bas
Voir le profil de l'utilisateur En ligne
Klaus

avatar

Nombre de messages : 10262
Age : 68
Localisation : Ile de France
Date d'inscription : 29/12/2009

MessageSujet: Re: KGF_dll - nouvelles versions   Mer 15 Nov 2017 - 2:08

Tu as raison, Marc37. C'est bien plus lisible ainsi. J'adopte.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
bignono

avatar

Nombre de messages : 1104
Age : 60
Localisation : Val de Marne
Date d'inscription : 13/11/2011

MessageSujet: Re: KGF_dll - nouvelles versions   Sam 18 Nov 2017 - 16:58

Bonjour à tous  Very Happy , bonjour Klaus Smile
Je viens d'essayer les fonctions du scanner, et j'ai modifié un peu le programme essai que tu as posté plus haut, pour l'adapter à mes besoins. D'ailleurs, le voici:
Code:
caption 0,"SCANORAMIC"
label pret, close0, choix, scan1, scan2, sauver, nf

dim TW%, res%, sel%, f$, ff$, V$,C$,i,q
V$="<\:*?|/>"+chr$(34)

dll_on "C:\SCAN\KGF794.dll"

button 1 : top 1,10 : left 1,10 : width 1,110 : caption 1,"Scanner direct" : on_click 1,scan1
 button 2 : top 2,10 : left 2,130 : width 2,110 : caption 2,"Scanner dialogue" : on_click 2,scan2
button 3 : top 3,10 : left 3,250 : width 3,110 : caption 3,"Sauver" : on_click 3,sauver
alpha 4  : top 4,150: left 4,10  : font_bold 4 : caption 4,"Nom du fichier (préfixe+numéro)"
alpha 5  : top 5,175: left 5,10  : font_underline 5: caption 5,"Préfixe :"
alpha 6  : top 6,220: left 6,10  : font_underline 6: caption 6,"Numéro:"
edit 7   : top 7,175: left 7,60  : width 7,180 : text 7,"Image":on_change 7,nf
spin 8   : top 8,220: left 8,60  : width 8,50  : min 8,1 : max 8,999 : position 8,1:on_change 8,nf
alpha 9  : top 9,200: left 9,130 : font_bold 9 : caption 9,"Format image"
combo 10 :top 10,220:left 10,130 : width 10,90:on_change 10,nf
item_add 10,".bmp":item_add 10,".jpg":item_add 10,".png" : text 10,".jpg"
alpha 11 :top 11,250: left 11,10 :font_bold 11:font_color 11,0,0,255:gosub nf
list 12 : top 12,40 : left 12,10 : width 12,230 : on_click 12,choix
picture 14 : top 14,40 : left 14,250 : width 14,283 : height 14,400 : stretch_on 14

TW% = dll_call0("CreateScanner")
res% = dll_call2("GetScannerSources",TW%,handle(12))
sel% = dll_call1("GetSelectedScannerSource",TW%)
res% = dll_call2("SelectListBoxItem",handle(12),sel%)

on_user_event pret
on_close 0,close0

end

close0:
  res% = dll_call1("DeleteScanner",TW%)
return
  
choix:
  sel% = item_index(12):res% = dll_call2("SelectScannerSource",TW%,sel%)
return

scan1:
  res% = dll_call1("StartSelectedScanner",TW%)
return

scan2:
  res% = dll_call1("StartScannerWithDialog",TW%)
return
  
sauver:
  f$ = caption$(11)
  if file_exists(f$)=1
     if message_confirmation_yes_no("Ce fichier existe déjà. Remplacer ?")<>1 then return
  end_if
  clipboard_copy 14:res% = dll_call1("SaveAnyImageFile",adr(f$))
  position 8,position(8)+1
return

pret:
  res% = dll_call1("CopyScannerImapeToClipBoard",TW%):clipboard_paste 14:display
return

nf:
   ff$=upper$(text$(7))
   if ff$="CON" or ff$="PRN" or ff$="AUX" or ff$="NUL" or ff$="COM" or ff$="LPT"
      message "Nom de fichier interdit! Recommencez!":text 7,"Image"
   end_if
   for i=1 to len(V$)
      C$=mid$(V$,i,1):q=instr(text$(7),C$)
      if q>0 then message "Caractère interdit! Recommencez!":text 7,"Image"
   next i
   caption 11,"C:\SCAN\"+text$(7)+str$(position(8))+text$(10)
return
J'ai vu que l'on pouvait avoir accès à certain réglage avec le bouton "Scanner dialogue", ce qui est très bien, mais j'aurais aimé, plutôt que de passer par ce bouton, avoir accès à des fonctions supplémentaires telles le choix de la "résolution en ppp", une sélection directe en noir et blanc ou couleur et la possibilité de délimiter une zone à scanner dans l'aperçu de l'image.
Mais ne te casse pas la tête si ce n'est pas possible à faire ou trop difficile!
A bientôt.
Wink Wink Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: KGF_dll - nouvelles versions   

Revenir en haut Aller en bas
 
KGF_dll - nouvelles versions
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 15 sur 19Aller à la page : Précédent  1 ... 9 ... 14, 15, 16, 17, 18, 19  Suivant
 Sujets similaires
-
» Nouvelles versions éditeur et firmware FR3X
» Nouvelles versions de TC et TP
» Nouvelles versions de TypViewer 4.015 et suivantes
» Deux nouvelles versions de la Porsche 911 (type 991)
» Dacia : La Success Story Continue Avec Quatre Nouvelles Versions Et Séries Limitées

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: Activité des sites créés par les Panoramiciens. :: Le site de Klaus-
Sauter vers: