Console Cursor finden! [gelöst]

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Console Cursor finden! [gelöst]

Beitrag von SimonSimCity »

Hi, Leute

Ich will bei mir so ne kleine Console proggen und hab jetzt das Problem, das ich zwar sagen kann: "setzte Cursor auf X | Y" aber ich kann nicht sagen, dass der Cursor um eine Zeile weiter hoch / runter oder nach links / rechts springen soll...

Hier soll zum Beispiel dieses Zeichen in der Schleife immer wieder überschrieben werden und hinter dem eingegebenen Text erscheinen, egal wie viele Zeichen der Text hat... (ähnlich wie bei Linux oft....)
Habt ihr nen paar Beispiele zu diesem Code:

Code: Alles auswählen

OpenConsole()
  EnableGraphicalConsole(1)
  ClearConsole()
  ConsoleColor(10, 0)
  Print("EF.3B.68.D8@root\>")
  PrintN("     Das geht klar!")
  Input()
  For i=0 To 200
    Delay(100)
    Print("-")
    Delay(100)
    Print("/")
    Delay(100)
    Print("|")
    Delay(100)
    Print("\")
  Next i
  Input()
  ConsoleColor(12, 0)
  PrintN("  Invaild MemoryProcess!")
  ConsoleColor( 9, 0)
  PrintN("  Console closed")
  Delay(4000)
CloseConsole()
End
Zuletzt geändert von SimonSimCity am 18.12.2007 14:16, insgesamt 1-mal geändert.
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

Ich gehe jetzt mal davon aus, das Du eine CursorAnimation meinst.
Dann sollte das mit CursorLocate nicht wirklich das Problem darstellen.

Code: Alles auswählen

Procedure CursorAnim(x.l,y.l,Pause.l,Schleife.l)

  Protected i.l

  For i = 0 To Schleife
    ConsoleLocate(x,y)
    Print("-")
    Delay(Pause)
    ConsoleLocate(x,y)
    Print("\")
    Delay(Pause)
    ConsoleLocate(x,y)
    Print("|")
    Delay(Pause)
    ConsoleLocate(x,y)
    Print("/")
    Delay(Pause)
  Next i

EndProcedure
Dann baust Du in deinen Code zwischen den beiden Inputs() ein :
Cursoranim(0,2,100,200)

Wenn du jetzt nicht die Animation meinst, sorry... grad kein kaffee da um mein hirn zu aktivieren ;)

Edit: Ich sehe gerade... du hast nicht ein einziges mal CursorLocate() benutzt.... sondern ConsoleColor() ...damit kann man den Cursor natürlich nicht setzen ... Drück doch mal F1 und schau dir die Hilfe an... da unter Console schauen....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Beitrag von SimonSimCity »

Du hast mein Problem nicht verstanden! Ich glaube der Theard is besser im ALLGEMEIN-Forum aufgehoben...

Ich wollte so einen Befehl machen, das der Cursor ein Zeichen zurück geht, ohne das ich weiß, wo er jetzt steckt!

Oder auch mal ne Zeile hoch.

Aber halt alles ohne X oder Y vorzugeben, wie du das jetzt gemacht hast.

Was mir auch schon sehr helfen würde ist eine Prozedure zu schreiben, mit der ich einfach nur X Zeichen zurück gehen kann...

Der obere Code sollte ungefähr so was ergeben:
-> Nur jetzt soll halt noch, wenn ich hier mehr Zeichen eingebe soll dann dieser Status automatisch eingerückt werden...

Code: Alles auswählen

Define s1.s, s2.s, s3.s, s4.s, command.s
OpenConsole()
  EnableGraphicalConsole(1)
  ClearConsole()
   ConsoleColor(10, 0)
    ConsoleLocate(0,0)
Sprung:
Print("EF.3B.68.D8@root\>")
Inp.s = Input()

Select Inp
  Case "me.root"
    PrintN("     Das geht klar!")
    For i=0 To 2
      ConsoleLocate(20, 1)
      Delay(100)
      Print("-")
      ConsoleLocate(20, 1)
      Delay(100)
      Print("/")
      ConsoleLocate(20, 1)
      Delay(100)
      Print("|")
      ConsoleLocate(20, 1)
      Delay(100)
      Print("\")
      ConsoleLocate(20, 1)
    Next i 
    PrintN(" ")
    Goto Sprung
EndSelect

ConsoleColor(12, 0)
PrintN("  Invaild MemoryProcess!")
ConsoleColor( 9, 0)
PrintN("  Console closed")
Delay(4000)
CloseConsole()
End
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Beitrag von bobobo »

sowas?

Code: Alles auswählen

Define s1.s, s2.s, s3.s, s4.s, command.s 
prompt.s="EF.3B.68.D8@root\>"
y=0

OpenConsole() 
  EnableGraphicalConsole(1) 
  ClearConsole() 
   ConsoleColor(10, 0) 
    ConsoleLocate(0,0) 
Sprung: 

Print(prompt)
ConsoleLocate(Len(prompt),y) 
Inp.s = Input() 
y+1

Select Inp 
  Case "me.root" 
    PrintN("     Das geht klar!")
    l=Len("     Das geht klar!")+1
    ConsoleCursor(0) 
    For i=0 To 2 
      ConsoleLocate(l, y) 
      Delay(100) 
      Print("-") 
      ConsoleLocate(l, y) 
      Delay(100) 
      Print("/") 
      ConsoleLocate(l, y) 
      Delay(100) 
      Print("|") 
      ConsoleLocate(l, y) 
      Delay(100) 
      Print("\") 
      ConsoleLocate(l, y) 
    Next i 
    ConsoleCursor(1)
    
    PrintN(" ") 
    y+1
    Goto Sprung 
EndSelect 

ConsoleColor(12, 0) 
PrintN("  Invaild MemoryProcess!") 
ConsoleColor( 9, 0) 
PrintN("  Console closed") 
Delay(4000) 
CloseConsole() 
End
GOTO :allright:
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Beitrag von SimonSimCity »

DANKE!

Das is genau das gesuchte...

Is zwar sehr simpel gelöst, aber darauf bin ich jetzt nicht gekommen :)

:allright: :allright: :allright:
Benutzeravatar
Bisonte
Beiträge: 2465
Registriert: 01.04.2007 20:18

Beitrag von Bisonte »

;) Wusst ich's doch... ohne Kaffee.... nix verstehen ;) aber ne Procedure, die das Print ersetzen würde hätt ich dann auch noch gehabt ;) ohne dass man weiss wo der Cursor steht....
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
SimonSimCity
Beiträge: 132
Registriert: 14.01.2007 00:49

Beitrag von SimonSimCity »

@Bisonte:

Kannst du die Procedure auch noch mal posten (wenn du sie so auf die Schnelle findest...) ?
vlt kann die ein anderer, der diesen Theard liest besser gebrauchen...
Antworten