Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

ALT+ENTER neu definieren

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 30.08.2006, 11:31    Titel: ALT+ENTER neu definieren Antworten mit Zitat

Hallo,
Ich hab mal die Forensuche und Befehlsreferenz bemüht aber ist leider nichts bei rumgekommen.

Problem ist, dass ich gerne ALT+ENTER verwenden würde.
Das ist allerdings für Fenster maximieren reserviert.
Mit diesem Code
Code:

screen 19,,,4
do
if multikey(&h38) then
    locate 1:print "alt"
    if multikey(&h1C) then
        exit do
    end if
else
    locate 1:print "   "
end if
sleep 10
loop until inkey$=chr$(27)

kann ich zwar ALT+ENTER benutzen aber der maximieren "button" ist deaktiviert.
Den würde ich aber gerne behalten.
Kann ich also FB irgendwie ALT+ENTER "klauen"?

mfg noop
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
psygate



Anmeldungsdatum: 05.04.2005
Beiträge: 304
Wohnort: Wien und der Computer

BeitragVerfasst am: 30.08.2006, 20:37    Titel: Antworten mit Zitat

also... es gibt die möglichkeit, dass du (ich versteh das problem im moment ned ganz... sorry, der alkohol hat mir ein paar löcher geschossen mit den Augen rollen lachen )

Aber, wenns darum geht, dass du einfach maximieren willst, dann mach das doch mit puffern und screen.

Ich meine das in etwa so:

Code:

option explicit
dim as integer ptr image
dim as string key
dim as integer width,height

width=640
height=480

screenres width,height,32,,
image=imagecreate(width,height)

'Hier kann man was einfügen, wo einfach mal etwas gezeichnet wird, als demo!

while key<>chr(27) 'Auf ESC Abbrechen
key=inkey$
if key="m" then put image,(0,0),screenptr:screenres width,height,32,,1:put (0,0),image
if key="n" then put image,(0,0),screenptr:screenres width,height,32,,:put (0,0),image
wend

es tut mir leid, es funzt im moment noch ned ganz, aber die grund idee ist, dass du einfach den aktuellen bildschirm inhalt in einem puffer speicherst, dann den bildschirmmodus wechselst und dann eben wieder diesen puffer auf den bildschirm schreibst.
_________________
Danke an Volta für seine großartige MMX_fade function. *verneig*
Personal-DNA:
<script src="http://personaldna.com/h/?k=qtrCFboSuCOpFrX-OI-AADBA-f78d&t=Free-Wheeling+Leader">
</script>


Zitat:
Das Forum für den zum QBASIC kompatieblen open soure FreeBasic Kompiler.
by DJ. Peters
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 30.08.2006, 21:41    Titel: Antworten mit Zitat

Nein, das meinte ich nicht.
Trotzdem danke für die Antwort.

Ich würde gerne die Tastenkombination ALT+ENTER benutzen, die aber schon von FB für maximieren reserviert ist.
Wenn ich sie mit
Code:

screen 19,,,4

für mich freigebe, dann gibt es aber nicht mehr den maximieren button, oben rechts neben dem Kreuz zum schließen.
Den will ich nämlich gerne behalten.

Ich will also ALT+ENTER für mich freigeben ohne den Maximieren button zu sperren.


mfg noop
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Eisbaer



Anmeldungsdatum: 16.10.2004
Beiträge: 354
Wohnort: Deutschland,Bayern

BeitragVerfasst am: 31.08.2006, 07:53    Titel: Tastatur systemweit überwachen Antworten mit Zitat

Naja mit der API könnte mann da schon was machen.

Ist jetzt VB Code aber ich kann das jetzt gerade nicht auf FreeBasic umbauen, da ich hier im INET-Cafe sitze und keinen Compiler zum testen habe, aber da darfst du dich selber etwas spielen...


Zitat:
Verwendete API-Aufrufe:
GetAsyncKeyState




Code:
'------------- Anfang Projektdatei Project1.vbp -------------
'--------- Anfang Formular "Form1" alias Form1.frm  ---------
' Steuerelement: Timersteuerelement "Timer1"
' Steuerelement: Textfeld "Text1"


Option Explicit

Private Declare Function GetAsyncKeyState Lib "user32" _
        (ByVal vKey As Long) As Integer

Private Sub Timer1_Timer()
    Dim X As Long
 
    For X = 48 To 90
        If CompKey(X, UCase(Chr$(X))) Then Exit Sub
        If CompKey(X + 48, UCase("NUM " & Chr$(X))) Then Exit Sub
    Next X
   
    If CompKey(8, "BACKSPACE") Then Exit Sub
    If CompKey(9, "TAB") Then Exit Sub
    If CompKey(13, "ENTER") Then Exit Sub
    If CompKey(16, "SHIFT") Then Exit Sub
    If CompKey(17, "STRG") Then Exit Sub
    If CompKey(18, "ALT") Then Exit Sub
    If CompKey(19, "PAUSE") Then Exit Sub
    If CompKey(27, "ESC") Then Exit Sub
    If CompKey(33, "PAGE UP") Then Exit Sub
    If CompKey(34, "PAGE DOWN") Then Exit Sub
    If CompKey(35, "ENDE") Then Exit Sub
    If CompKey(36, "POS1") Then Exit Sub
    If CompKey(37, "LEFT") Then Exit Sub
    If CompKey(38, "UP") Then Exit Sub
    If CompKey(39, "RIGHT") Then Exit Sub
    If CompKey(40, "DOWN") Then Exit Sub
    If CompKey(44, "DRUCK") Then Exit Sub
    If CompKey(45, "INSERT") Then Exit Sub
    If CompKey(46, "DEL") Then Exit Sub
    If CompKey(144, "NUM") Then Exit Sub
    If CompKey(145, "ROLLEN") Then Exit Sub
   
    For X = 112 To 127
        If CompKey(X, "F" & CStr(X - 111)) Then Exit Sub
    Next X
   
    ' usw... usw...
End Sub

Private Function CompKey(KCode As Long, KText As String) As Boolean
    Dim Result As Integer
   
    Result = GetAsyncKeyState(KCode)
    If Result = -32767 Then
        Text1.Text = Text1.Text & "[" & KText & "]" & vbCrLf
        Text1.SelStart = Len(Text1.Text)
        CompKey = True
    Else
        CompKey = False
    End If
End Function
'---------- Ende Formular "Form1" alias Form1.frm  ----------
'-------------- Ende Projektdatei Project1.vbp --------------


Und bevor jetzt wieder die Fragen dazu kommen...


Zitat:
Declare Function GetAsyncKeyState Lib "user32" ( _
ByVal vKey As Long) As Integer



Über GetAsyncKeyState ist zu erfahren, ob derzeit eine Taste betätigt ist oder ob sie seit dem letzten Aufruf dieser Funktion gedrückt wurde. Dies ist für Anwendungen die auf Änderungen der Shift- und Funktionstasten reagieren müssen. Es kann z.B. festgestellt werden, ob eine Funktionstaste gedrückt wurde, bevor mit der Maus ein bestimmtes Element gewählt wurde.

Oder:



Zitat:
Declare Function GetKeyboardState Lib "user32" ( _
pbKeyState As Byte) As Long



GetKeyboardState kopiert den aktuellen Status der 256 virtuellen Tasten. Mit dieser Funktion kann auch der Zustand mehrer gleichzeitig gedrückter Tasten ermittelt werden. Dies ist besonders nützlich für Tastenkombinationen.


Parameter: pbKeyState

Zeiger auf ein 256 Byte großes Array in das den Status der einzelnen Tasten aufnimmt. Ist eine Taste gedrückt so wird das oberste Bit des im Array befindlichen Bytes gesetzt, andernfalls sit sie nicht gedrückt. Das untere Bit ist gesetzt wenn die Anzahl der Tastendrücke ungerade ist, anderfalls 0.


Rückgabewerte
1 Die Funktion wurde erfolgreich ausgeführt.
0 Es lag ein Fehler vor.



Und noch was zum Abschluss:
http://dotnet.mvps.org/vb/articles/keyboardhook/


Gruß Eisbaer
_________________
Eigene Webseite:
http://www.eisbaer-studios.de
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 31.08.2006, 12:18    Titel: Antworten mit Zitat

Ok, danke erstmal für die Antwort.
Ob ich das hinkriege zu portieren mit den Augen rollen
Ich werds auf jeden Fall morgen mal versuchen.

Eine andere Bitte.
Da ich hier zurzeit in Neuseeland bin und die hier natürlich keine Umlaute haben(nur mit Alt+x) kann ich diesen Code nicht ausprobieren.
Kann einer den bitte bei sich ausprobieren ob Umlaute ausgegeben werden, wenn man diese eingibt? thx

Code:

#include "windows.bi"
declare sub umlaute
dim shared t as string, x as integer

do
t=inkey$
select case t
case chr$(32) to chr$(127):umlaute
case chr$(27):end
end select
sleep 10
loop

sub umlaute
x+=1
CharToOEM StrPtr(t), StrPtr(t)
locate 1,x:print t
t=""
end sub



mfg noop
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 31.08.2006, 19:01    Titel: Antworten mit Zitat

noop hat Folgendes geschrieben:
Eine andere Bitte.
Da ich hier zurzeit in Neuseeland bin und die hier natürlich keine Umlaute haben(nur mit Alt+x) kann ich diesen Code nicht ausprobieren.
Kann einer den bitte bei sich ausprobieren ob Umlaute ausgegeben werden, wenn man diese eingibt? thx

Ein moment.

Nein, geht nicht.
Eingabe:
Code:
Das älteste Ölfass über dem Meer

Ausgabe:
Code:
Das lteste lfass ber dem Meer


http://de.wikibooks.org/wiki/FreeBasic:_Umlaute


Also erstens, weil öäü im Oberenbereich der Ascii Tabelle liegen
Code:
? chr$(129) 'ü
? chr$(154) 'Ü
? chr$(132) 'ä
? chr$(142) 'Ä
? chr$(148) 'ö
? chr$(153) 'Ö


Zweitens:
Input berüchsichtigt das äöü Zeugs bereits, also gibt es:
Code:
#include "windows.bi"
declare sub umlaute
dim shared t as string, x as integer

do
t=inkey$
select case t
case chr$(32) to chr$(255):umlaute
case chr$(27):end
end select
sleep 10
loop

sub umlaute
x+=1
locate 1,x:print t
t=""
end sub

_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 05.09.2006, 12:33    Titel: Antworten mit Zitat

@Michael Frey:thx. fürs testen und Lösung.
@Eisbaer:
Das kommt jetzt bei mir da raus:
Code:

#include "windows.bi"
Option Explicit
Do
    if GetAsyncKeyState(VK_lmenu) or GetAsyncKeyState(VK_rmenu) Then
        if GetAsyncKeyState(VK_return) Then
            setkeyboardstate(vk_return)=null
            locate 14:print "alt+enter"
        end if
    elseif GetAsyncKeyState(VK_ESCAPE) then
        end
    End If
Loop

Allerdings funzt es leider nicht.
Die Tasten erkennen tut es aber FB bekommt auch noch die Tasten mit.
Also scheint
Code:

setkeyboardstate(vk_return)=null

nicht zu funktionieren.

Hat jemand eine Lösung?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 05.09.2006, 13:45    Titel: Antworten mit Zitat

Hi,
keine Lösung, nur der Verdacht, dass es nur mit nur_API (ohne fbgfx-Befehle) gehen könnte.
Siehe im FB-Source 'libfb_gfx_win32.c' Suchwort "is_alt_enter".
D.h. die Tastenkombination wird weit vor multikey oder sonstigen fbgfx-Befehlen ausgewertet.

Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 06.09.2006, 09:09    Titel: Antworten mit Zitat

Yups.
Steht da drinne.

1.Kann ich das vllt. entfernen, selbst kompilieren und dann im FB-Installationsordner die entsprechende Datei ersetzen?
(Ich habe allerdings keine Ahnung wie das gehen soll, weil das C-Code ist...)


2.Nach GetAsyncKeyState bin ich in der Win-API Referenz auf
GetCursorPos gestoßen.
Das will aber leider bei mir nicht so ganz funktionieren.
Das habe ich mir zusammengebastelt:
Code:

#include "windows.bi"
type xy
    x as long
    y as long
end type

dim position as xy
do
locate 1:print GetCursorPos(position.x)
locate 2:print GetCursorPos(position.y)
sleep 25
loop until inkey$=chr$(27)

Fehler:(läuft zwar, zeigt aber nur null an)
Zitat:

warning level 0: Passing scalar as pointer, at parameter 1 of GETCURSORPOS()

Weiß jemand wie ich das zum Laufen kriege?


mfg noop
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 06.09.2006, 10:06    Titel: Antworten mit Zitat

Hi,
wenn du alles um fbgfx vermeiden könntest (kein Screen, Multikey, Line etc) müsste es ohne selbstcompilierte FB-Version gehen durchgeknallt

2. versuch mal:
Code:
#include "windows.bi"
dim position as POINT
do
GetCursorPos @position
locate 1:print position.x ;"   "
locate 2:print position.y ;"   "
sleep 25
loop until inkey$=chr$(27)


Gruß Volta
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
noop



Anmeldungsdatum: 04.05.2005
Beiträge: 259

BeitragVerfasst am: 07.09.2006, 04:44    Titel: Antworten mit Zitat

ok, thx.

Naja ganz auf FB-Befehle verzichten wird wohl was schwierig.
Dann muss ich mich halt so zufrieden geben;)


mfg noop
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz