Question à Gnozal...

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Question à Gnozal...

Message par Chris »

... puisque c'est lui, maintenant, qui s'occupe de jaPBe.

(Mais si vous connaissez la réponse, ne vous gênez pas, hein!) :wink:

Comment faire pour que, quand un plugin est en cours d'exécution, le menu contenant les autres plugins soit toujours disponible?

Par exemple, si vous lancez "CodeExplorer", le menu des plugins est grisé. (La partie du bas, contenant les plugins "non protégés".)
Pareil pour mon CharMap.

Par contre, ça ne le fait pas pour le VisualDesigner ou ToDo List.

Bug, ou commande spéciale à mettre dans le code???
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Quand un plugin est lancé, on ne peut en exécuter un autre en même temps (jaPBe ne peut communiquer par l'interface plugin qu'avec un seul plugin en même temps), et donc les plugins sont inactivés.
Quand un outil est lancé, il n'y a pas cette restriction.

Plugin : exe localisé dans le répertoire 'Plugin' de jaPBe (lancé par jaPBe avec une ligne de commande spéciale)
Outil : exe non localisé dans le répertoire 'Plugin' de jaPBe
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Ah! Ok!

Mais alors. Pourquoi le fichier "ToDo-List.exe" qui est un plugin (il est dans le dossier des plugins, en tout cas) ne bloque pas la liste des plugins?
Pareil pour "MessageRequester.exe".
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Voici le code de GPI dans Plugin.pbi et appelé dans Tools.pbi par addtools_MenuClicked() :

Code : Tout sélectionner

    If AddTools_Entries()\IsPlugIn=#IsPlugin_Plugin
      If (plugin_Handle\l=0 Or plugin_Handle\l=-2)
        Plugin_CompilerSendTo=0
        path.s = GetCurrentPath()+"plugin\"
        Plugin_Start$=path+AddTools_Entries()\Command+".exe"
        Plugin_Argument$="jaPBe "+Str(MainWin)+" "+jaPBeVer
        
        plugin_Handle\l=-1
        ;Debug "RunThread"
        PluginThread=CreateThread(@PlugIn_RunThread(),@plugin_Handle)
        
        AddMessage(Language$(211)+" "+AddTools_Entries()\Command+" ...")
        menu_DisablePlugin(#True) ; <----------------------
        Plugin_DisableEditor()
      EndIf
    Else
Je n'ai pas vraiment le temps de creuser ...
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Argggg!

Ca m'avance pas beaucoup, ça. :(

En fait, ce que je voudrais faire, c'est mettre en plugin mon explorateur de dossier CodeArchiv (qui n'intéresse personne à part moi), mais qu'il démarre en même temps que jaPBe.

Pour le mettre en plugin, c'est fait, il démarre en même temps que jaPBe, mais le problème c'est que je n'ai plus accès aux autre plugins puisque le menu est verrouillé.

J'ai bien essayé de le laisser en outil, mais pour avoir l'option "Ouverture de jaPBe", il faut cocher la case "Attendre la fin de l'exécution".

Bref, d'un côté comme de l'autre, ça fonctionne pas. :?
gnozal
Messages : 832
Inscription : mar. 07/déc./2004 17:35
Localisation : France
Contact :

Message par gnozal »

Après avoir jeté un coup d'oeil aux sources du plugin ToDo, je pense que le menu de jaPBe reste activé parce que le plugin envoie #mywm_Plugin_Cancel à jaPBe après s'être lancé.
C'est un message que le plugin n'est sensé envoyer que lorsqu'on le ferme. Il signale à jaPBe que le plugin est fermé.

Code : Tout sélectionner

If OpenWindow(10,0,200,200,200,#PB_Window_Invisible,"jaPBe-Plugin")
  SetWindowCallback(@Callback())
  OpenThisFile=ProgramParameter()
  If OpenThisFile="jaPBe"
    jaPBe_Handle=Val(ProgramParameter())
    jaPBe_Version$=ProgramParameter()
    
    a$=jaPBe_GetCompileThis()
    If a$=""
      a$=jaPBe_GetCurrentFileName()
    EndIf
    ;Important: Never delete the follow line!
    PostMessage_(jaPBe_Handle,#mywm_Plugin_Cancel,0,WindowID(10))
    ;jaPBe_InsertTextS("***"+path$+"***")
    If a$
      path$=GetPathPart(a$)
      a$=GetFilePart(a$)
      a$=Left(a$,Len(a$)-Len(GetExtensionPart(a$))-1)
      OpenThisFile=path$+a$+".lst"
;       If FileSize(path$+"todo.txt")>=0
;         OpenThisFile=path$+"todo.lst"
;         ;ShellExecute_(MainWin,"open",path$+"todo.txt","","",#SW_SHOWNORMAL)
;       Else
;         ;#CSIDL_WINDOWS = $24
;         ;ShellExecute_(MainWin,"open","NOTEPAD.EXE",path$+"todo.txt","",#SW_SHOWNORMAL)
;       EndIf 
    EndIf
    
  ;Else
    ;Debug "don't run out of japbe"
    ;MessageRequester("ToDo-List","This is a jaPBe-Plugin"+Chr(10)+"You can't run it without jaPBe",0)
  EndIf
  CloseWindow(10)
Else
  MessageRequester("ToDo-List","Can't open a window!",0)
EndIf
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

gnozal a écrit :Après avoir jeté un coup d'oeil aux sources du plugin ToDo, je pense que le menu de jaPBe reste activé parce que le plugin envoie #mywm_Plugin_Cancel à jaPBe après s'être lancé.
C'est un message que le plugin n'est sensé envoyer que lorsqu'on le ferme. Il signale à jaPBe que le plugin est fermé.

Code : Tout sélectionner

If OpenWindow(10,0,200,200,200,#PB_Window_Invisible,"jaPBe-Plugin")
  SetWindowCallback(@Callback())
  OpenThisFile=ProgramParameter()
  If OpenThisFile="jaPBe"
    jaPBe_Handle=Val(ProgramParameter())
    jaPBe_Version$=ProgramParameter()
    
    a$=jaPBe_GetCompileThis()
    If a$=""
      a$=jaPBe_GetCurrentFileName()
    EndIf
    ;Important: Never delete the follow line!
    PostMessage_(jaPBe_Handle,#mywm_Plugin_Cancel,0,WindowID(10))
    ;jaPBe_InsertTextS("***"+path$+"***")
    If a$
      path$=GetPathPart(a$)
      a$=GetFilePart(a$)
      a$=Left(a$,Len(a$)-Len(GetExtensionPart(a$))-1)
      OpenThisFile=path$+a$+".lst"
;       If FileSize(path$+"todo.txt")>=0
;         OpenThisFile=path$+"todo.lst"
;         ;ShellExecute_(MainWin,"open",path$+"todo.txt","","",#SW_SHOWNORMAL)
;       Else
;         ;#CSIDL_WINDOWS = $24
;         ;ShellExecute_(MainWin,"open","NOTEPAD.EXE",path$+"todo.txt","",#SW_SHOWNORMAL)
;       EndIf 
    EndIf
    
  ;Else
    ;Debug "don't run out of japbe"
    ;MessageRequester("ToDo-List","This is a jaPBe-Plugin"+Chr(10)+"You can't run it without jaPBe",0)
  EndIf
  CloseWindow(10)
Else
  MessageRequester("ToDo-List","Can't open a window!",0)
EndIf
Merci. Je vais tester ça.

Et si ça ne marche pas, je reviendrais te casser les pieds. :wink:
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Merci Gnozal. Ca fonctionne comme je voulais. :wink:
Répondre