In einem vorigen Thread habe ich die Frage gestellt inwieweit sich ein Konsolenfenster gestalten lässt. Dabei wurde ich gefragt warum ich mich unbedingt auf die Konsole konzentriere und nicht besser mit einem "richtigen" Fenster arbeite. Bin ein absoluter Newbie und habe bislang nur von den Konsolenfenstern gelesen. Deshalb jetzt die bitte mir zu verdeutlichen was es nun genau mit einem "richtigen" Fenster zu tun hat und wo die Unterschiede zu den Konsolenfenstern sind.
Mfg Abraxus
Konsolenfenster oder "richtiges" Fenster
Re: Konsolenfenster oder "richtiges" Fenster
Schau dir am besten die Beispiel-Codes in der Hilfedatei mal an. Konsolenfenster werden eigentlich nicht mehr gebraucht, dann sie bieten im Grunde keine wirkliche Interaktionsmöglichkeit zwischen dem Benutzer und dem Programm: Sei es visuell oder auf Eingaben bezogen.
Ich empfehle dringlichst zu lernen wie man mit dem Event-Handlung unter "richtigen" Fenstern umgeht und dies dann auch anzuwenden. Konsolen sind von vorgestern.
OpenWindow():
OpenConsole():
Ich empfehle dringlichst zu lernen wie man mit dem Event-Handlung unter "richtigen" Fenstern umgeht und dies dann auch anzuwenden. Konsolen sind von vorgestern.

OpenWindow():
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PureBasic - Window example file
;
; (c) 2001 - Fantaisie Software
;
; ------------------------------------------------------------
;
;
; Open a window, and do some stuff with it...
;
If OpenWindow(0, 100, 200, 195, 260, "PureBasic Window", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget)
MessageRequester("Information", "Click to move the Window", 0)
ResizeWindow(0, 200, 200, #PB_Ignore, #PB_Ignore) ; Move the window to the coordinate 200,200
MessageRequester("Information", "Click to resize the Window", 0)
ResizeWindow(0, #PB_Ignore, #PB_Ignore, 320, 200) ; Resize the window to 320,200
;
; This is the 'event loop'. All the user actions are processed here.
; It's very easy to understand: when an action occurs, the EventID
; isn't 0 and we just have to see what have happened...
;
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_CloseWindow ; If the user has pressed on the close button
Quit = 1
EndIf
Until Quit = 1
EndIf
End ; All the opened windows are closed automatically by PureBasic
Code: Alles auswählen
;
; ------------------------------------------------------------
;
; PureBasic - Console example file
;
; (c) Fantaisie Software
;
; ------------------------------------------------------------
;
text$ = "Feel the Power of PureBasic!" ; just a small text$ string
dlay = 4000 ; delay will set to 4000
;
;-------- Open our Console --------
;
OpenConsole() ; First we must open a console
ConsoleTitle ("PureBasic - Console Example:") ; Now we can give the opened console a Titlename ;)
EnableGraphicalConsole(1)
;
;-------- Ask and display the UserName --------
;
ConsoleLocate (18,12) ; x y position
Print ("Please enter your name: ") ; Ask for name
name$=Input() ; Wait for user input
ClearConsole() ; This will clean the ConsoleScreen
ConsoleLocate (24,10) ; x y position
PrintN ("Welcome "+name$) ; Print our text and the UserName
ConsoleLocate (24,12) ; x y position
PrintN (text$) ; Print our text
Delay (dlay) ; Waits for moment
;
;-------- Cls and Cycle the Text-BG-Color 0 to 15 --------
;
ClearConsole() ; This will clean the ConsoleScreen
; Info: Standard colors are (8 for text, 0 for backround)
For i = 0 To 15
ConsoleColor (0,i) ; Change BackGround text color (max 15) in every loop
ConsoleLocate (24,4+i) ; x y position
Print (text$) ; Print our text
Next i
Delay (dlay) ; Waits for moment
;
;-------- Cls and Cycle the Text-FG-Color 0 to 15 --------
;
ConsoleColor(0,0) ; Set back to black (0,0) for complete background...
ClearConsole() ; This will clean the ConsoleScreen
; Info: Standard colors are (8 for text, 0 for backround)
For i = 0 To 15
ConsoleColor (i,0) ; Change ForGround text color (max 15) in every loop
ConsoleLocate (24,4+i) ; x y position
Print (text$) ; Print our text
Next i
Delay (dlay) ; Waits for moment
;
;-------- Cls and Cycle the Background-Color 0 to 15 --------
;
For a = 1 To 15
ConsoleColor(a,a) ; Cycle background color...
ClearConsole() ; This will clean the ConsoleScreen
; ; Info: Standard colors are (8 for text, 0 for backround)
For i = 0 To 15
ConsoleColor (i,a) ; Change ForGround text color (max 15) in every loop
ConsoleLocate (24,4+i) ; x y position
Print (text$) ; Print our text
Next i
;
Delay(dlay/10) ; Waits for moment
Next a
;-------- Exit --------
CloseConsole()
End
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
-
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Konsolenfenster oder "richtiges" Fenster
Dieses AVR-Basic auf dem AVR644p kommuniziert über die serielle Schnittstelle mit dem Consolenprogramm und der Tastatur vom PC:
http://www.mikrocontroller.net/topic/177030#new
Die Kommunikation funktioniert mit der Console bei mir : Atmega644 - Pc.
Mit einem Windowscreen wäre es um einiges schwieriger , Text auszutauschen, darzustellen, scrollen usw.
Die Text/Edit-Fenster sind da nicht sehr einfach zu händeln.
Das einzige, die Serielle Schnittstelle wird über ein kleines Fenster eingestellt.
Gruss and die Hardwaregang des Atmegas
http://www.mikrocontroller.net/topic/177030#new
Die Kommunikation funktioniert mit der Console bei mir : Atmega644 - Pc.
Mit einem Windowscreen wäre es um einiges schwieriger , Text auszutauschen, darzustellen, scrollen usw.
Die Text/Edit-Fenster sind da nicht sehr einfach zu händeln.
Das einzige, die Serielle Schnittstelle wird über ein kleines Fenster eingestellt.
Gruss and die Hardwaregang des Atmegas
Code: Alles auswählen
OpenConsole()
EnableGraphicalConsole(1)
Global *datspeicher.l,datlaenge.l,geladen.l,zaehler.l,lauf.l
Global text1.s,text2.s,datei.s
Global text_s.s,port.l,s_byte.c,aa.l,itext.s,itext1.c
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
Declare lade_datei()
Declare uebertrage()
Enumeration
#Window_0
#Button_0
#Button_1
#Button_2
#Button_3
#String_0
#String_1
#datei_0
EndEnumeration
port=-1
OpenWindow(#Window_0, 400, 150, 250,100, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
SetCurrentDirectory("data/")
ButtonGadget(#Button_1, 10,10, 80, 22, "Seriell ein")
ButtonGadget(#Button_2, 10,40, 80, 22, "Seriell aus")
StringGadget(#String_0, 100, 10, 120, 22, "")
Repeat
Event = WaitWindowEvent(1)
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Button_1
If port=-1
port=OpenSerialPort(#PB_Any, "COM4", 57600, #PB_SerialPort_NoParity, 8, 1, #PB_SerialPort_NoHandshake, 17000,17000)
If port
text2=""
text2 + "...geöffnet "+Str(port)
SetGadgetText(#string_0, text2)
Else
text2 + "...nichts"
SetGadgetText(#String_0, text2)
port=-1
EndIf
EndIf
EndIf
If EventGadget = #Button_2
If port > 0
CloseSerialPort(port)
text2=""
text2 + "...geschlossen"
SetGadgetText(#string_0, text2)
port=-1
EndIf
EndIf
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Window_0
CloseWindow(#Window_0)
Break
EndIf
EndSelect
itext = Inkey()
If port > 0
While AvailableSerialPortInput(port)
ReadSerialPortData(port, @s_byte, 1)
If aa > 79
PrintN("")
aa=0
ElseIf s_byte =13
PrintN("")
aa=0
Goto weiter
ElseIf s_byte =10
Goto weiter
EndIf
If s_byte=35
uebertrage()
Goto weiter
EndIf
Print(Chr(s_byte))
aa=aa+1
weiter:
Wend
If itext <> ""
If aa > 79
PrintN("")
aa=0
ElseIf itext=Chr(13)
PrintN("")
aa=0
Goto weiter1
EndIf
aa=aa+1
weiter1:
WriteSerialPortData(port, @itext, 1)
EndIf
EndIf
ForEver
End
Procedure uebertrage()
text1=Input()
lade_datei()
Delay(500)
If port > 0 And geladen=1
lauf=0
While lauf < datlaenge
itext1=PeekB(*datspeicher+lauf)
If itext1=13
lauf=lauf+1
EndIf
WriteSerialPortData(port, @itext1, 1)
lauf=lauf+1
Wend
itext1=27
WriteSerialPortData(port, @itext1, 1)
EndIf
EndProcedure
Procedure lade_datei()
geladen=0
If ReadFile(#datei_0, text1+".bas")
datlaenge = Lof(#datei_0)
*datspeicher = AllocateMemory(datlaenge)
ReadData(#datei_0, *datspeicher, datlaenge)
itext1=35
WriteSerialPortData(port, @itext1, 1)
Else
PrintN("nix...")
itext1=27
WriteSerialPortData(port, @itext1, 1)
ProcedureReturn #datei_0
EndIf
CloseFile(#datei_0)
geladen=1
EndProcedure
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Konsolenfenster oder "richtiges" Fenster
@super_castle: Aus deinem Posting geht nicht hervor, was es mit der ursprünglichen Frage des Thread-Erstellers zu tun hat.
-
- Beiträge: 557
- Registriert: 29.11.2005 15:05
Re: Konsolenfenster oder "richtiges" Fenster
Ist doch klar.
In manchen Lebenslagen kommt man um die Console nicht rum.
Sie ist immer wieder gefragt.
Die Frage muss er sich selber mal beantworten, wenn er ein bestimmtes Projekt schreibt.
Und wenn er meint es geht mit der Console , dann soll er sie nehmen ohne Schiss vor Kritik.
Und wenn er meint , das er sie Spielend durch einen Screen ersetzen kann, dann tut er das eben.
Was ist daran so schwierig?
Man kann nicht sagen:
1. die Katholen nehmen die Console
2. die Protestanten nehmen den Screen
Gruss
In manchen Lebenslagen kommt man um die Console nicht rum.
Sie ist immer wieder gefragt.
Die Frage muss er sich selber mal beantworten, wenn er ein bestimmtes Projekt schreibt.
Und wenn er meint es geht mit der Console , dann soll er sie nehmen ohne Schiss vor Kritik.
Und wenn er meint , das er sie Spielend durch einen Screen ersetzen kann, dann tut er das eben.
Was ist daran so schwierig?
Man kann nicht sagen:
1. die Katholen nehmen die Console
2. die Protestanten nehmen den Screen

Gruss
Re: Konsolenfenster oder "richtiges" Fenster
Du entscheidest wohl kaum, wer was tun muss. Selbstverständlich kann er die Frage hier stellen, und andere Forenmitglieder um ihre Einschätzung bitten, so wie er es getan hat. Allerdings nützen ihm nur Antworten von Leuten, die mindestens seine Frage gelesen und verstanden haben. Wenn Du damit überfordert bist, warum hältst Du nicht einfach mal den Schnabel?super_castle hat geschrieben:Die Frage muss er sich selber mal beantworten, wenn er ein bestimmtes Projekt schreibt.
Vielleicht sollten wir auf Deine "superklugen" Fragen in Zukunft auch antworten: Die Frage muss unser Superheld sich mal selber beantworten.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Re: Konsolenfenster oder "richtiges" Fenster
Um mal zum Hauptthema zurück zu kommen.
@Abraxus:
Gegen die Verwendung der Konsole spricht zunächst mal nichts. Wenn das Programm nur für dich selbst bestimmt ist und du eher auf die Einfachheit stehst, dann ist die Konsole natürlich sehr praktisch. Ich als Linux-Nutzer verwende oft die Konsole und deren fortgeschrittenen Befehle, weil ich damit teilweise schneller bin und auf jeden Fall mehr Möglichkeiten habe als mit einer GUI, durch die ich mich erst durch klicken muss und die mir vielleicht gar nicht genug Parameter zum Einstellen anbietet.
Willst du allerdings, dass dein Programm einen breiteren Nutzerkreis ansprichst, kommst du heute um eine GUI nicht mehr herum. Dafür schau dir einfach die Beispiele von c4s an, lies die Befehle in der Hilfe nach, versuche Beispiele zu verstehen und ändere sie ab. So lernst du schnell und einfach daraus. Unter einer GUI versteht man alles, was du bereits von den Programmen kennst, die du sicherlich täglich nutzt: Browser, Dateimanager, Messenger, E-Mail-Programm, usw...
super_castle hat noch einen Screen angesprochen, aber das ist wieder etwas ganz anderes. Das baut auf einem anderen System auf und ist kein "richtiges" Fenster, um mal in deinen Worten zu sprechen. Das ist dann nämlich eher für Spiele oder generell Vollbildanwendungen geeignet oder einfach für Dinge, die grafisch aufwendig sind.
@Abraxus:
Gegen die Verwendung der Konsole spricht zunächst mal nichts. Wenn das Programm nur für dich selbst bestimmt ist und du eher auf die Einfachheit stehst, dann ist die Konsole natürlich sehr praktisch. Ich als Linux-Nutzer verwende oft die Konsole und deren fortgeschrittenen Befehle, weil ich damit teilweise schneller bin und auf jeden Fall mehr Möglichkeiten habe als mit einer GUI, durch die ich mich erst durch klicken muss und die mir vielleicht gar nicht genug Parameter zum Einstellen anbietet.
Willst du allerdings, dass dein Programm einen breiteren Nutzerkreis ansprichst, kommst du heute um eine GUI nicht mehr herum. Dafür schau dir einfach die Beispiele von c4s an, lies die Befehle in der Hilfe nach, versuche Beispiele zu verstehen und ändere sie ab. So lernst du schnell und einfach daraus. Unter einer GUI versteht man alles, was du bereits von den Programmen kennst, die du sicherlich täglich nutzt: Browser, Dateimanager, Messenger, E-Mail-Programm, usw...
super_castle hat noch einen Screen angesprochen, aber das ist wieder etwas ganz anderes. Das baut auf einem anderen System auf und ist kein "richtiges" Fenster, um mal in deinen Worten zu sprechen. Das ist dann nämlich eher für Spiele oder generell Vollbildanwendungen geeignet oder einfach für Dinge, die grafisch aufwendig sind.