Seite 4 von 4

Verfasst: 17.03.2009 17:21
von Andesdaf
kann ich nicht bestätigen. Weder auf 4.3 noch auf 4.2

Verfasst: 17.03.2009 19:02
von Kaeru Gaman
MrVain hat geschrieben: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())
ermn... nit der "Link"... sondern die "Linked List"... gelle?

und das liegt einfach daran, dass du versuchst was auszugeben was ganit da is.

also, du musst latürnich zuerst ein element in deine Liste packen, das passiert da wo AddElement steht,
bevor du das abfragen bzw. in ein Gadget packen kannst.


@PMtQ
siehste?
optimale Demonstration für die verminderte Effizienz vorgekauten Codes....

Verfasst: 30.03.2009 08:25
von MrVain
PMTheQuick hat geschrieben: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 ;-)

Wenn ich deinen Code einfach mal in ein neues Projekt eingebe, kommt folgender Fehler:

"Line104 Syntax Error: input$ = Input()"


Woran kann das liegen?? Ich dachte, dass ich meinen "Consolen"-Code einfach nur unten eingeben muss und schon läuft das...

Verfasst: 30.03.2009 12:48
von PMTheQuick
Also hier geht das perfekt. Teste doch auch mal nur Input()... Welche PB-Version, wenn ich noch fragen darf? (Sorry habe jetzt nich genauer nachgeschaut, habs eilig...)

Gruss
PMTheQuick ;-)

Verfasst: 31.03.2009 16:01
von Andesdaf
verursacht bei mir (pb 4.3) auch keinen Fehler.