AutoChargement de code source dans l'IDE PB [Résolu]

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

AutoChargement de code source dans l'IDE PB [Résolu]

Message par Kwai chang caine »

Bonjour à tous

Comment peut on faire pour charger plusieurs codes source dans l'IDE avec du code
J'ai essayé RunProgram purebasic et le nom du ".pb" ou ".pbi" en parametre, mais le probleme c'est que si on a pas coché l'option "Ne lancer qu'un editeur" et bien il lance autant d'IDE que de codes sources :?

Moi ce que j'aurais voulu, c'est que un seul IDE s'ouvre et charge les X codes source, ceci sans se preocupper de l'etat de la check box "Ne lancer qu'un editeur"

Merci de votre aide
Dernière modification par Kwai chang caine le jeu. 27/nov./2008 10:27, modifié 1 fois.
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

Code : Tout sélectionner

RunProgram(NomFichierPureBasic$)
8)
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Merci mon bon OLLIVIER 8)
Mais le probleme avec cette methode, c'est que si on a pas coché l'option "Ne lancer qu'un editeur" et bien il lance autant d'IDE que de codes sources.
Le top serait de trouver un code qui ouvre un nouvel onglet dans l'IDE, il me semblais avoir vu ça, y'a bien longtemps, mais je n'arrive pas a remettre la main dessus :?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

dans JaPBe ça se fait automatiquement, et dans l'editeur classic aussi me semble-t-il. Regarde les prefs.
Il m'ouvre les derniers codes (ceux qui n'ont pas été fermé avant de quitter l'ide) par defaut.
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Oui l'ouverture automatique marche aussi dans le NATIF
Mais ce que je cherchais à faire, c'est un code qui ouvre un fichier PB, comme si on faisait un sendkey "Ctrl+o" en entrant le nom du fichier.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Message par Ar-S »

désolé mais je ne pige pas !
Tu veux un programme externe qui ouvre un fichier.pb dans l'IDE ?

Genre : Toto.exe qui fait un sendkey CTRL+O sur japbe ?

C'est quoi la différence avec le fait de laisser ton fichier ouvert avant de fermer l'IDE natif ?
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Oui c'est ça.
Je voudrais faire un gestionnaire de projet, comme dans VB
C'est à dire tu clic sur un fichier "Projet" et il se charge d'ouvrir non seulement ton PB, mais tous ses petits PBI qui vont avec.

J'ai pris l'idée a TS-SOFT qui avait créé un outils que l'on pouvait faire declencher a l'ouverture de l'IDE.

Ca marchait super bien, puis j'ai installé la B4, et ça s'est mis a merder dans tous les sens :?

Alors je me suis dit pour la seconde fois que ce serait bien de faire cet exe.
Tu selectionne le PB que tu veux et hop, tout se configure comme la veille, meme si tu n'a pas coché l'ouverture comme avant et surtout si tu as chargé autre chose la fois d'avant.

Je fais ça car je me suis créé une maxi DLL avec noir de petits poussins derriere, et ça me gonfle un peu de les charger tous les uns derriere les autres ou bien de multiselectionner dans le filerequester :? .

J'ai posé aussi la question sur le forum US
J'ai un peu avancé, mais je sens venir les callback et autres gestions que je ne sais pas gerer.
Car mon filerequester bloque l'avancement de mon programme.

Si toi ou un autre eminent membre de la famille peut me donner un coup de main, ce serait gentil 8)

http://www.purebasic.fr/english/viewtop ... 541#268541

Merci pour votre aide
Ollivier
Messages : 4197
Inscription : ven. 29/juin/2007 17:50
Localisation : Encore ?
Contact :

Message par Ollivier »

T'es une flèche!

Vas-y ! Démarre ! C'est toi qui va t'y coller !!!

Commence un code. Là, tu as tout en main logiquement. Si ça cale, ce sera plus simple de t'apporter une pierre.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Et bah mon OLLIVIER, j'ai démarré....
J'ai mis le lien du forum US juste au dessus

Si tu veux je rappatrie le code sur le FR, merci de ton aide

Le voici :

Code : Tout sélectionner

Global Passage 
Global AppPath.s 
Global FichierACharger$ 

AppPath = Space(200) 
GetCurrentDirectory_(200, @AppPath) 
AppPath = Trim(AppPath) 
PathAddBackslash_(@AppPath) 

Enumeration 
 #FormProjet 
 #ListViewPb 
 #TextPb 
EndEnumeration 

Declare.s ProcessNameFromHwnd(hwnd) 
Declare CheckWindowsProcess(WndHwnd, p) 

Procedure SendKey(Key.s) 
  ; get virtual key code and shift state 
  VK.w = VkKeyScan_(Asc(Key)) 
  If VK = -1 
    ProcedureReturn 
  EndIf 
  
  ; get scan code if an extended key 
  If MapVirtualKey_(VK, 2) = 0 
    Extended.l = #KEYEVENTF_EXTENDEDKEY 
    ; get scan code 
    Scan.l = MapVirtualKey_(VK, 0) 
  Else 
    Extended = 0 
    Scan = 0 
  EndIf 
  
  ; press shift/ctrl/alt if needed 
  Shift.l = VK & $100 
  Ctrl.l = VK & $200 
  Alt.l = VK & $400 
  If Shift 
    keybd_event_(#VK_SHIFT, 0, 0, 0) 
  EndIf 
  If Ctrl 
    keybd_event_(#VK_CONTROL, 0, 0, 0) 
  EndIf 
  If Alt 
    keybd_event_(#VK_MENU, 0, 0, 0) 
  EndIf 
  
  ; press and release key 
  VK & $ff 
  keybd_event_(VK, Scan, Extended, 0) 
  keybd_event_(VK, Scan, #KEYEVENTF_KEYUP | Extended, 0) 
  
  ; release shift/ctrl/alt if pressed 
  If Shift 
    keybd_event_(#VK_SHIFT, 0, #KEYEVENTF_KEYUP, 0) 
  EndIf 
  If Ctrl 
    keybd_event_(#VK_CONTROL, 0, #KEYEVENTF_KEYUP, 0) 
  EndIf 
  If Alt 
    keybd_event_(#VK_MENU, 0, #KEYEVENTF_KEYUP, 0) 
  EndIf 
EndProcedure 

Procedure SendKeys(String.s) 
  For Letter.l = 1 To Len(String) 
    SendKey(Mid(String, Letter, 1)) 
  Next 
EndProcedure 

ProcedureDLL FindHwndWindowByPartName(Part$) 

 r = GetWindow_(GetDesktopWindow_(),#GW_CHILD) 

 Repeat 
  
  t$ = Space(999) 
  GetWindowText_(r,t$,999) 
  
  If FindString(LCase(t$), LCase(part$),1) <> 0 And IsWindowVisible_(r) = #True 
   w = r 
  Else 
   r = GetWindow_(r, #GW_HWNDNEXT) 
  EndIf 
  
 Until r = 0 Or w <> 0 

 ProcedureReturn w 

EndProcedure 

Procedure CheckWindowsProcess(WndHwnd, p) 
  
  ; check if the first third caracters of the process path are the USB_ROOT.s 
  Protected ProcessPath.s = ProcessNameFromHwnd(WndHwnd) 
  Protected Caption.s = Space(255) 
  
  GetWindowText_(WndHwnd, @Caption, 255) 
  
  If FindString(UCase(Caption), "OUVRIR UN FICHIER...", 1) 
    
   Delay(10) 
   SendKeys(AppPath + Trim(FichierACharger$)) 
   Delay(10) 
   keybd_event_(#VK_RETURN,0,0,0) 
   Delay(10) 
    
  EndIf 
  
  ProcedureReturn #True   ; return 1 to continue the enumeration 
  
EndProcedure 

Procedure.s ProcessNameFromHwnd(hwnd) 
  
  Protected   ProcessID 
  Protected   hProcess 
  Protected   hModule 
  Protected   ProcessName.s   =   Space(#MAX_PATH) 
  Protected   EnumProcessModules 
  Protected   GetModuleFileNameEx 
  
  If  OpenLibrary(0, "psapi.dll") 
    EnumProcessModules  =   GetFunction(0, "EnumProcessModules") 
    GetModuleFileNameEx =   GetFunction(0, "GetModuleFileNameExA") 
    
    GetWindowThreadProcessId_(hwnd, @ProcessID) 
    hProcess    =   OpenProcess_(#PROCESS_QUERY_INFORMATION|#PROCESS_VM_READ, 0, ProcessID) 
    
    CallFunctionFast(EnumProcessModules, hProcess, @hModule, 1, 0) 
    CallFunctionFast(GetModuleFileNameEx, hProcess, hModule, @ProcessName, #MAX_PATH) 
    
    CloseHandle_(hProcess) 
    CloseLibrary(0) 
  EndIf 
  
  ProcedureReturn ProcessName 
EndProcedure 

OpenWindow(#FormProjet, 380, 113, 189, 261, "Charge projet",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar ) 
CreateGadgetList(WindowID(#FormProjet)) 
TextGadget(#TextPb, 13, 11, 165, 22, "Choisissez votre projet",#PB_Text_Center) 
ListViewGadget(#ListViewPb, 13, 41, 165, 206) 

UsedDirectory = ExamineDirectory(#PB_Any, AppPath, "*.*") 

While NextDirectoryEntry(UsedDirectory) 
  
 NomElement.s = DirectoryEntryName(UsedDirectory) 
                  
 If DirectoryEntryType(UsedDirectory) = #PB_DirectoryEntry_File 
  
  If Not FindString(NomElement,".pbi", 1) And FindString(UCase(NomElement), ".PB", 1) 
   AddGadgetItem(#ListViewPb, - 1, NomElement) 
  EndIf  
  
 EndIf 
      
Wend 
  
FinishDirectory(UsedDirectory) 

Repeat 

 Evenement = WaitWindowEvent () 
  
 Select Evenement 
  
  Case #PB_Event_Gadget 
  
   ProjetChoisi.s = GetGadgetItemText(#ListViewPb, GetGadgetState(#ListViewPb), 0) 
   Delay(1000) 
    
   If Not Passage 
    Passage = #True 
    RunProgram(#PB_Compiler_Home + "Purebasic.exe") 
    Delay(2000) 
   EndIf 
    
   ReadFile(1, AppPath + ProjetChoisi)    
   hand = FindHwndWindowByPartName("PureBasic - ") 
    
   Repeat 
    
    LigneCode$ = ReadString(1) 
    
    If FindString(LigneCode$, "IncludeFile", 1) 
    
     res = SetForegroundWindow_(hand) 
        
     FichierACharger$ = ReplaceString(LigneCode$, "IncludeFile", "") 
     FichierACharger$ = ReplaceString(FichierACharger$, Chr(34), "") 
      
     ; Ouverture du selecteur de fichier par la methode sendkey 
     keybd_event_(#VK_CONTROL,0,0,0) 
     keybd_event_($4F,0,0,0) 
     keybd_event_(#VK_CONTROL,0,#KEYEVENTF_KEYUP,0) 
     EnumWindows_(@CheckWindowsProcess(), 1) 

    EndIf 
    
   Until Eof(1) <> 0 
    
   CloseFile(1) 
      
 EndSelect 
  
Until Evenement = #PB_Event_CloseWindow 
Répondre