Integration console

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Ekim
Messages : 151
Inscription : dim. 24/juin/2018 1:20

Integration console

Message par Ekim »

Bonsoir à tous)

est il possible d'intégrer une fenêtre console dans une fenêtre window? si oui, j'en serais ravis de voir ça)

je pose la question car fut une époque, j'avais un ancien logiciel où sur le coin droit ou gauche de la fenêtre,
on pouvait observer la présence d'une console, je ne sais plus trop de quoi d'ailleur :lol: et j'ignore quelle
méthode avait été employé, mais cela m'intéresserais de faire la même chose pour un projet avenir

je m'en remets à vous les spécialistes :D
Avatar de l’utilisateur
SPH
Messages : 4315
Inscription : mer. 09/nov./2005 9:53

Re: Integration console

Message par SPH »

Ekim a écrit :est il possible d'intégrer une fenêtre console dans une fenêtre window?
Jamais je n'ai vu ca; donc...

Les consoles s'ouvrent sous windows et pas sur une fenetre windows.
Mais attendons que les ténors de PB s'expriment... 8)
http://HexaScrabble.com/
!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Portable LENOVO ideapad 110-17ACL 64 bits
Version de PB : 5.73LTS - 32 bits
Ekim
Messages : 151
Inscription : dim. 24/juin/2018 1:20

Re: Integration console

Message par Ekim »

Salut @SPH, il est vrai que sa aurait été plus simple de retrouver le nom du fameux soft :lol:

mais je cherche comme un malade dans mes anciens disque ext, bref c'est pas gagné :?
Mesa
Messages : 970
Inscription : mer. 14/sept./2011 16:59

Re: Integration console

Message par Mesa »

Il est plus simple de recuperer la sortie console et de l'afficher dans une fenêtre comme ça:
(ça vient du forum)

Code : Tout sélectionner

;Rediriger l'invite de commande dans un gadget

Enumeration Font
  #FontGlobal
EndEnumeration

Enumeration Window
  #MainForm
EndEnumeration

Enumeration Gadget
  #Result
EndEnumeration

Enumeration KeyBoard
  #Up
  #Down
EndEnumeration

Declare Start()
Declare RunCmd(Cmd.s)
Declare OnChange()
Declare OnKey()
Declare OnResize()

Start()

Procedure Start()
  LoadFont(#FontGlobal, "", 11)
  SetGadgetFont(#PB_Default, FontID(#FontGlobal))
  If OpenWindow(#MainForm, 0, 0, 800, 600, "Terminal", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
    EditorGadget(#Result, 5, 10, 790, 580)
    SetGadgetColor(#Result,  #PB_Gadget_BackColor, RGB(174, 191, 191))
    SetActiveGadget(#Result)
    
    AddKeyboardShortcut(#MainForm, #PB_Shortcut_Up, #Up)
    AddKeyboardShortcut(#MainForm, #PB_Shortcut_Down, #Down)
    
    BindEvent(#PB_Event_Menu, @OnKey(), #MainForm, #Up)
    BindEvent(#PB_Event_Menu, @OnKey(), #MainForm, #Down)
    
    BindEvent(#PB_Event_SizeWindow, @OnResize())
    BindGadgetEvent(#Result, @OnChange(), #PB_EventType_Change)
    Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
  EndIf
EndProcedure

Procedure RunCmd(Cmd.s)
  Protected prg.i, Stdout.s, TagResult.b
  
  Select LCase(cmd)
      
    Case "cls"
      ClearGadgetItems(#Result)
      
    Case "exit"
      End
      
    Default
      If LSet(Cmd, 3) = "cd "
        SetCurrentDirectory(Trim(Mid(cmd, 3)))
        AddGadgetItem(#Result, -1,  "le dossier courrant est : " + GetCurrentDirectory())
        
      ElseIf LCase(LSet(cmd, 5)) = "title"
        SetWindowTitle(#MainForm, Trim(Mid(cmd, 6)))
        
      Else  
        
        prg = RunProgram("cmd.exe", "/c " + Cmd, "", #PB_Program_Open|#PB_Program_Read|#PB_Program_Hide|#PB_Program_UTF8);
        If prg
          While ProgramRunning(prg)
            If AvailableProgramOutput(prg)
              Stdout = ReadProgramString(prg,  #PB_UTF8)
              AddGadgetItem(#Result, -1,  Stdout)
              If Stdout <> ""
                TagResult = #True
              EndIf
            EndIf
          Wend
          
          CloseProgram(prg)
          
          If FindString(Cmd, ">") Or FindString(LCase(Cmd), "del")
            TagResult = #True
          EndIf
          
          If Not TagResult
            AddGadgetItem(#Result, -1,  "Erreur de commande : " + Cmd)
          EndIf
        EndIf
      EndIf
      AddGadgetItem(#Result, -1,  "")
  EndSelect
EndProcedure

Procedure OnChange()
  Protected Buffer.s = GetGadgetItemText(#Result, CountGadgetItems(#Result)-1)
  Static Cmd.s
  
  If Buffer = "" And cmd <> ""
    RunCmd(cmd)
  EndIf
  
  Cmd = Buffer
  SetGadgetState(#Result, CountGadgetItems(#Result))
EndProcedure

Procedure OnKey()  
  Protected Index = CountGadgetItems(#Result)
  SetGadgetState(#Result, Index)
EndProcedure

Procedure OnResize()
  Protected Width = WindowWidth(#MainForm)
  Protected Height= WindowHeight(#MainForm)
  
  ResizeGadget(#Result, #PB_Ignore, #PB_Ignore, Width - 10, Height - 20)
EndProcedure
T'as plus qu'à taper help ou dir sous windows...


C'est dommage que "AltConsole" soit devenu payant parce qu'il est génial:
https://www.purebasic.fr/english/viewto ... ALtconsole

M.
Ekim
Messages : 151
Inscription : dim. 24/juin/2018 1:20

Re: Integration console

Message par Ekim »

Salut @Mesa

Ton idée est génial, mais en fait, je m'était peut être mal exprimé
ce que j'entendais par "console" c'était la console propre à Pb et
non pas cmd, l'invite de commande de microsoft;

j'aurais peut être dû dire plutôt console Pb dans un Window Pb

mais ton idée est excellente merci pour le partage :P
Avatar de l’utilisateur
venom
Messages : 2989
Inscription : jeu. 29/juil./2004 16:33
Localisation : Klyntar
Contact :

Re: Integration console

Message par venom »

Ekim a écrit :j'aurais peut être dû dire plutôt console Pb dans un Window Pb
Console PB ??






@++
Windows 10 x64, PureBasic 5.73 x86 & x64
GPU : radeon HD6370M, CPU : p6200 2.13Ghz
Avatar de l’utilisateur
Marc56
Messages : 1890
Inscription : sam. 08/févr./2014 15:19

Re: Integration console

Message par Marc56 »

ce que j'entendais par "console" c'était la console propre à Pb et
non pas cmd, l'invite de commande de microsoft;
j'aurais peut être dû dire plutôt console Pb dans un Window Pb
Ne serais-ce pas plutôt la fenêtre de Debug ?
Dans ce cas, ce n'est pas une console, car elle ne fait que les sorties.

Les sorties "console" qu'on trouve par exemple dans les programmes de pilotages de machines CNC (Ex: imprimantes 3D, lasers de découpe etc) sont souvent des fenêtres faisant office de terminal série et permettant de "dialoguer" directement avec la machine pour lui passer les commandes directement (ex: passer des commandes GRBL))
Ekim
Messages : 151
Inscription : dim. 24/juin/2018 1:20

Re: Integration console

Message par Ekim »

Ok autant pour moi concernant les appellations techniques :lol:
Merci pour votre aide, comme vous le voyez, je viens de très loin))


encore merci
Répondre