Page 1 sur 1

Integration console

Publié : dim. 15/nov./2020 22:47
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

Re: Integration console

Publié : lun. 16/nov./2020 4:24
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)

Re: Integration console

Publié : lun. 16/nov./2020 13:18
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é :?

Re: Integration console

Publié : lun. 16/nov./2020 15:27
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.

Re: Integration console

Publié : mar. 17/nov./2020 3:35
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

Re: Integration console

Publié : mar. 17/nov./2020 6:55
par venom
Ekim a écrit :j'aurais peut être dû dire plutôt console Pb dans un Window Pb
Console PB ??






@++

Re: Integration console

Publié : mar. 17/nov./2020 9:49
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))

Re: Integration console

Publié : lun. 23/nov./2020 22:48
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