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
» Exemple d'une nouvelle version d'un GRID
par Minibug Mer 16 Jan 2019 - 18:23

» Peut-être un bug de l'éditeur pour Jack
par jjn4 Lun 14 Jan 2019 - 17:45

» Wordpic.2
par jjn4 Sam 12 Jan 2019 - 16:34

» Fichier <-> Datas
par jjn4 Sam 12 Jan 2019 - 16:23

» Version instantanée V 0.9.29i6 du 08/01/2019
par Jack Mer 9 Jan 2019 - 7:50

» Make_Exe avec la version V 0.9.29i6
par Jack Mar 8 Jan 2019 - 20:14

» caret_yb_position
par jjn4 Mar 8 Jan 2019 - 19:34

» Problème avec l'analyseur syntaxique de Panoramic.
par jjn4 Lun 7 Jan 2019 - 14:44

» PanExpress : l'éditeur Panoramic avec création d'objet
par Minibug Dim 6 Jan 2019 - 18:39

» Bonne année 2019
par silverman Sam 5 Jan 2019 - 12:02

» Blocage Editeur
par Minibug Mar 1 Jan 2019 - 15:54

» Un texte clignotant
par JL35 Mar 1 Jan 2019 - 13:50

» Bonnes fêtes de fin d'année !
par JL35 Mar 1 Jan 2019 - 0:04

» ON_CLICK sur HVIEWER
par JL35 Lun 31 Déc 2018 - 16:56

» Logiciel de soutien scolaire.
par Pedro Alvarez Lun 31 Déc 2018 - 7:51

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Janvier 2019
LunMarMerJeuVenSamDim
 123456
78910111213
14151617181920
21222324252627
28293031   
CalendrierCalendrier

Partagez | 
 

 USER32.DLL et SendMessageA sur FORM 0

Aller en bas 
AuteurMessage
xxx



Nombre de messages : 261
Date d'inscription : 30/03/2018

MessageSujet: USER32.DLL et SendMessageA sur FORM 0   Lun 30 Avr 2018 - 23:53

Bonjour,

A l'époque où je codais avec l'excellent PowersoftMaker dont je pleure chaque jour l'arrêt du développement, j'utilisais une astuce toute bête pour autoriser le déplacement d'une fenêtre sur tout son espace et pas seulement sur la barre de titre afin de skinner intégralement mes applications. Ce "truc" est disponible partout sur le net ( comme ici : Moving a Form without the Title Bar).

Seulement voilà, avec PANORAMIC, impossibilité de reproduire le même fonctionnement. Quelqu'un a-t-il assez de connaissance pointue sur le sujet pour résoudre mon souci ? Merci infiniment, voire au-delà.

Code:
dll_on "user32" : dim res%
label deplace,exit
on_mouse_down 0, deplace
on_close 0,exit
END  

deplace:
    res% = dll_call4("SendMessageA",handle(0),161,2,0)
return

exit:
    dll_off
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
papydall

avatar

Nombre de messages : 6063
Age : 68
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 0:48

Hello Fred
Tu dois appeler ReleaseCapture avant SendMessageA

Comme ceci

Code:

dll_on "user32" : dim res%
label deplace,exit
on_mouse_down 0, deplace
on_close 0,exit
END  

deplace:
    res% = dll_call0("ReleaseCapture")
    res% = dll_call4("SendMessageA",handle(0),161,2,0)
return

exit:
    dll_off
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
xxx



Nombre de messages : 261
Date d'inscription : 30/03/2018

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 0:55

papydall a écrit:
Hello Fred
Tu dois appeler ReleaseCapture avant SendMessageA

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

avatar

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

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 0:58

Bravo, Papydall !

Voici un code 100 % Panoramic, sans API, pour faire la même chose:
Code:
label down, move, up
dim xp0%, yp0%, x%, y%, d%
on_mouse_down 0,down
on_mouse_move 0,move
on_mouse_up 0,up
END 

deplace:
    res% = dll_call0("ReleaseCapture)
    res% = dll_call4("SendMessageA",handle(0),161,2,0)
return

down:
  xp0% = mouse_x_left_down(0)
  yp0% = mouse_y_left_down(0)
  d% = 1
  return
 
up:
  d% = 0
  return
 
move:
  if d%=1
    x% = mouse_x_position(0)
    y% = mouse_y_position(0)
    left 0,left(0) - (xp0%-x%)
    top 0,top(0) - (yp0%-y%)
  end_if
  return 



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

avatar

Nombre de messages : 6063
Age : 68
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 1:00

king

Cette astuce est très utile si la barre de titre de la fenêtre est invisible.
Il suffit de cliquer n’importe où dans la fenêtre et déplacer tout en maintenant le bouton de la souris.

Code:

dll_on "user32" : dim res%
label deplace,exit
top 0,-100 : ' la barre de titre est hors vision
on_mouse_down 0, deplace
on_close 0,exit
END  

deplace:
    res% = dll_call0("ReleaseCapture")
    res% = dll_call4("SendMessageA",handle(0),161,2,0)
return

exit:
    dll_off
return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
xxx



Nombre de messages : 261
Date d'inscription : 30/03/2018

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 1:13

Klaus a écrit:
Bravo, Papydall !

Voici un code 100 % Panoramic, sans API, pour faire la même chose:

C'est encore plus magique !!! Mille merci.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 1:14

Citation :
Cette astuce est très utile si la barre de titre de la fenêtre est invisible.
ou pour une form avec BORDER_HIDE !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
papydall

avatar

Nombre de messages : 6063
Age : 68
Localisation : Moknine (Tunisie) Entre la chaise et le clavier
Date d'inscription : 03/03/2012

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 1:39

Peut-être trouveriez-vous une quelconque utilité pour cet autre code.
Envoyer une ou plusieurs entrées clavier vers la fenêtre active comme si ces dernières étaient saisies depuis le clavier.

Code:

rem ============================================================================
rem                  SendKeys
rem                Par Papydall
rem ============================================================================
rem Envoie une ou plusieurs entrées clavier vers la fenêtre active comme si ces
rem dernières étaient saisies depuis le clavier.
rem Syntaxe : SendKeys(string)
rem string :  Expression de chaîne spécifiant les entrées clavier à envoyer.
rem Chaque touche est représentée par un ou plusieurs caractères.
rem Pour spécifier un caractère unique, utilisez le caractère correspondant.
rem Par exemple, pour représenter la lettre A, utilisez la chaîne "A".
rem Pour représenter plusieurs caractères, entrez les caractères les uns à la
rem suite des autres.
rem Pour représenter les lettres A, B et C, utilisez la chaîne "ABC".
rem
rem Les signes plus (+), circonflexe (^), pourcentage (%), tilde (~), parenthèses ( )
rem possèdent des significations spéciales pour SendKeys.
rem Pour spécifier l’un de ces caractères, incluez-le entre des accolades {}
rem Par exemple, pour spécifier le signe plus, utilisez {+}
rem Les crochets ([ ]) ne possèdent pas de signification particulière pour SendKeys,
rem mais vous devez tout de même les inclure entre des accolades.
rem Pour spécifier des accolades, utilisez {{} et {}}.

rem Pour spécifier des caractères qui ne sont pas affichés lorsque vous appuyez
rem sur une touche, tels que ENTRÉE ou TAB, ainsi que des touches qui représentent
rem des actions et non des caractères, utilisez les codes affichés dans le tableau suivant :

rem Touche   Code
rem ESPACE ARRIÈRE   {BACKSPACE}, {BS}, ou {BKSP}
rem ARRÊT DÉFIL   {BREAK}
rem VERR. MAJ   {CAPSLOCK}
rem SUPPR ou SUPPRIMER   {DELETE} ou {DEL}
rem FLÈCHE VERS LE BAS   {DOWN}
rem FIN   {END}
rem ENTRÉE   {ENTER} ou ~
rem ÉCHAP   {ESC}
rem AIDE   {HELP}
rem ORIGINE   {HOME}
rem INS OU INSER   {INSERT} ou {INS}
rem FLÈCHE GAUCHE   {LEFT}
rem VER NUM   {NUMLOCK}
rem PAGE SUIV   {PGDN}
rem PAGE PRÉC   {PGUP}
rem IMPR ÉCRAN   {PRTSC}
rem FLÈCHE DROITE   {RIGHT}
rem ARRÊT DÉFIL   {SCROLLLOCK}
rem TAB   {TAB}
rem FLÈCHE HAUT   {UP}
rem F1   {F1}
rem F2   {F2}
rem F3   {F3}
rem F4   {F4}
rem F5   {F5}
rem F6   {F6}
rem F7   {F7}
rem F8   {F8}
rem F9   {F9}
rem F10   {F10}
rem F11   {F11}
rem F12   {F12}
rem F13   {F13}
rem F14   {F14}
rem F15   {F15}
rem F16   {F16}

rem Pour spécifier des combinaisons de touches avec les touches MAJ, CTRL et ALT,
rem faites précéder le code de la touche par un ou plusieurs des codes suivants :
rem Touche Code
rem MAJ    +
rem CTRL    ^
rem ALT    %

rem Pour spécifier une combinaison dans laquelle la touche MAJ, CTRL et ALT
rem doit être maintenue enfoncée alors que vous appuyez sur d’autres touches,
rem incluez le code de ces touches entre parenthèses.
rem Par exemple, pour indiquer que la touche MAJ doit être enfoncée alors que vous
rem appuyez sur les touches E et C, utilisez "+(EC)".
rem Pour spécifier que la touche MAJ doit être enfoncée alors que vous appuyez sur
rem la touche E, suivi de la touche C sans que la touche MAJ ne soit enfoncée,
rem utilisez "+EC".

rem Pour indiquer la répétition de touches, utilisez la forme {touche nombre}
rem Veillez à placer un espace entre la touche et le nombre de fois que cette
rem touche doit être entrée.
rem Par exemple:
rem {LEFT 42}
rem signifie l’activation de la touche FLÈCHE GAUCHE 42 fois.
rem {h 10}
rem indique que la touche H doit être appuyée 10 fois.
rem ============================================================================
rem Exemple 1
rem Envoyer des caractères à un memo
rem ============================================================================
 dim i
 memo 10 : height 10,200 : font_bold 10  : font_color 10,0,0,255 : set_focus 10
 memo 20 : left 20,200 : height 20,200 : font_bold 20 : font_color 20,255,0,0 :hide 20

 SendKeys("+salut")  : ' seule la lettre s est en majuscule
 SendKeys("+(tout)") : ' le mot tout est en majuscule
 SendKeys("le")
 SendKeys("monde")
 SendKeys("{* 30}") : ' 30 *
 SendKeys("+nous sommes le "+ date$)
 SendKeys("+il est : " + time$)
rem ============================================================================
rem Exemple 2
rem Envoyer des caractères à la calculatrice
rem ============================================================================
SendKeys_Calc("10{+}20~*30~")  : ' Envoyer 10+20 + <ENTREE> *30 + <ENTREE> ; le résultat est 900
message "Arrêter la calculatrice"
TaskKill("calc.exe") : ' Fermer la calculatrice
show 20 : set_focus 20 : pause 500
rem ============================================================================
rem Exemple 3
rem Envoyer un texte au memo 20
rem ============================================================================
SendKeys("+that's all folks!")
for i = 10 to 0 step -1
    SendKeys("+bye bye dans " + str$(i)+ " secondes") : pause 1000
next i
rem ============================================================================
terminate

rem ============================================================================
rem Envoyer des caractères à la fenêtre active
SUB SendKeys(key$)
    dim_local q$
    q$ = chr$(34)
    file_open_write 9999,"SendKeys.vbs"
    file_writeln 9999,"set WshShell = WScript.CreateObject(" + q$ + "WScript.Shell" + q$ + ")"
    file_writeln 9999,"WshShell.SendKeys "+ q$ + key$ + q$
    file_writeln 9999,"WshShell.SendKeys "+ q$ + "~" + q$
    file_close 9999
    execute_wait "SendKeys.vbs"
    file_delete "SendKeys.vbs"
END_SUB
rem ============================================================================
rem Envoyer des caractères à la calculatrice
SUB SendKeys_Calc(key$)
    dim_local q$
    q$ = chr$(34)
    file_open_write 9999,"SendKeys_Calc.vbs"
    file_writeln 9999,"set WshShell = WScript.CreateObject(" + q$ + "WScript.Shell"+ q$ +")"
    file_writeln 9999,"WshShell.Run "+ q$ + "calc" + q$
    file_writeln 9999,"WScript.Sleep 500"
    file_writeln 9999,"WScript.Sleep 100"
    file_writeln 9999,"WshShell.SendKeys " + q$ + key$ + q$
    
    file_close 9999
    execute_wait "SendKeys_Calc.vbs"
    file_delete "SendKeys_Calc.vbs"
END_SUB
rem ============================================================================
rem Terminer une application
SUB TaskKill(task$)
    dim_local q$
    q$ = chr$(34)
    file_open_write 9999,"TaskKill.vbs"
    file_writeln 9999,"set WshShell = WScript.CreateObject(" + q$ + "WScript.Shell"+ q$ +")"
    file_writeln 9999,"Set oExec = Wshshell.exec("+q$+"taskkill.exe /im "+task$+q$+")"
    file_writeln 9999,"WScript.Sleep 100"
    file_close 9999
    execute_wait "TaskKill.vbs"
    file_delete "TaskKill.vbs"
END_SUB
rem ============================================================================
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://papydall-panoramic.forumarabia.com/
Klaus

avatar

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

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 9:36

Avec l'aide de Silverman, j'ai pu simplifier mon code pour le déplacement d'une form:
Code:
label move
dim xp0%, yp0%, x%, y%, d%
d% = 0
on_mouse_move 0,move
END

move:
  if mouse_left_down(0)>0
    d%=1
    xp0% = mouse_x_left_down(0)
    yp0% = mouse_y_left_down(0)
  end_if
  if mouse_left_up(0)>0 then d%=0
  if d%=1
    x% = mouse_x_position(0)
    y% = mouse_y_position(0)
    left 0,left(0) - (xp0%-x%)
    top 0,top(0) - (yp0%-y%)
  end_if
  return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
silverman

avatar

Nombre de messages : 735
Age : 46
Localisation : Picardie
Date d'inscription : 18/03/2015

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 9:45

@Klaus
Excellent... et hop, archivé! Very Happy
Même si ça marche parfaitement, tu devrais placer le couple 'off_mouse_move/on_mouse_move' pour éviter un potentiel plantage Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Klaus

avatar

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

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 9:54

Comme ceci:
Code:
label move
dim xp0%, yp0%, x%, y%, d%
d% = 0
on_mouse_move 0,move
END

move:
  off_mouse_move 0
  if mouse_left_down(0)>0
    d%=1
    xp0% = mouse_x_left_down(0)
    yp0% = mouse_y_left_down(0)
  end_if
  if mouse_left_up(0)>0 then d%=0
  if d%=1
    x% = mouse_x_position(0)
    y% = mouse_y_position(0)
    left 0,left(0) - (xp0%-x%)
    top 0,top(0) - (yp0%-y%)
  end_if
  on_mouse_move 0,move
  return
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
Klaus

avatar

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

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 10:03

Cette astuce permet d'avoir une form sans bord, avec une barre de titre simulée par un PICTURE. On tire cette form par ce PICTURE, pas par la form elle-même. Ceci permet de s'affranchir totalement de la croix rouge. On peut ensuite y placer les boutons qu'on veut - ici, la simulation d'un bouton plat pour sortir:
Code:
label move, exit
dim xp0%, yp0%, x%, y%, d%
d% = 0
border_hide 0
picture 1 : width 1,width_client(0) : height 1,30 : color 1,255,255,0
picture 2 : width 2,20 : height 2,20 : color 2,255,0,0
  top 2,5 : left 2,width_client(0)-25
  font_bold 2 : font_size 2,10 : font_color 2,255,255,255
  2d_target_is 2 : 2d_fill_color 255,0,0
  print_target_is 2 : print_locate 5,2 : print "X"
  on_click 2,exit             
on_mouse_move 1,move
END

move:
  off_mouse_move 1
  if mouse_left_down(1)>0
    d%=1
    xp0% = mouse_x_left_down(1)
    yp0% = mouse_y_left_down(1)
  end_if
  if mouse_left_up(1)>0 then d%=0
  if d%=1
    x% = mouse_x_position(1)
    y% = mouse_y_position(1)
    left 0,left(0) - (xp0%-x%)
    top 0,top(0) - (yp0%-y%)
  end_if
  on_mouse_move 1,move
  return
 
  exit:
    if message_confirmation_yes_no("Voulez-vous vraiment sortir ?")<>1 then return
    terminate
   
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://klauspanoramic.comxa.com/index.html
xxx



Nombre de messages : 261
Date d'inscription : 30/03/2018

MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   Mar 1 Mai 2018 - 11:29

Très très bien tous ces bouts de code.. A conserver Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: USER32.DLL et SendMessageA sur FORM 0   

Revenir en haut Aller en bas
 
USER32.DLL et SendMessageA sur FORM 0
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Tuoril pour mieu métriser son form
» Pour les fêtes ....
» GlobalMemoryStatus
» Afficher plusieurs lignes de texte sur un form
» Trapcode Particular dans nuke

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: A l'aide!-
Sauter vers: