Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Bildschirmtastatur (https://www.delphipraxis.net/55132-bildschirmtastatur.html)

Nightfly 17. Okt 2005 09:20


Bildschirmtastatur
 
Hi

Vlt. kennen einige von euch diese Bildschirmtastaturen, die man v.a. bei Tablet PC's findet. Das sind so kleine Programme, die eine Tastatur nachbilden, welche sich via Maus (oder eben via Touchscreen) bedienen lässt.

Ich brauche sowas nur für Zahlen, will also auch sowas schreiben. Aber ich habe keinen Schimmer mit welcher Technik sowas geht, und demzufolge sucht es sich schwer. Kann mir da einer weiterhelfen?

Ich will also ein Programm, das in erster Linie aus 10 Buttons besteht, und wenn ich einen klicke, in einem anderen Programm die entsprechende Zahl in einem Edit Feld erscheint.

Erste Sorge die ich mir mache: Mein Keyboard ist aktiv, 5 weitere Programme inaktiv, woher weiß ich an welchses Prog die Eingaben gesendet werden sollen...

Bzw. wie gehe ich überhaupt an sowas ran?

Robert Marquardt 17. Okt 2005 09:45

Re: Bildschirmtastatur
 
Der wesentlichste Parameter hierbei duerfte WS_EX_NOACTIVATE fuer die CreateParams sein.
Delphi-Quellcode:
type
  TMyFrom = class(TForm)
  protected
   procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure TMyForm.CreateParams(var Params: TCreateParams);
begin
  Params.ExStyle := Params.ExStyle or WS_EX_NOACTIVATE;
end;
Natuerlich darf man keine TWinControls verwenden, also nur TGraphicControls.

Jetzt sollte das Fenster nicht aktiv werden und der Focus deshalb bleiben wo er war.

hanselmansel 17. Okt 2005 10:02

Re: Bildschirmtastatur
 
HiHo,

wenn du möchtest, dass dein Fenster immer sichtbar ist, die Anzeige der anderen Programme aber nicht behindert, kannst du es auch als App-Bar erstellen. Chakotay1308 hat dazu mal ein Tutorial geschrieben, nach dem sogar ich ein Application-Bar hinbekommen habe. (Besten Dank an dieser Stelle an Chakotay1308 :thumb: )
Damit kannst du deine Bildschirm-Tastatur an den oberen (rechten, linken) Bildschirmrand docken, und die anderen Programme überdecken sie nicht.

Pseudo-Halbwissen
Zur Umsetzung der Tastatur: Du wirst wohl beim OnClick auf die Zahlen-Buttons ein Tastatur-Event erzeugen und zusehen, dass das Client-Fenster den Fokus behält. Zu Tastatur-Events müsste die Foren-Suche mengenweise ausspucken... (Zumindest habe ich immer wieder Themen gesehen, die sowas als Titel hatten :wink: )


MfG,

hanselmansel

Nightfly 17. Okt 2005 10:13

Re: Bildschirmtastatur
 
Hmm...die Idee gefällt mir sehrgut, ich glaub damit kann ich was anfangen...

Nightfly 21. Okt 2005 15:08

Re: Bildschirmtastatur
 
Also das mit der AppBar hat wunderbar geklappt. Aber WS_EX_NOACTIVATE kennt er nich (unbekannter Bezeichner). Nehme ich z.B. WS_EX_APPWINDOW bekomm ich nen Laufzeitfehler :( Wie kann ich verhindern das mein Fenster den Kokus bekommt?

Und wie kann ich Tastendrücke simulieren? KeyPress(); geht leider nich so richtig...finde irgendwie auch nyx passendes... :(

hanselmansel 21. Okt 2005 15:42

Re: Bildschirmtastatur
 
Das mit dem Fokus weiß ich nicht, aber wegen den Tastatur-Events habe ich mal die DP-Suche bemüht. [dp="taste AND simulieren"]Klick mich![/dp] Dort finden sich viele Threads, die vielversprechende Funktionen aufführen. Einfach mal ausprobieren, ob sie in deinem Fall funktionieren.

Ich habe keine Ahnung, ob das so funktioniert, aber vieleicht geht es ja.
Lösungsansatz für den Fokus
Sollte Windows eine Message verschicken, die besagt, dass irgendein Fenster gerade den Fokus bekommen hat, so könntest du in deinem Programm auf diese Message hören, und dir das Handle des Fensters merken. Wenn du dann eine Bildschirmtaste drückst, bekommt deine AppBar wohl oder übel den Fokus. Vieleicht kannst du aber etwas hinfixxen (wieder mal mit Hilfe vom API), dass dein AppBar dem Fenster mit gespeichertem Handle wieder den Fokus gibt, und danach ein Tastaturevent auslöst.

Luckie, Hagen, bitte schlagt mich nicht für diesen Verschnitt auf das API. :duck:

MfG,

hanselmansel


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 Uhr.

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