Fragen vor dem Kauf

Für allgemeine Fragen zur Programmierung mit PureBasic.
mikstart
Beiträge: 25
Registriert: 23.07.2009 23:12

Fragen vor dem Kauf

Beitrag von mikstart »

Hallo an alle,

Ist es möglich den HDMI Ausgang vom PCs zu steuern mit einen anderen Inhalt auf den Fernseher als auf dem PCs Monitor ? Tuch Screen Unterstützung? Comando und Windows Modus gleichzeitig benutzen?

Danke in vorraus
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Fragen vor dem Kauf

Beitrag von PMV »

HDMI ist doch einfach nur ein weiterer Grafikkarten-Ausgang. Der
Fernseher arbeitet da ganz einfach als Monitor, nicht mehr und nicht
weniger. Das heißt wenn du ihn als erweiterten Desktop verwendest,
kannst ihn genau so nutzen wie jeden anderen Monitor auch, das hat
nix mit PB zu tun.

Touch Screen Unterstützung bietet Windows, die Win API kann von
PB direkt verwendet werden.

Ich nehm mal an, das du mit "Command" die Kommandozeile meinst.
Du kannst das alte Konsolenfenster auch anzeigen, wenn du normale
Fenster öffnest, im gleichen Programm. Da seit Vista aber die
DOS-Eingabeaufforderung stark limitiert ist ... ob das wirklich eine Rolle
spielt? Du kannst so ziemlich alles mit der WinAPI machen, was du auch
mit anderen Sprachen und der WinAPI machen kannst.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
mikstart
Beiträge: 25
Registriert: 23.07.2009 23:12

Re: Fragen vor dem Kauf

Beitrag von mikstart »

Danke für die rasche Antwort.

Ok ich kann den Fernseher benutzen wie ein Monitor.
Gibt es in pure Basic Befehle damit ich zwei verschiedene Ausgaben machen kann?

zB auf Monitor 1 wird das Hauptprogramm angezeigt und auf dem Fernseher ( 2. Monitor)
Eine Anzeigetafel mit anderen Inhalt.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Fragen vor dem Kauf

Beitrag von STARGÅTE »

@mikstart: Das ist doch ein normales Multidisplay.
Das hat doch nichts mit der Programmiersprache zu tun, der wird einfach gesagt, dass das eine Fenster bei 0,0 ist, das andere zB bei 1920,0 (also verschoben auf den 2. Bildschirm) ist.
In wie fern das ruckefrei funktioniert, hängt von deiner Grafikkarte ab.

Edit: Ich habe ein bisschen das Gefühl, du denkst (nicht böse gemeint), du müsstest den HDMI-Port selber programmieren, was er auszugeben hat. Aber das musst du garnicht, das übernimmt das Betriebssystem/Grafikkarte schon für dich.
Für dich (und die Programmiersprache) ist die komplette Ausgabe (mit allen Monitoren) einfach eine große Fläche auf der du z.B. Fenster platzieren kannst.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Fragen vor dem Kauf

Beitrag von Regenduft »

Ein Code sagt mehr als 1000 Worte! :wink:

Das folgende ist kein ordentliches Programm (z.B. würde bei nur einem Monitor eine Fehlermeldung ausgeworfen werden), zeigt aber wie schön einfach PureBasic funktioniert!
"Debug" ist eigentlich für die Fehlersuche gedacht. Es öffnet das "Degubber-Ausgabefenster" und gibt dort den Wert aus (eine Zeile pro "Debug") welchen die Funktion (sozusagen der "Befehl") hinter dem Debug rückgibt. Normalerweise würde man diesen Wert lieber in einer Variable speichern, oder in einem "richtigen" Fenster anzeigen.
Das Semikolon (";") bedeutet, dass der gesamte Programmcode dahinter ignoriert wird, um den eigenen Programmcode mit Kommentaren versehen zu können.
Übrigens arbeite ich hier mit dem Desktop und nicht mit "DirectX-Fullscreens".

Code: Alles auswählen

Debug ExamineDesktops()   ; Anzahl der Monitore

Debug "" ; Leerzeile

; erster Monitor
Debug DesktopName(0)      ; Name des Desktops
Debug DesktopFrequency(0) ; Bildwiederholungsrate
Debug DesktopWidth(0)     ; Auflösung (Breite)
Debug DesktopHeight(0)    ; Auflösung (Höhe)
Debug DesktopX(0)         ; X-Position (linke Kante)
Debug DesktopY(0)         ; Y-Position (obere Kante)

Debug "" ; Leerzeile

; zweiter Monitor
Debug DesktopName(1)      ; Name des Desktops
Debug DesktopFrequency(1) ; Bildwiederholungsrate
Debug DesktopWidth(1)     ; Auflösung (Breite)
Debug DesktopHeight(1)    ; Auflösung (Höhe)
Debug DesktopX(1)         ; X-Position (linke Kante)
Debug DesktopY(1)         ; Y-Position (obere Kante)
Gehen wir mal davon aus, dass Du 2 Monitore angeschlossen hast. Der linke ist ein alter 4:3-Standrardmonitor mit "1024 × 768", der rechte ist Dein 16:9-HD-TV mit "1920 × 1080". Wie die Monitore angeordnet sind muss unter Windows eingestellt werden und hat nichts mit der Programmiersprache zu tun.

Nun würde das obige Programm (ungefähr) folgendes im Debugger-Fenster ausgeben:

Code: Alles auswählen

2

\\.\DISPLAY1
60
1024
768
0
0

\\.\DISPLAY2
50
1920
1080
1025
0
Wenn man nun ein Fenster auf der X-Achse zwischen Null und 1024, sowie auf der Y-Achse zwischen Null und 768 erstellt, dann ist man auf dem linken Monitor.

Wenn man nun ein Fenster auf der X-Achse zwischen 1025 und 2945, sowie auf der Y-Achse zwischen Null und 1080 erstellt, dann ist man auf dem rechten Monitor.

Das kann für Programmieranfänger ziemlich verwirrend sein, mit Sicherheit ist das ganze aber viel einfacher als z.B. mit C++, wobei aber (wie Stargate zuvor bemerkte) das "Mutidisplay-Zeug" im Allgemeinen nichts mit der Programmiersprache zu tun hat.
Man kann sich alle aufgestellten Monitore wie einen einzigen großen Monitor vorstellen. Darum muss man das auch unter Windows vorher richtig einstellen!

(PS: Manmanman... bin ich heute vernebelt oder was? Zigtausen Schreibtfehler...)
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
mikstart
Beiträge: 25
Registriert: 23.07.2009 23:12

Re: Fragen vor dem Kauf

Beitrag von mikstart »

Danke für die Info

Nein ich denke nicht das ich HDMI selber programmieren muss. Ich habe nur ein Projekt vor
Wo auf dem ersten Bildschirm das Hauptprogramm anzeigt praktisch wo ich meine Eingabe mache und auf dem 2. Bild das Ergebnisse präsentiert wird, dabei müssen beide Programmteile. Gleichzeitig laufen und das Ergebnis nach der Eingabe oder Veränderung auf dem 2. Bildschirm ausgegeben werden während ich auf dem 1. Bildschirm synchron weiterhin die Eingabe machen kann.
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Re: Fragen vor dem Kauf

Beitrag von PMV »

Als Awendungsentwickler kümmert sich da eher weniger drum.
Man bietet zwei Fenster an, die die jeweiligen Funktionalitäten
bieten und der Benutzer kann die Position (und Größe) dann
nach seine Nöten einstellen.

Wenn du die Fenster direkt auf den entsprechenden 2 Desktops
anbieten willst, bedenke, das jeder andere "Positionen" für diese
hat.

PS: der DX-Screen öffnet sich immer auf dem Hauptbildschirm.
Nur als Info falls du damit was machen willst.

MFG PMV
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Benutzeravatar
Regenduft
Beiträge: 574
Registriert: 25.03.2008 15:07
Wohnort: THE LÄÄÄND!

Re: Fragen vor dem Kauf

Beitrag von Regenduft »

PMV hat geschrieben:PS: der DX-Screen öffnet sich immer auf dem Hauptbildschirm.
Ui! Auch wieder was gelernt! :)
Kann man dann auch nur auf dem Hauptschirm "WindowedScreens" öffnen? Hatte bisher nur mal ein bisschen mit Multidisplay herumgespielt und habe gerade keinen zweiten Monitor.
mikstart hat geschrieben:auf dem ersten Bildschirm (...) Eingabe machen
auf dem 2. Bild das Ergebnis
Sähe dann grob so aus, wobei ich beide Fenster maximiert öffne (wäre ja witzlos zwei Minifenster auf je einem Schirm zu öffnen):

Code: Alles auswählen

#Eingabe = 0
#Ausgabe = 1

ExamineDesktops()

titel0.s = "Eingabe"
x0 = DesktopX(0)
y0 = DesktopY(0)
w0 = DesktopWidth(0)
h0 = DesktopHeight(0)
f0 = #PB_Window_SystemMenu | #PB_Window_Maximize

titel1.s = "Ausgabe"
x1 = DesktopX(1)
y1 = DesktopY(1)
w1 = DesktopWidth(1)
h1 = DesktopHeight(1)
f1 = #PB_Window_TitleBar | #PB_Window_Maximize

OpenWindow(#Eingabe, x0, y0, w0, h0, titel0, f0)
OpenWindow(#Ausgabe, x1, y1, w1, h1, titel1, f1, WindowID(0))

Repeat
  
  Select WaitWindowEvent()
    
  Case #PB_Event_CloseWindow
    End ; Egal welches Fenster geschlossen wurde -> Programm Ende!
  
  Case #PB_Event_ActivateWindow
    
    Select EventWindow()
    
    Case #Eingabe
      Debug "Eingabefenster wurde aktiviert!"
    
    Case #Ausgabe
      Debug "Ausgabefenster wurde aktiviert!"
    
    EndSelect
    
  EndSelect
  
ForEver
Wie gesagt: Ordentliches Programmieren sieht anders aus! Nur mal um die Syntax zu zeigen!
PureBasic 5.73 LTE x86/x64 | Windows 7 (x64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fragen vor dem Kauf

Beitrag von RSBasic »

Regenduft hat geschrieben:Kann man dann auch nur auf dem Hauptschirm "WindowedScreens" öffnen? Hatte bisher nur mal ein bisschen mit Multidisplay herumgespielt und habe gerade keinen zweiten Monitor.
Nein, du kannst auch mit Hilfe der Position in der Parameterliste bestimmen, auf welchem Bildschirm dein WindowedScreen erscheinen soll.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7028
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Fragen vor dem Kauf

Beitrag von STARGÅTE »

Kann man dann auch nur auf dem Hauptschirm "WindowedScreens" öffnen?
Jain.
Bei einigen Grafikkarten brechen die Frames ein, wenn der WindowedScreen auf einem erweiterten Desktop liegt.
Auch hängt es von der Grafikkarten ab, was angezeigt wird, wenn der Screen genau dazwischen (also auf beiden Desktops) liegt.
Gute Grafikkarte zeigen alles richtig, andere zeigen zB nur die linke oder rechte Seite.
Fest steht aber, dass man ein WindowedScreen auf einem zweit-Desktop öffnen kann.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Antworten