vom DOS-Fenerst ins Windows Fenster + Logging

Anfängerfragen zum Programmieren mit PureBasic.
MrVain
Beiträge: 24
Registriert: 08.03.2009 14:34

Beitrag von MrVain »

ts-soft hat geschrieben:> "ERROR There is no current Gadget List"
Woher sollen wir Wissen, das ein neuer eine alte Version nutzt und wieso
macht er das?

PureBasic Updaten, wir schreiben die Phase 4.30, und dann noch mal testen.
Danke, das wars !! :allright:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

.... es handelt sich wohl doch nicht um MrVa!n, wie ich zuerst dachte...

tjaaaa.... so ist das eben... man kann schon mal Leute verwechseln.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
MrVain
Beiträge: 24
Registriert: 08.03.2009 14:34

Beitrag von MrVain »

Kaeru Gaman hat geschrieben:.... es handelt sich wohl doch nicht um MrVa!n, wie ich zuerst dachte...

tjaaaa.... so ist das eben... man kann schon mal Leute verwechseln.
Wie soll ich das nun deuten?? :shock: 8)

So, das EditorGadget wird nun angezeigt. Wie starte ich die Console denn im Hintergrund (ohne dass sie angezeigt wird) und ´mit welchem genauen Befehl sende ich die PrintN Ausgaben in den EditorGadget ?
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

MrVain hat geschrieben:Wie soll ich das nun deuten?? :shock: 8)
ganz einfach so wie ichs sagte.... es gibt einen Mr.Va!n aus der DemoCoder Szene, aber der bist du anscheinend nicht.
aber in meinem ersten post dachte ich das, deswegen die etwas seltzame begrüßung...


@topic

du sendest gar keine "PrintN"-Ausgaben an dein EditorGadget.

du schreibst deinen Code, der die Console ansteuert um, und zwar so,
dass die Ausgabe gleich auf das EditorGadget erfolgt.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Andesdaf
Moderator
Beiträge: 2673
Registriert: 15.06.2008 18:22
Wohnort: Dresden

Beitrag von Andesdaf »

... und zwar mit SetGadgetText/AddGadgetItem.
Win11 x64 | PB 6.20
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

Beitrag von PMTheQuick »

Und ich habe für dich was gebastelt. Kommentiert habe ich es nicht, aber ich habe nen Console-Wrapper für Open, Print, PrintN, Input & Close-Console geschrieben. Ausgereift ist es sicherlich noch nicht ganz, aber man kanns schon mal verwenden! Anleitung: Kopiere #Windowed = #True & alles zwischen CompilerIf und CompilerEndIf MIT dem CompilerIf und CompilerEndIf an den Start deines Projektes. Wenn #Windowed dann = #True ist, dann wird die Konsole in ein Fenster umgeleitet. Logging ist auch eingebaut! Und zwar wird eine log.txt erstellt... Bei Fragen oder sonst was -> Kein Problem, kannst dich bei mir melden. Natürlich auch bei anderen Forenmitgliedern ;-) Ich hoffe du kannst damit was anfangen.

Code: Alles auswählen

#Windowed = #True 

CompilerIf #Windowed = #True 
  Global threadexit
  Global NewList StringsToAdd.s()
  Global inputstate
  Global inputreturn$

  Macro OpenConsole 
    OpenConsoleNew 
  EndMacro 
  
  Macro PrintN 
    PrintNNew 
  EndMacro
  
  Macro Print 
    PrintNew
  EndMacro
  
  Macro Input 
    InputNew
  EndMacro 
  
  Macro CloseConsole 
    CloseConsoleNew 
  EndMacro 
  
  Procedure Window_Manager(dummy=0)
    CreateFile(0, "log.txt")
    WriteStringN(0, "Console -> Window Wrapper by PMTheQuick")
    WriteStringN(0, "---------------------------------------------------")
    WriteStringN(0, "")
    WriteStringN(0, "Console geöffnet")
    WID = OpenWindow(#PB_Any, 0, 0, 600, 400, "Console -> Window Wrapper", #PB_Window_ScreenCentered) 
    ; CreateGadgetList(WindowID(WID))
    EditorGadget(0, 0, 0, WindowWidth(WID), WindowHeight(WID))
    SetGadgetColor(0, #PB_Gadget_FrontColor, RGB(255,255,255))
    SetGadgetColor(0, #PB_Gadget_BackColor, RGB(0, 0, 0))
    SendMessage_(GadgetID(0),#EM_SETREADONLY,1,0)
    AddKeyboardShortcut(WID, #PB_Shortcut_Return, 100) 
    Repeat
      event = WindowEvent()
      Select event
        Case #PB_Event_Menu
          If EventMenu() = 100 And GetActiveGadget() = 0 And GetTickCount_()-LastSpawn > 100
            If inputstate = 1
              inputreturn$ = ReplaceString(GetGadgetText(0), beforeinput$, "")
              WriteStringN(0, "Input erhalten")
              WriteStringN(0, "-> Ergebnis: "+inputreturn$)
              inputstate = 0
              SetGadgetText(0, GetGadgetText(0)+Chr(13)+Chr(10))
              SendMessage_(GadgetID(0),#EM_SETREADONLY,1,0)
            EndIf
            LastSpawn = GetTickCount_()
          EndIf
      EndSelect
      ForEach StringsToAdd()
        WriteStringN(0, "Print: "+StringsToAdd())
        SetGadgetText(0, GetGadgetText(0)+StringsToAdd())
        DeleteElement(StringsToAdd())
      Next
      If inputstate = 2
        beforeinput$ = GetGadgetText(0)
        inputstate = 1
        SendMessage_(GadgetID(0),#EM_SETREADONLY,0,0)
      EndIf
    Until threadexit = 1
    CloseWindow(WID)
    inputstate = 0
    WriteStringN(0, "Console geschlossen")
    threadexit = 0
  EndProcedure
  
  Procedure OpenConsoleNew() 
    CreateThread(@Window_Manager(), 1)
  EndProcedure 
  
  Procedure PrintNNew(String$) 
    AddElement(StringsToAdd())
    StringsToAdd() = String$+Chr(13)+Chr(10)
  EndProcedure 
  
  Procedure PrintNew(String$)
    AddElement(StringsToAdd())
    StringsToAdd() = String$
  EndProcedure
  
  Procedure.s inputnew() 
    inputstate = 2
    While inputstate <> 0 : Wend
    ProcedureReturn inputreturn$
  EndProcedure 
  
  Procedure CloseConsoleNew() 
    threadexit = 1
  EndProcedure 
CompilerEndIf 

; Example
OpenConsole()
PrintN("Hallo")
Print("Gebe etwas ein: ")
input$ = Input()
PrintN("Du hast "+input$+" eingegeben")
Delay(500)
PrintN("hei!")
PrintN("ho")
Delay(500)
CloseConsole()
Gruss
PMTheQuick ;-)
Zuletzt geändert von PMTheQuick am 11.03.2009 13:23, insgesamt 1-mal geändert.
MrVain
Beiträge: 24
Registriert: 08.03.2009 14:34

Beitrag von MrVain »

Vielen Dank :allright:



ich werd's gleich mal ausprobieren
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@PMTheQuick

da wäre noch die Kritik anzumelden, dass du eine feste Fensternummer verwendest...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
PMTheQuick
Beiträge: 630
Registriert: 05.05.2005 19:06

Beitrag von PMTheQuick »

Kaeru Gaman hat geschrieben:@PMTheQuick

da wäre noch die Kritik anzumelden, dass du eine feste Fensternummer verwendest...
Im oberen Code geändert! Jetzt sind es dynamische Fensternummern.

Gruss
PMTheQuick :-)
MrVain
Beiträge: 24
Registriert: 08.03.2009 14:34

Beitrag von MrVain »

Wenn ich es mit deinem Code mache, kommt folgender Fehler:


[Error] Line 60:
[Error] The Link doesn't have a current element




Line 60: SetGadgetText(0, GetGadgetText(0)+StringsToAdd())
Antworten