Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 07.09.2005, 21:56 Titel: Bildschirmauflösung ermitteln |
|
|
Hallo
Wie kann ich in FB die Bildschirmauflösung unter WIndows des Benutzers ermitteln?
Geht das leicht oder ist das mal wieder was kompliziertes über die WIn-API?
mfg noop |
|
Nach oben |
|
|
helpy
Anmeldungsdatum: 22.03.2005 Beiträge: 17
|
|
Nach oben |
|
|
ts-soft
Anmeldungsdatum: 13.02.2005 Beiträge: 26 Wohnort: Berlin
|
Verfasst am: 08.09.2005, 01:23 Titel: |
|
|
Wie ermittelt man damit welcher Screen und wieviele Sceens vorhanden sind. Inzwischen haben wohl ca. 15% aller User DualScreen. |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.09.2005, 09:16 Titel: |
|
|
und screeninfo zeigt auch nur die Info über den screen an, der in FB aufgerufen wurde, oder funktioniert das auch wenn kein screen aufgerufen wurde? Normalerweise bei nem Konsolenprogramm was ja ohne screenabgabe und ohne gui-option zwangsläufig entsteht müsste er doch dann die daten für screen 0 ausgeben, oder? _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
helpy
Anmeldungsdatum: 22.03.2005 Beiträge: 17
|
Verfasst am: 08.09.2005, 10:22 Titel: |
|
|
Ich hab' leider keinen Dual Screen.
Mit... Code: | SCREENINFO w, h, depth
PRINT "Bildschirmauflösung: " + STR$(w) + " x " + STR$(h) + " x " + STR$(depth);
sleep | ... (compiliert mit "-s console") wird bei mir die aktuelle Auflösung angezeigt! |
|
Nach oben |
|
|
helpy
Anmeldungsdatum: 22.03.2005 Beiträge: 17
|
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 08.09.2005, 21:58 Titel: |
|
|
THX
Werds mir mal angucken.
Gleich mal 2 neue Fragen:
Wenn ich MULTIKEY mit SELECT CASE benutzen will funzt dat net.
Code: |
DO
SELECT CASE MULTIKEY(&H)
CASE &H1:END
END SELECT
LOOP
|
Da kommt du die Meldung ob ich Microsoft die Fehlermeldung schicken will.
Wie kann ich das mit SELECT CASE machen?
Oda muss ich IF THEN benutzen(ist halt ein bisschen mehr arbeit-select case mag ich irgendwie mehr;))
2.
Wenn ich mit POKE BYTE, zahl, -1 z.b auf &H54(war doch Num...) schreibe müsste doch eigentlich das Lämpchen neben Num ausgehen.
Auch wenn ich dieses wieder mit PEEK auslese steht dort -1.
Warum klappt es aba doch nicht? |
|
Nach oben |
|
|
MisterD
Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 08.09.2005, 23:28 Titel: |
|
|
SELECT CASE -1
CASE MULTIKEY(scancode)
tuwas
CASE MULTIKEY(andererscancode)
tuwasanderes
END SELECT
multikey(&H) is schwachsinn, &H{hexzahl} gibt es, &H ist ein ungültiger ausdruck oihne hexzahl dahinter.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
|
d.j.peters Gast
|
Verfasst am: 09.09.2005, 06:15 Titel: |
|
|
ts-soft hat Folgendes geschrieben: |
Wie ermittelt man damit welcher Screen und wieviele Sceens vorhanden sind. Inzwischen haben wohl ca. 15% aller User DualScreen. |
Hi Thomas das geht mit dem WIN API (GDI) und auch mit dem X11 API.
Mit EnumDisplayDevices kriegst Du den DEVICENAMEN per index 0=1 1=2 ...
wenn Du den Namen vom zweiten Dualdisplay hast kommt EnumDisplaySettings zum Einsats.
Die füllt dann folgene Struktur.
Code: | Public Const CCHDEVICENAME = 32
Public Const CCHFORMNAME = 32
Public Type DEVMODE
dmDeviceName As String * CCHDEVICENAME
dmSpecVersion As Integer
dmDriverVersion As Integer
dmSize As Integer
dmDriverExtra As Integer
dmFields As Long
dmOrientation As Integer
dmPaperSize As Integer
dmPaperLength As Integer
dmPaperWidth As Integer
dmScale As Integer
dmCopies As Integer
dmDefaultSource As Integer
dmPrintQuality As Integer
dmColor As Integer
dmDuplex As Integer
dmYResolution As Integer
dmTTOption As Integer
dmCollate As Integer
dmFormName As String * CCHFORMNAME
dmUnusedPadding As Integer
dmBitsPerPel As Long
dmPelsWidth As Long
dmPelsHeight As Long
dmDisplayFlags As Long
dmDisplayFrequency As Long
End Type |
Grüsse Joshy |
|
Nach oben |
|
|
ts-soft
Anmeldungsdatum: 13.02.2005 Beiträge: 26 Wohnort: Berlin
|
Verfasst am: 09.09.2005, 21:11 Titel: |
|
|
thx, Joshy
Ich dachte aber das sowas in einer neuen Programmiersprache gleich mit eingebracht wird, da diese Desktop-Enumeration ja inzwischen zur Pflichtübung gehört, wenn man seine Fensterkoordinaten sichert. Kenne viele, die immer schimpfen weil die Fenster sich immer nur auf Desktop 0 öffnen und extra verschoben werden müssen. Vielleicht wird SCREENINFO ja noch irgendwann erweitert |
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 10.09.2005, 14:06 Titel: |
|
|
@helpy: Ja funzt bei mir auch. thx
@MisterD: Das klappt nicht:
Code: |
DO
SELECT CASE -1
CASE MULTIKEY(&H1):PRINT "ESC"
CASE MULTIKEY(&H1C):PRINT "ENTER"
END SELECT
SLEEP 10
LOOP
|
Gibts auch was für meine 2. Frage? |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 10.09.2005, 16:26 Titel: |
|
|
Sieh dir doch bitte mal den Eintrag hier an:
http://www.freebasic.de/r.php?s=MULTIKEY
Generell:
Code: | DO
IF MULTIKEY(&H1) THEN PRINT "ESC"
IF MULTIKEY(&H1C) THEN PRINT "ENTER"
WHILE LEN(INKEY$): WEND ' Tastaturpuffer leeren
LOOP |
_________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
tilli
Anmeldungsdatum: 10.09.2005 Beiträge: 73
|
Verfasst am: 10.09.2005, 20:37 Titel: |
|
|
Moin,
man sollte sich doch überlegen, ob man die Inkey$-Variante vorzieht - die funktioniert hervorragend mit case.
BTW: die Keyborad scancodes passen nicht immer: Thema QWERTZ und QWERTY - Tastatur - man sollte das im Tutorial erwähnen!!! (Scancodetabelle)
CU2
Tilli |
|
Nach oben |
|
|
Dusky_Joe
Anmeldungsdatum: 07.01.2005 Beiträge: 1007 Wohnort: Regensburg/Oberpfalz
|
Verfasst am: 11.09.2005, 16:20 Titel: |
|
|
Danke für den Hinweis!
Generell kannst du das aber auch selbst ändern!
Geh einfach auf www.freebasic.net
in der rechten unteren Ecke, ziemlich versteckt ist ein pi-Symbol. Klick darauf. Dann kannst du dich anmelden bzw. ein Benutzerkonto erstellen. Sobald du das getan hast, erscheint bei jedem Tutorial (außer den Referenz-Einträgen) ein Bearbeiten-Symbol (oder war es ein "Klick hier zum Bearbeiten"-Text?). Und schon kannst du das Tutorial nach belieben verändern.
Falls du dich mit WIKI-Code nicht auskennst: Das ist wie hier im Forum. Wenn Text fett gedruckt werden soll, musst du ihn zwischen
setzen.
das selbe mit i statt b macht den Text kursiv.
dann gibts auch noch den sog. code-Tag, also eben code statt b einsetzen. Dann wird der Text so formatiert wie oben die Code-Box.
Ach, und falls das grade ein großer Witzbold lesen sollte: Mecki hat sich ein tolles Backup-System ausgedacht. Wenn also jemand einfach den gesamten Text löschen sollte, wird er einfach wieder hergestellt.
Und jetzt an die Arbeit _________________ fully biological degradable
Once, the big wave arrives, you've got two ways, you can go:
Either, you ride it, or you don't do.
But, if you don't ride, you'll never know wether you'd have gone wet. |
|
Nach oben |
|
|
tilli
Anmeldungsdatum: 10.09.2005 Beiträge: 73
|
Verfasst am: 11.09.2005, 17:18 Titel: |
|
|
Moin nochmal,
Das Backupsystem ist wirklich toll: Ich komme gar nicht erst dazu etwas zu ändern
Wenn ich auf den Button - I-Hier klicken um etwas zu bearbeiten - klicke, dann kommt ein Verweis auf das Forum ... ist bestimmt 'ne ganz tolle Sache scheint aber bei mir wieder nicht zu funken
oder muss Mecki mich erst freischalten (persönlich)?
Ich poste da am besten einfach mal rein - mal sehen ob er sich da heute rumiegelt
CU2
Tilli |
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 11.09.2005, 18:12 Titel: |
|
|
Also muss ich es mit IF THEN machen?
@tillt: Ich muss MULTIKEY benutzen, weil ich mehrere TAsten gleichzeitig abfragen will. |
|
Nach oben |
|
|
Mecki Igel
Anmeldungsdatum: 10.09.2004 Beiträge: 985 Wohnort: Niederbayern
|
|
Nach oben |
|
|
jb
Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 11.09.2005, 19:50 Titel: |
|
|
Also zu deinem Problem, noop:
Speichere zu erst alle Scancodes in einem Feld, z.B. mit Read & Data.
Dann kannst du bequem mit Select Case arbeiten, so wie du es vorhattest:
Code: |
restore codes
' Das Feld dimensionieren
read anzahl
dim scancodes(100)
for i = 1 to anzahl step 1
read scancodes(i)
next i
' Jetzt geht's los:
do
for i = 1 to anzahl step 1
if multikey(scancodes(i)) then
select case scancodes(i)
case &H1
[...]
case &H2
[...]
end select
end if
next i
codes:
' Die Anzahl an Scancodes:
data 2
' Jetzt kommen die Codes:
data &H1, &H2
|
Nicht getestet, sollte aber klappen.
jb |
|
Nach oben |
|
|
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 11.09.2005, 20:46 Titel: |
|
|
danke
ic probiers mal aus |
|
Nach oben |
|
|
|