Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT | |
|
+8Klaus papydall silverman Jean Claude Yannick Marc Minibug Jack 12 participants | |
Auteur | Message |
---|
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Mar 30 Mai 2017 - 15:24 | |
| Voici comment j'ai fait en Delphi 6: - Spoiler:
procedure SendKeyBis(Wnd,VK : Cardinal; Ctrl,Alt,Shift : Boolean); var MC,MA,MS : Boolean;
procedure BuildEvent(key: cardinal; flag: cardinal); begin SKBInputs[SKBcnt].Itype := INPUT_KEYBOARD; SKBInputs[SKBcnt].ki.wVk := key; SKBInputs[SKBcnt].ki.dwFlags := flag; SKBcnt := SKBcnt + 1; end;
begin try // Try to bring target window to foreground ShowWindow(Wnd,SW_SHOW); SetForegroundWindow(Wnd);
// Get current state of modifier keys MC:=Hi(GetAsyncKeyState(VK_CONTROL))>127; MA:=Hi(GetAsyncKeyState(VK_MENU))>127; MS:=Hi(GetAsyncKeyState(VK_SHIFT))>127;
SKBcnt := 0;
// Press modifier keys if necessary (unless already pressed by real user) if Ctrl<>MC then BuildEvent(VK_CONTROL,Byte(MC)*KEYEVENTF_KEYUP); if Alt<>MA then BuildEvent(VK_MENU, Byte(MA)*KEYEVENTF_KEYUP); if Shift<>MS then BuildEvent(VK_SHIFT, Byte(MS)*KEYEVENTF_KEYUP);
// Press key BuildEvent(VK,0); BuildEvent(VK,KEYEVENTF_KEYUP);
// Release modifier keys if necessary if Ctrl<>MC then BuildEvent(VK_CONTROL,Byte(Ctrl)* KEYEVENTF_KEYUP); if Alt<>MA then BuildEvent(VK_MENU, Byte(Alt)* KEYEVENTF_KEYUP); if Shift<>MS then BuildEvent(VK_SHIFT, Byte(Shift)*KEYEVENTF_KEYUP); SendInput(SKBcnt, SKBInputs[0], SizeOf(SKBInputs[0]));
finally end; end;
// envoi d'unt touche quelconque, avec la gestion de Ctrl, Shift et Alt function SendSingleKey(const hnd,VK,Ctrl,Alt,Shift:integer):integer; stdcall; export; var bCtrl,bAlt,bShift: boolean; begin try bCtrl := (Ctrl<>0); bAlt := (Alt<>0); bShift := (Shift<>0); SetFocus(hnd); SendKeyBis(hnd,VK,bCtrl,bAlt,bShift); finally result := 0; end; end; exports SendSingleKey;
| |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Mer 31 Mai 2017 - 18:46 | |
| Bonsoir à tous, Ça y est ! en avançant dans mon code j'ai enfin compris le problème avec Annuler et Refaire. La question de Jack est: pourquoi voulez-vous cette commande, du moins c'est ce que j'ai compris. Je vais tenter d'expliquer la chose: Je résume les 2 raccourcis claviers Ctrl+Z et Ctrl+Maj+Z pour Annuler et Refaire fonctionnent très bien dans SYNEDIT, par contre ce n'est pas programmable (à partir d'un menu, par exemple). Alors que dans l'éditeur Panoramic il y a bien la fonction Annuler dans le menu Edition et elle fonctionne à partir de ce menu. Le code ci-dessous met en évidence le problème. - Code:
-
synedit 1 item_add 1,"bonjour les amis" item_add 1,"" item_add 1,"Démonstration Pour Annuler ou Refaire " item_add 1,""
label Annuler,Refaire Main_menu 2 sub_menu 3 : parent 3,2 : caption 3,"Annuler" : on_click 3,Annuler sub_menu 4 : parent 4,2 : caption 4,"Refaire" : on_click 4,Refaire
END Annuler: message "Inopérant par le menu, utiliser votre clavier Ctrl+Z" RETURN
Refaire: message "Inopérant par le menu, utiliser votre clavier Ctrl+Maj+Z" RETURN
Pour te convaincre, Jack: prenons l'exemple d'un utilisateur qui débute en programmation et qui ne connait pas forcément tous les raccourcis clavier. S'il n'a pas, dans le menu, (ou un bouton dans une toolbar) les possibilités annuler et refaire et qu'il ne connait pas les raccourcis le voilà privé de 2 possibilités importantes pour un éditeur. Au mieux il sait que ces 2 fonctions existent et va chercher ou demander sur le forum... Au pire, il ne le sait pas, .... A+ | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Mer 31 Mai 2017 - 19:16 | |
| | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Mer 31 Mai 2017 - 20:05 | |
| - Laurent a écrit:
- Je suis content que tu es réussi à reproduire l'erreur.
Je ne suis pas certain que ce soit une erreur, un oubli peut-être. Pour comprendre le problème, il a fallu que j'ai eu besoin de coder ces 2 fonctions (Annuler,Refaire). Un bon exemple, est plus facile à comprendre. A+ | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Sam 3 Juin 2017 - 10:14 | |
| - Jack a écrit:
- Je ne comprends toujours pas pourquoi vous voulez émuler l'envoi des touches CTRL+X, CTRL+C et CTRL+V sur un objet.
En fait, il y a un pb de synchronisation entre les actions codé par programmation et celles de l'objet synedit. Imaginons que dans le traitement de texte WORD, on décide d'utiliser à plusieurs reprise CTRL+X puis d'annuler ces actions par CTRL+Z et le sous menu annuler du menu édition; Si le raccourci CTRL+Z ne faisait pas la même chose que le sous menu "annuler", ce serait très ennuyeux pour les utilisateurs. D'où le souhait de qq uns de vouloir émuler l'envoi des touches CTRL+X, CTRL+C, CTRL+V et CTRL+Z sur l'objet synedit, puisque ces actions réalisées par programmation ne sont pas synchronisées avec celles des raccourcis de l'objet synedit. De plus, les CTRL+X/C/V/Z programmés avec 'on_key_xxx' interfères avec ceux de l'objet synedit. Une autre solution qui serait aussi valable selon moi, serait de créer une commande pour désactiver/activer les raccourcis natifs de l'objet synedit, cela règlerait le pb d'émulation d'envoi de touches et de synchronisation, mais nécessiterait le codage des fonctions undo/redo par les panoramiciens. | |
| | | Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Sam 3 Juin 2017 - 11:03 | |
| - Citation :
- mais nécessiterait le codage des fonctions undo/redo par les panoramiciens.
Oh là, attention ! Comme je plonge dans les entrailles du Synedit, j'en sais quelque chose sur la façon dont c'est implémenté, et entre autres, sur les Undo/Redo. C'est un véritable monument et dépasse de loin la mémorisation de quelques portions de texte. Il y a l'ensemble des actions sur le texte à considérer, y compris la gestion des raccourcis (ctrl/1, ctrl/2, ...). A mon avis, il faut absolument garder l'accès aux fonctions natives de l'objet Synedit - c'est l'essentiel de sa puissance. | |
| | | Jean Claude
Nombre de messages : 5950 Age : 70 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Sam 3 Juin 2017 - 11:29 | |
| Bonjour à tous, - Silverman a écrit:
- Une autre solution qui serait aussi valable selon moi, serait de créer une commande pour désactiver/activer les raccourcis natifs de l'objet synedit, ....
Une commande de plus, qui à mon avis ne servira à personne. Quel intérêt de désactiver les raccourcis natifs de SYNEDIT, si on utilise SYNEDIT c'est que l'on fait un éditeur pour programmer donc on a besoin de ces raccourcis. Sinon en supposant que la fonction existe, il faudra tout reprogrammer ces fonctions (bonjour le plaisir et les bugs ). Bon, c'est vrai qu'on ne sera pas obligé de s'en servir.... En fait, au stade où j'en suis de mon code, il ne me manque que la possibilité de pouvoir déclencher Ctrl+Z et son contraire, ou par le menu, ou par 2 boutons. Les autres fonctions sont codées, sauf Ctrl+C qui bug comme je l'ai signalé ici => https://panoramic.1fr1.net/t5302-copier-coller-dans-synedit-bug#65275.J'attends que Jack ai du temps pour regarder tous ça en détail, pour poster mon code. A+ | |
| | | Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Sam 3 Juin 2017 - 12:49 | |
| - Citation :
- Une commande de plus, qui à mon avis ne servira à personne.
Tout à fait d'accord avec toi Jean Claude ! Tous ceux qui ont programmé SYNEDIT avant qu'il ne soit introduit dans Panoranic, grâce à la dll de Klaus ne me contrediront pas ! Il faut savoir et je le répète, qu'a la base tous les raccourcis implantés par défaut (natifs) fonctionnent parfaitement dans SYNEDIT. Alors, comme dirait Yannick, pourquoi réinventer la roue ? Et comme le dit Klaus, il faut garder ses fonctions natives ! Le seul problème qui se pose aujourd'hui c'est la possibilité de déclencher les raccourcis de SYNEDIT par la programmation des touches de ces mêmes raccourcis. Même si cela n'est pas le plus facile, je pense que c'est la meilleur solution, de la même manière que Klaus l'a fait dans sa dll. | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Sam 3 Juin 2017 - 21:42 | |
| D' autant que d' autres fonctions dispose dans le SYNEDIT de KGF et sûrement plus chronophage pour être programmées seront utiles... Exemple : connaitre la ligne et la colonne du caret ... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Re Sam 3 Juin 2017 - 21:43 | |
| doublon. | |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Mer 7 Juin 2017 - 10:09 | |
| En plus de l'editeur, il y a corruption d'affichage de l'objet synedit. Plusieurs panoramiciens on confirmer ce pb, Jean Claude a trouver le moyen pour le reproduire à chaque fois, ici. | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Ven 15 Sep 2017 - 6:58 | |
| Bonjour Jack Peut tu mettre les commandes clipboard_copy ; clipboard_Paste et clipboard_Cut a synedit merci d'avance
| |
| | | silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Ven 15 Sep 2017 - 14:45 | |
| Bonjour à tous @pascal1000 Tu peux obtenir la même chose avec ces subs(dll "user32", donc uniquement windows): - Code:
-
dim i
EXTEND_SYNEDIT() :' AJOUTER DES COMMANDES A L'OBJET SYNEDIT
synedit 1 : set_focus 1 item_add 1,"azertyuiop"
' sélectionner du texte select_text 1,1,4 pause 500
' le couper SYNEDIT_CUT(1) :' couper ' SYNEDIT_COPY(1) :' ou tout simplement copier pause 500
' le coller à la fin du synedit for i=1 to 5 NEW_LINE(1) SYNEDIT_PASTE%(1) :' coller pause 500 next i
' annuler tout for i=6 to 1 step -1 SYNEDIT_UNDO%(1) :' annuler(undo) if i>1 then DELETE_CURRENT_LINE(1) :' n'efface pas la première ligne pause 500 next i
caret_position 1,0 END ' sub NEW_LINE(synedit%) dim_local xx,x,cpt,cp ' cré une nouvelle ligne item_add 1,"" x=find(chr$(13),1,caret_position(1)) ' positionne le caret au début de la ligne caret_position 1,x+1 end_sub
sub DELETE_CURRENT_LINE(synedit%) dim_local x,cpt,cp ' recherche de la ligne courante cp=caret_position(synedit%) x=find(chr$(13),synedit%,cp) while x>0 cpt=cpt+1 x=find(chr$(13),synedit%,x+1) end_while ' la supprimer item_delete 1,count(synedit%)-cpt ' repositionner le caret if cp>1 then caret_position 1,cp-2 end_sub
sub EXTEND_SYNEDIT() if variable("WM_CUT%")=0 ' commande : dim WM_CUT%,WM_COPY%,WM_PASTE%,WM_UNDO% WM_CUT% =768 :' ctrl+x : couper WM_COPY% =769 :' ctrl+c : copier WM_PASTE%=770 :' ctrl+v : coller WM_UNDO% =772 :' ctrl+z : annuler(undo) ' dim user32% user32%=2 ' LIBRARY user32%,"user32.dll" command "message_for_synedit","SendMessageA",user32%,"IIII","stdcall" ' ex.: message_for_synedit handle(N), window_message%, my_value1%, my_value2% end_if end_sub
sub SYNEDIT_CUT(synedit%) message_for_synedit handle(synedit%),WM_CUT%,0,0 end_sub
sub SYNEDIT_COPY(synedit%) message_for_synedit handle(synedit%),WM_COPY%,0,0 end_sub
sub SYNEDIT_PASTE%(synedit%) message_for_synedit handle(synedit%),WM_PASTE%,0,0 end_sub
sub SYNEDIT_UNDO%(synedit%) message_for_synedit handle(synedit%),WM_UNDO%,0,0 end_sub
@jack Qu'en est-il du pb de corruption d'affichage? | |
| | | pascal10000
Nombre de messages : 812 Localisation : Troyes Date d'inscription : 05/02/2011
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Ven 15 Sep 2017 - 15:20 | |
| oui sylverman je le sais et grâce a papydall | |
| | | Fredisland
Nombre de messages : 261 Date d'inscription : 30/03/2018
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT Dim 15 Avr 2018 - 17:11 | |
| Je déterre ce vieux sujet, parce qu'il correspond pile poil à mes soucis du moment : grande limite dans le contrôle du Synedit via PANORAMIC, et impossiiblité d'émuler des touches du clavier sur l'objet Synedit. Donc mon post n'apportera pas grand chose, mais il est juste ici pour notifier que Synedit est un composant suffisamment utile pour rester un sujet de préoccupation. Mon objectif serait au moins d'utiliser les mêmes raccourcis clavier que ceux utilisés sur mon chouchou Notgepad++. Mais je vais patienter jusqu'à la prochaine mise à jour de PANORAMIC, que j'aime beaucoup. | |
| | | Contenu sponsorisé
| Sujet: Re: Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT | |
| |
| | | | Version instantanée V 0.9.28i9 possédant l'objet SYNEDIT | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |