Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bildschirmtastatur Fehler, aber wo??? (https://www.delphipraxis.net/135306-bildschirmtastatur-fehler-aber-wo.html)

XXcD 8. Jun 2009 20:59


Bildschirmtastatur Fehler, aber wo???
 
Hallo,
ich bastel gerade eine kleine Bildschirmtastatur.
Da es ja auch ziemlich viele Tasten sind, wollte ich jetzt einfach von dem Button den ich klicke die Caption nehmen und senden.

Also ein Button wo "E" draufsteht soll dann auch "E" gesendet werden.


Ich versuche es gerade so, aber da funktioniert garnicht.
Delphi-Quellcode:
var
BtnCaption: TCaption;
...

BtnCaption:=TButton(Sender).Caption;
windows.SetForegroundWindow(hForeground);
keybd_event( Cardinal(BtnCaption), MapVirtualKey( Cardinal(BtnCaption), 0 ), 0, 0 );
keybd_event( Cardinal(BtnCaption), MapVirtualKey( Cardinal(BtnCaption), 0 ), KEYEVENTF_KEYUP, 0 );

...
...
procedure TForm3.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
hForeground := windows.GetForegroundWindow;
end;
Wo liegt denn da der Fehler?

mkinzler 8. Jun 2009 21:06

Re: Bildschirmtastatur Fehler, aber wo???
 
Versuch mal statt
Delphi-Quellcode:
Cardinal(BtnCaption)
Delphi-Quellcode:
Ord( BtnCaption[1])

Apollonius 8. Jun 2009 21:07

Re: Bildschirmtastatur Fehler, aber wo???
 
Du darfst nicht den Caption-String nach Cardinal casten, sondern musst den ersten Buchstaben Caption[1] verwenden.

XXcD 8. Jun 2009 21:22

Re: Bildschirmtastatur Fehler, aber wo???
 
Ok so weit so gut das funktioniert, aber wenn ich eine Taste drücke und dann noch ne andere wird der erste buchstabe ersetzt.
Also wenn ich in eine Addressleiste "e" klicke kommt "e" und wenn ich "w" drücke kommt "w".
Eigentlich sollte ja dann da "ew" stehen.

XXcD 9. Jun 2009 13:29

Re: Bildschirmtastatur Fehler, aber wo???
 
Ich habe das Programm jetzt nochmal so getestet.
Mein Ergebnis:

-in Notepad funktioniert alles einwandfrei

-z.B. Im IE kann ich in der Adressleiste nichts eingeben.
Jeder neue Buchstabe den ich schreibe, überschreibt den alten.


So sieht mein Code aus:
Delphi-Quellcode:
procedure TForm3.standartkeyclick(Sender: TObject);
var
BtnCaption: TCaption;
begin
//letztes Fenster in den Vordergrund holen
windows.SetForegroundWindow(hForeground);
//Caption von Button auslesen
BtnCaption:=TButton(Sender).Caption;
//Caption Buchstabe als Tastendruck senden
keybd_event(ord(BtnCaption[1]), 0, 0, 0);
keybd_event(ord(BtnCaption[1]), 0, KEYEVENTF_KEYUP, 0);
end;

himitsu 9. Jun 2009 13:34

Re: Bildschirmtastatur Fehler, aber wo???
 
Problem: wenn das IE-Adress-Edit neu selektiert (SetForegroundWindow) wird, dann wird der gesamte Inhalt markiert und mit dem nächsten Zeichen überschrieben.

theoretische Lösung: dein Programmfesnter darf nicht den Fokus erhalten ... ähnlich wie bei Hint-Fenstern.

nat 9. Jun 2009 13:37

Re: Bildschirmtastatur Fehler, aber wo???
 
oder er simuliert vor der taste noch einen tastendruck von "Ende" um ans ende des strings zu springen.
sollte eigentlich in dem fall seinen dienst auch tun.

alzaimar 9. Jun 2009 13:40

Re: Bildschirmtastatur Fehler, aber wo???
 
Zitat:

Zitat von nat
oder er simuliert vor der taste noch einen tastendruck von "Ende" um ans ende des strings zu springen.
sollte eigentlich in dem fall seinen dienst auch tun.

Und wenn ich in der Adressleiste editieren will?

nat 9. Jun 2009 13:46

Re: Bildschirmtastatur Fehler, aber wo???
 
das feature ist dann nicht implementiert! ;)
ok, war auch eher ne notlösung. ist vielleicht wirklich nicht
so praktisch. mir ging das nur grad so durch kopf und da dachte
ich, ich lasse euch mal daran teilhaben! ;)

SirThornberry 9. Jun 2009 13:46

Re: Bildschirmtastatur Fehler, aber wo???
 
warum verwendest du überhaupt setforegroundwindow? Bei Bildschirmtastaturen stellt man eigentilch den Windowstyle so dass das Bildschirmtastaturfenster den Focus nicht bekommt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:34 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz