 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 30.08.2006, 11:31 Titel: ALT+ENTER neu definieren |
|
|
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 |
|
 |
psygate
Anmeldungsdatum: 05.04.2005 Beiträge: 304 Wohnort: Wien und der Computer
|
Verfasst am: 30.08.2006, 20:37 Titel: |
|
|
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 )
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 |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 30.08.2006, 21:41 Titel: |
|
|
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
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 |
|
 |
Eisbaer

Anmeldungsdatum: 16.10.2004 Beiträge: 354 Wohnort: Deutschland,Bayern
|
Verfasst am: 31.08.2006, 07:53 Titel: Tastatur systemweit überwachen |
|
|
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 |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 31.08.2006, 12:18 Titel: |
|
|
Ok, danke erstmal für die Antwort.
Ob ich das hinkriege zu portieren
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 31.08.2006, 19:01 Titel: |
|
|
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 |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 05.09.2006, 12:33 Titel: |
|
|
@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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 05.09.2006, 13:45 Titel: |
|
|
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 |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 06.09.2006, 09:09 Titel: |
|
|
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 |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 06.09.2006, 10:06 Titel: |
|
|
Hi,
wenn du alles um fbgfx vermeiden könntest (kein Screen, Multikey, Line etc) müsste es ohne selbstcompilierte FB-Version gehen
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 |
|
 |
noop
Anmeldungsdatum: 04.05.2005 Beiträge: 259
|
Verfasst am: 07.09.2006, 04:44 Titel: |
|
|
ok, thx.
Naja ganz auf FB-Befehle verzichten wird wohl was schwierig.
Dann muss ich mich halt so zufrieden geben;)
mfg noop |
|
Nach oben |
|
 |
|
|
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.
|
|