Keyboard Input Display Software

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Keyboard Input Display Software

Beitrag von Max_der_Held »

Hi Leute,

Hier gerade wieder ein kleines Programm, mit dem man
die gesamte Tastatureingabe auf einem Fenster zeigen kann.
Das hilft z.B. bei VideoTutorials,
da dann die Leute sehen was man macht (z.B. bei Blender)

Hier.. der Sourcecode, mit MIT. Lizenz, es ist also praktisch alles erlaubt, nur der Haftungsausschluss gilt.

Programmierzeit.. 10-15 minuten

Code: Alles auswählen

; -----------------------------------------------------------------------------------
; -----------------------------------------------------------------------------------
; -- programmed by Aigner, Max (bavaria) 
; -- 22. Mai 2010
; -- 10:39 o'clock

; -----------------------------------------------------------------------------------
; -------------------------------------------------------------- Enumeration -------
; -----------------------------------------------------------------------------------

Enumeration
  #Window_tastaturanzeige
EndEnumeration

Enumeration
  #text_tastatureingabe
EndEnumeration

#ClearDelay = 180; Time until text will be erased.
#vk_oem_attn = $F0
; -----------------------------------------------------------------------------------
; -------------------------------------------------------------- STRUCTURES ----------
; -----------------------------------------------------------------------------------
Structure keylist
   EndTime.i ; in Milliseconds.. ;) 
   Keystring.s ; the String (text) of the key.. -> ESC
   keyid.i   ; the ID of the Key.  -> #vk_escape..
EndStructure 

; -----------------------------------------------------------------------------------
; -------------------------------------------------------------- Globals ------------
; -----------------------------------------------------------------------------------
;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Courier New", 18, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Courier New", 16)
Global FontID3
FontID3 = LoadFont(3, "Courier New", 16, #PB_Font_Bold)


; -----------------------------------------------------------------------------------
; -------------------------------------------------------------- Procedures  --------
; -----------------------------------------------------------------------------------

Macro DoubleQuote  ; macro, um Macros in strings zu ermöglichen.. z.B. Doublequote#hans#doublequote
    "
EndMacro


Macro getkey                  ( Key_  ); Macro um die Tasten alle abzufragen... 
   key.s = Doublequote#Key_#Doublequote 
   macro_getkey_text.s        = ""
   KeyLoaded                  = 0
   
   
   If key > ""
      If getasynckeystate_(#vk_#Key_)
        
         ForEach Keylist() ; checks, wether the key is already displayed or not.
            If Keylist()\keyid = #vk_#Key_
               KeyLoaded = 1
               Keylist()\EndTime = ElapsedMilliseconds() + #ClearDelay
               Break 
            EndIf 
         Next 
         
         If KeyLoaded = 0    ; If key has not been pressed before
               AddElement ( Keylist())
                  Keylist()\Keystring = key
                  Keylist()\keyid     = #vk_#Key_
                  Keylist()\EndTime = ElapsedMilliseconds() + #ClearDelay
         EndIf 
         
      EndIf 
   EndIf 
   
EndMacro 

Macro  DisplayAllKeys()
   
   ForEach Keylist()  ; replace wrong writing (in english: =spelling?..)..
      Select LCase( Keylist()\Keystring )
         Case "control"
            Keylist()\Keystring = "CTRL"
         Case "shift"
            Keylist()\Keystring = "SHIFT"
         Case "menu"
            Keylist()\Keystring = "ALT"
         Case "prior"
            Keylist()\Keystring = "Page Up"
         Case "next" ; page down
            Keylist()\Keystring = "Page Down"
         Case "escape"
            Keylist()\Keystring = "ESC"
         Case "numpad0"
            Keylist()\Keystring = "NUM0"
         Case "numpad1"
            Keylist()\Keystring = "NUM1"
         Case "numpad2"
            Keylist()\Keystring = "NUM2"
         Case "numpad3"
            Keylist()\Keystring = "NUM3"
         Case "numpad4"
            Keylist()\Keystring = "NUM4"
         Case "numpad5"
            Keylist()\Keystring = "NUM5"
         Case "numpad6"
            Keylist()\Keystring = "NUM6"
         Case "numpad7"
            Keylist()\Keystring = "NUM7"
         Case "numpad8"
            Keylist()\Keystring = "NUM8"
         Case "numpad9"
            Keylist()\Keystring = "NUM9"
         Case "lbutton"
            Keylist()\Keystring = "LMouse"
         Case "rbutton"
            Keylist()\Keystring = "RMouse"
         Case "mbutton"
            Keylist()\Keystring = "MMouse"
         Case "oem_period"
            Keylist()\Keystring = "Period" ; PUNKT! ;) 
         Case "oem_comma"
            Keylist()\Keystring = "Comma" ; komma..
         Case "oem_plus"
            Keylist()\Keystring = "Plus" ; komma..
         Case "oem_minus"
            Keylist()\Keystring = "Minus" ; komma..
      EndSelect 
   Next 
   
   ForEach Keylist()  
      keylistcounter + 1 
      getallkeys_output.s + Keylist()\Keystring 
      If keylistcounter < ListSize( Keylist())
         getallkeys_output + "+"
      EndIf 
      
      If Keylist()\EndTime < ElapsedMilliseconds()
         DeleteElement( Keylist())
      EndIf 
   Next 
   If Not getallkeys_output = GetGadgetText( #text_tastatureingabe) ; And Not getallkeys_output = ""
      SetGadgetText( #text_tastatureingabe , getallkeys_output )
   EndIf 
EndMacro 

Procedure getallkeys() ; prüft alle tasten ob sie gedrückt wurden..
   Protected  getallkeys_output.s , keylistcounter.i , KeyLoaded.i
   Static  NewList Keylist.keylist() ; can be static, then every pressed key will be there for 300 ms..
   
   getallkeys_IsKeyPressed = 0
   
   getkey(menu)
   getkey(Control)
   getkey(shift)
   getkey(print)
   getkey(pause)
   getkey( space) 
   getkey(tab)
   getkey( a ) 
   getkey( b ) 
   getkey( c ) 
   getkey( d ) 
   getkey( e ) 
   getkey( f ) 
   getkey( g ) 
   getkey( h ) 
   getkey( i ) 
   getkey( j ) 
   getkey( k ) 
   getkey( l ) 
   getkey( m ) 
   getkey( n ) 
   getkey( o ) 
   getkey( p ) 
   getkey( q ) 
   getkey( r ) 
   getkey( s ) 
   getkey( t ) 
   getkey( u ) 
   getkey( v ) 
   getkey( w ) 
   getkey( x ) 
   getkey( y ) 
   getkey( z ) 
   getkey( 1 ) 
   getkey( 2 ) 
   getkey( 3 ) 
   getkey( 4 )
   getkey( 5 )
   getkey( 6 ) 
   getkey( 7 )
   getkey( 8 )
   getkey( 9 ) 
   getkey( 0 ) 
   getkey( add )
   getkey( subtract)
   getkey( down )
   getkey( up )
   getkey( left)
   getkey( right)
   getkey( End )
   getkey( divide)
   getkey( multiply)
   getkey( escape)
   getkey( f1)
   getkey( f2)
   getkey( f3)
   getkey( f4)
   getkey( f5)
   getkey( f6)
   getkey( f7)
   getkey( f8)
   getkey( f9)
   getkey( f10)
   getkey( f11)
   getkey( f12)
   getkey( f13)
   getkey( f14)
   getkey( f15)
   getkey( f16)
   getkey( f17)
   getkey( f18)
   getkey( f19)
   getkey( f20) ; there are 24 function keys... for special function keyboards.
   getkey( f21)
   getkey( f22)
   getkey( f23)
   getkey( f24)
   getkey( home)
   getkey( help)
   getkey( lwin)
   getkey( rwin)
   getkey( mbutton)
   getkey( lbutton)
   getkey( rbutton)
   getkey( numlock)
   getkey( numpad0)
   getkey( numpad1)
   getkey( numpad2)
   getkey( numpad3)
   getkey( numpad4)
   getkey( numpad5)
   getkey( numpad6)
   getkey( numpad7)
   getkey( numpad8)
   getkey( numpad9)
   getkey( print)
   getkey( Return)
   getkey( volume_down)
   getkey( volume_up)
   getkey( zoom)
   getkey( delete)
   getkey( back)
   getkey( attn)
   getkey(snapshot)
   getkey( separator)
   getkey(scroll)
   getkey(PRIOR)
   getkey(play)
   getkey(Next)
   getkey(oem_period)
   getkey(oem_comma)
   getkey(oem_plus)
   getkey(oem_minus)
   getkey(oem_attn)
   getkey(capital)
   getkey(crsel)
   getkey(convert)
   getkey(ereof)
   getkey(insert)
   getkey(media_next_track)
   getkey(media_play_pause)
   getkey(media_prev_track)
   getkey(media_stop)
   getkey(packet)
   getkey(PRIOR)
   getkey(play)

   DisplayAllKeys() ; displays all keys..
EndProcedure 
#vk_oem_attn = $F0
Procedure Open_Window_tastaturanzeige()
  If OpenWindow(#Window_tastaturanzeige, 811, 342, 148, 56, "Gemusoft Tastatur",  #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_tastaturanzeige))
      TextGadget(#text_tastatureingabe, 0, 0, 550, 60, "")
      SetGadgetFont(#text_tastatureingabe, FontID3)
      StickyWindow( #Window_tastaturanzeige , 1 )
      
      Repeat 
         evt  = WaitWindowEvent(10)
         getallkeys()
         
         Select evt
            Case #PB_Event_Gadget
               
            Case #PB_Event_Menu
            
            Case #PB_Event_CloseWindow 
              End 
         EndSelect 
         
      ForEver 
    EndIf
  EndIf
EndProcedure

Open_Window_tastaturanzeige()
lg
Max A. (Draufwalker )
Zuletzt geändert von Max_der_Held am 22.05.2010 23:26, insgesamt 4-mal geändert.
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: Keyboard Input Display Software

Beitrag von Blackskyliner »

Meine Anregungen:

Wie eine History reinbauen, dass wenn die Tasten losgelassen wurden die dann noch Angezeigt werden, so bis zu 2-3 Einträge oder so...
Also wenn Losgelassen, historisch speichern, denn sonst kann man bei schnellen Tasteneingaben wie in Grafikprogrammen meistens unbewusst verwendet, trotzdem noch die Aktion nachvollziehen. Aber wenn man das nicht will, wenigstens das getippt für >5 Sekunden anzeigen nachdem man losgelassen hat, solange keine neuen eingaben dazu kommen... da wie gesagt sonst zu schnell wieder Weg. Auch in einem Tutorial will man zügig arbeiten ;)

Außerdem kein CreateGadgetList mehr verwenden, da veraltet und ohne Funktion...

Außerdem flackert das ein bisschen.. von daher doppelbuffering?

Aber ansonsten ganz nett und nützlich. :)
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: Keyboard Input Display Software

Beitrag von c4s »

Kleiner Verbesserungsvorschlag auch von mir: Nummern und Sonderzeichen gehen nicht.
"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
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Keyboard Input Display Software

Beitrag von Max_der_Held »

hui *schwitz* hoffentlich ham wir noch nicht verloren (ok.. inzwischen stehts 2:0 für Mailand..)
hab jetz schnell noch ziemlich alle tastaturtasten eingebaut die mir so eingefallen sind( plus haufenweise f-tasten bis f22.. numpad etc..)
Und ein Zeitverzögertes Clearen der letzten Tasten.. soweit eingebaut :)

Das flimmern.. kam daher dass er immer und immer wieder die anzeige upgedated hat, auch wenn sich gar nichts geändert hat -> habs verbessert :)

eine History.. puh^^ wär sicher schön *hust* aber im moment.... isses mir zu aufwändig^^ kann ja jemand so hinzufügen^^


thx fürs testen c4s und blackskyliner :) hat sich noch was eingeschlichen?
lg :)
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: Keyboard Input Display Software

Beitrag von Blackskyliner »

Passert scheinbar nur bei ALT, wenn man das einzeln Drückt, dann bleibt des stehen, bis man eine andere Taste drückt... ZUmindest bei mir. PB 4.41 @ Windows7 Prof. x64

Alles andere wunderbar :)

Jetzt muss es nur noch ein Textoverlay, statt des hässlichen Fensters sein und ich wäre überglücklich ;) mal schaun ich werd mal mit Skinned Window o.ä. rumspielen :)

Außerdem fehlt die EINFG Taste :)
Nicht zu vergessen das Zirkumflex/Grad (^/°) und auch < bzw. > werden nicht erkannt. auch der - wird nicht erkannt :) und der Backtick ´ bzw ` auch nicht die tasten +/*/~ und '/# also alle Sonderzeichentasten einer deutschen Tastatur :)
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Benutzeravatar
Max_der_Held
Beiträge: 595
Registriert: 18.04.2006 17:01
Wohnort: Bavaria
Kontaktdaten:

Re: Keyboard Input Display Software

Beitrag von Max_der_Held »

Xd sauber! ^^ viel erfolg hehe :)
naja das problem bei der Alt-taste^^
das ist bei allen windows-fenstern, die dieses icon ganz links oben in der leiste haben..
z.B. auch skype..
wenn du nach ALT noch Pfeil nach unten drückst kommst du ins windows-fenstermenü (verschieben/schließen etc..)
lg :)


achso ja.. doofe deutsche tastatur! :P ^^ ;)
nagut nagut.. dafür hab ich keine #vk_-konstanten gefunden..^^ ;) )
kann ja schnell nochmal schaun..^^

edit -> einfügen geht jetz.. ebenso caps-lock, und die plus/minus tasten. was fehlt sind folgende zeichen:
'^´?<
und das MENÜ-zeichen zwischen der rechten windows und STRG-taste..
also 6 noch^^ dann ist es vollständig :) (das #-zeichen liegt ja z.b. auf der gleichen taste wie ' gleiches gilt für geteilt, unterstrich etc.. wird ja einafch shift und minus gedrückt z.b.)
Benutzeravatar
Blackskyliner
Beiträge: 532
Registriert: 28.07.2005 00:54
Wohnort: /home/Blackskyliner/

Re: Keyboard Input Display Software

Beitrag von Blackskyliner »

Hier mal noch meine Anpassungen, implementiert als Overlay, aber bloß quick and dirty, wenn da irgendwas falsch sein sollte einfach vorbei schreien ^.^

Ich gehe davon aus das des Overlay am unteren Bildschirmrand, die eigene Textgröße mit einbezogen, 50 Pixel entfernt sein muss, damit es bei meiner Klassischen Ansicht grade so nicht die Taskleiste berührt. Ansonsten halt den Wert bei DesktopHeight(0) um höhere werte verringern.

Code: Alles auswählen

; -----------------------------------------------------------------------------------
; -----------------------------------------------------------------------------------
; -- programmed by Aigner, Max (bavaria) 
; -- 22. Mai 2010
; -- 10:39 o'clock

; -----------------------------------------------------------------------------------
; -------------------------------------------------------------- Enumeration -------
; -----------------------------------------------------------------------------------

Enumeration
  #Window_tastaturanzeige
EndEnumeration

Enumeration
  #text_tastatureingabe
EndEnumeration

#ClearDelay = 500; Time until text will be erased.
Global outputString$ = ""

; -----------------------------------------------------------------------------------
; -------------------------------------------------------------- STRUCTURES ----------
; -----------------------------------------------------------------------------------
Structure keylist
   EndTime.i ; in Milliseconds.. ;) 
   Keystring.s ; the String (text) of the key.. -> ESC
   keyid.i   ; the ID of the Key.  -> #vk_escape..
EndStructure 

; -----------------------------------------------------------------------------------
; -------------------------------------------------------------- Globals ------------
; -----------------------------------------------------------------------------------
;- Fonts
Global FontID1
FontID1 = LoadFont(1, "Courier New", 18, #PB_Font_Bold)
Global FontID2
FontID2 = LoadFont(2, "Courier New", 16)
Global FontID3
FontID3 = LoadFont(3, "Courier New", 16, #PB_Font_Bold)


; -----------------------------------------------------------------------------------
; -------------------------------------------------------------- Procedures  --------
; -----------------------------------------------------------------------------------

Macro DoubleQuote  ; macro, um Macros in strings zu ermöglichen.. z.B. Doublequote#hans#doublequote
    "
EndMacro


Macro getkey                  ( Key_  ); Macro um die Tasten alle abzufragen... 
   key.s = Doublequote#Key_#Doublequote 
   macro_getkey_text.s        = ""
   KeyLoaded                  = 0
   
   
   If key > ""
      If GetAsyncKeyState_(#vk_#Key_)
        
         ForEach Keylist() ; checks, wether the key is already displayed or not.
            If Keylist()\keyid = #vk_#Key_
               KeyLoaded = 1
               Keylist()\EndTime = ElapsedMilliseconds() + #ClearDelay
               Break 
            EndIf 
         Next 
         
         If KeyLoaded = 0    ; If key has not been pressed before
               AddElement ( Keylist())
                  Keylist()\Keystring = key
                  Keylist()\keyid     = #vk_#Key_
                  Keylist()\EndTime = ElapsedMilliseconds() + #ClearDelay
         EndIf 
         
      EndIf 
   EndIf 
   
EndMacro 

Macro  DisplayAllKeys()
   
   ForEach Keylist()  ; replace wrong writing (in english: =spelling?..)..
      Select LCase( Keylist()\Keystring )
         Case "control"
            Keylist()\Keystring = "CTRL"
         Case "shift"
            Keylist()\Keystring = "SHIFT"
         Case "menu"
            Keylist()\Keystring = "ALT"
         Case "prior"
            Keylist()\Keystring = "Page Up"
         Case "next" ; page down
            Keylist()\Keystring = "Page Down"
         Case "escape"
            Keylist()\Keystring = "ESC"
         Case "numpad0"
            Keylist()\Keystring = "NUM0"
         Case "numpad1"
            Keylist()\Keystring = "NUM1"
         Case "numpad2"
            Keylist()\Keystring = "NUM2"
         Case "numpad3"
            Keylist()\Keystring = "NUM3"
         Case "numpad4"
            Keylist()\Keystring = "NUM4"
         Case "numpad5"
            Keylist()\Keystring = "NUM5"
         Case "numpad6"
            Keylist()\Keystring = "NUM6"
         Case "numpad7"
            Keylist()\Keystring = "NUM7"
         Case "numpad8"
            Keylist()\Keystring = "NUM8"
         Case "numpad9"
            Keylist()\Keystring = "NUM9"
         Case "lbutton"
            Keylist()\Keystring = "LMouse"
         Case "rbutton"
            Keylist()\Keystring = "RMouse"
         Case "mbutton"
            Keylist()\Keystring = "MMouse"
         Case "oem_period"
            Keylist()\Keystring = "Period" ; PUNKT! ;) 
         Case "oem_comma"
            Keylist()\Keystring = "Comma" ; komma..
         
      EndSelect 
   Next 
   
   ForEach Keylist()  
      keylistcounter + 1 
      getallkeys_output.s + Keylist()\Keystring 
      If keylistcounter < ListSize( Keylist())
         getallkeys_output + "+"
      EndIf 
      
      If Keylist()\EndTime < ElapsedMilliseconds()
         DeleteElement( Keylist())
      EndIf 
   Next 
   If Not getallkeys_output = outputString$;GetGadgetText( #text_tastatureingabe)
      ;SetGadgetText( #text_tastatureingabe , getallkeys_output )
      outputString$ = getallkeys_output
   EndIf 
EndMacro 

Procedure getallkeys() ; prüft alle tasten ob sie gedrückt wurden..
   Protected  getallkeys_output.s , keylistcounter.i , KeyLoaded.i
   Static  NewList Keylist.keylist()
   
   getallkeys_IsKeyPressed = 0
   
 getkey(menu)
   getkey(Control)
   getkey(shift)
   getkey(print)
   getkey(pause)
   getkey( space) 
   getkey(tab)
   getkey( a ) 
   getkey( b ) 
   getkey( c ) 
   getkey( d ) 
   getkey( e ) 
   getkey( f ) 
   getkey( g ) 
   getkey( h ) 
   getkey( i ) 
   getkey( j ) 
   getkey( k ) 
   getkey( l ) 
   getkey( m ) 
   getkey( n ) 
   getkey( o ) 
   getkey( p ) 
   getkey( q ) 
   getkey( r ) 
   getkey( s ) 
   getkey( t ) 
   getkey( u ) 
   getkey( v ) 
   getkey( w ) 
   getkey( x ) 
   getkey( y ) 
   getkey( z ) 
   getkey( 1 ) 
   getkey( 2 ) 
   getkey( 3 ) 
   getkey( 4 )
   getkey( 5 )
   getkey( 6 ) 
   getkey( 7 )
   getkey( 8 )
   getkey( 9 ) 
   getkey( 0 ) 
   getkey( add )
   getkey( subtract)
   getkey( down )
   getkey( up )
   getkey( left)
   getkey( right)
   getkey( End )
   getkey( divide)
   getkey( multiply)
   getkey( escape)
   getkey( f1)
   getkey( f2)
   getkey( f3)
   getkey( f4)
   getkey( f5)
   getkey( f6)
   getkey( f7)
   getkey( f8)
   getkey( f9)
   getkey( f10)
   getkey( f11)
   getkey( f12)
   getkey( f13)
   getkey( f14)
   getkey( f15)
   getkey( f16)
   getkey( f17)
   getkey( f18)
   getkey( f19)
   getkey( f20) ; there are 24 function keys... for special function keyboards.
   getkey( f21)
   getkey( f22)
   getkey( f23)
   getkey( f24)
   getkey( home)
   getkey( help)
   getkey( lwin)
   getkey( rwin)
   getkey( mbutton)
   getkey( lbutton)
   getkey( rbutton)
   getkey( numlock)
   getkey( numpad0)
   getkey( numpad1)
   getkey( numpad2)
   getkey( numpad3)
   getkey( numpad4)
   getkey( numpad5)
   getkey( numpad6)
   getkey( numpad7)
   getkey( numpad8)
   getkey( numpad9)
   getkey( print)
   getkey( Return)
   getkey( volume_down)
   getkey( volume_up)
   getkey( zoom)
   getkey( delete)
   getkey( back)
   getkey( attn)
   getkey(snapshot)
   getkey( separator)
   getkey(scroll)
   getkey(PRIOR)
   getkey(play)
   getkey(Next)
   getkey(oem_period)
   getkey(oem_comma)
   getkey(oem_plus)
   getkey(oem_minus)
   ;getkey(oem_attn) -- Geht bei mir nicht @Blackskyliner Windows7
   getkey(capital)
   getkey(crsel)
   getkey(convert)
   getkey(ereof)
   getkey(insert)
   getkey(media_next_track)
   getkey(media_play_pause)
   getkey(media_prev_track)
   getkey(media_stop)
   getkey(packet)
   getkey(PRIOR)
   getkey(play)
   DisplayAllKeys() ; displays all keys..
EndProcedure 


InitSprite()

Procedure Open_Window_tastaturanzeige()
	ExamineDesktops() ;So we know the usable width for showing our Text ;)
  If OpenWindow(#Window_tastaturanzeige, 0, DesktopHeight(0)-50, DesktopWidth(0), 56, "Gemusoft Tastatur", #PB_Window_BorderLess )
    	OpenWindowedScreen(WindowID(#Window_tastaturanzeige), 0, 0, WindowWidth(#Window_tastaturanzeige), WindowHeight(#Window_tastaturanzeige), 0,0,0)
      TextGadget(#Text_tastatureingabe, 0, 0, 550, 60, "")
      SetGadgetFont(#Text_tastatureingabe, FontID3)
      StickyWindow( #Window_tastaturanzeige , 1 )
      Repeat 
         evt  = WaitWindowEvent(10)
         getallkeys()
         
         ClearScreen(#Black)
         StartDrawing(ScreenOutput())
         	DrawingFont(FontID3)
		DrawingMode(#PB_2DDrawing_Transparent)
         	width.l = TextWidth(outputString$)
         	height.l = TextHeight(outputString$)
         	DrawText(0,0,outputString$, #White)
         StopDrawing()
         
         ResizeWindow(#Window_tastaturanzeige,#PB_Ignore,#PB_Ignore,width,height)
         
         FlipBuffers()
         
         Select evt
            Case #PB_Event_Gadget
               
            Case #PB_Event_Menu
            
            Case #PB_Event_CloseWindow 
              End 
         EndSelect 
         
      ForEver 
    ;EndIf
  EndIf
EndProcedure

Open_Window_tastaturanzeige()
Keine meiner Antworten ist endgültig, es kann passieren, dass ich den so eben geposteten Beitrag noch mehrmals ändere, um Doppelposts zu umgehen.
_________________
Purebasic Windows 7 x64 & Linux (Ubuntu 10.04LTS) 4.50[x64|x86] Nutzer
_________________
Projekte: YAED - Yet another Event Dispatcher
Christian H
Beiträge: 134
Registriert: 18.10.2005 10:22
Wohnort: Welschbillig

Re: Keyboard Input Display Software

Beitrag von Christian H »

Ich habe es noch um ein SysTray Icon mit Popup Menu erweitert.
Achtet auf das LoadImage()

Code: Alles auswählen

Procedure Open_Window_tastaturanzeige()
   ExamineDesktops() ;So we know the usable width for showing our Text ;)
  If OpenWindow(#Window_tastaturanzeige, 0, DesktopHeight(0)-50, DesktopWidth(0), 56, "Gemusoft Tastatur", #PB_Window_BorderLess )
       OpenWindowedScreen(WindowID(#Window_tastaturanzeige), 0, 0, WindowWidth(#Window_tastaturanzeige), WindowHeight(#Window_tastaturanzeige), 0,0,0)
      TextGadget(#Text_tastatureingabe, 0, 0, 550, 60, "")
      SetGadgetFont(#Text_tastatureingabe, FontID3)
      StickyWindow( #Window_tastaturanzeige , 1 )
      ;
      If CreatePopupMenu(0) 
         MenuItem(1, "config Window") 
         MenuBar() 
         MenuItem(2, "Quit") 
      EndIf 
      LoadImage(0, "XXXXXXXXXXXXXXXXX.ico"); <<--- hier irgend ein passendes Icon nehmen
      AddSysTrayIcon (1, WindowID(0), ImageID(0))  
      SysTrayIconToolTip (1, "Rechte Maustaste für PopUp") 
      
      
      
      Repeat
         evt  = WaitWindowEvent(10)
         getallkeys()
         
         ClearScreen(#Black)
         StartDrawing(ScreenOutput())
            DrawingFont(FontID3)
            DrawingMode(#PB_2DDrawing_Transparent)
            width.l = TextWidth(outputString$)
            height.l = TextHeight(outputString$)
            DrawText(0,0,outputString$, #White)
         StopDrawing()
         
         ResizeWindow(#Window_tastaturanzeige,#PB_Ignore,#PB_Ignore,width,height)
         
         FlipBuffers()
         
         Select evt
            Case #PB_Event_SysTray ; <<-- PopUp bei click mit rechter Maustaste auf Systray Icon 
              If EventType() = #PB_EventType_RightClick 
                 DisplayPopupMenu(0, WindowID(0)) 
              EndIf 
            Case #PB_Event_Gadget
               
            Case #PB_Event_Menu
              Select EventMenu() 
                Case 1 ; config Window 
                   MessageRequester("config Window", "config Window wer macht es? :-)", 0) 
                Case 2 ; Quit 
                  End  
              EndSelect 
            Case #PB_Event_CloseWindow
              End
         EndSelect
         
      ForEver
    ;EndIf
  EndIf
EndProcedure
Gruß Christian
Benutzeravatar
Shadow-Gamer
Beiträge: 152
Registriert: 06.09.2009 13:31
Computerausstattung: NB: Intel P8700, Mobility ATI HD4650, 4GB, Win 7

Re: Keyboard Input Display Software

Beitrag von Shadow-Gamer »

jo gute idee, kann ich sicher mal gebrauchen^^
Ich versuche ja nicht faul zu sein. :)
Antworten