Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Den Focus in Edit-Feld immer setzen? Modales Dialogfeld? (https://www.delphipraxis.net/94531-den-focus-edit-feld-immer-setzen-modales-dialogfeld.html)

Manado 22. Jun 2007 19:04


Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!
Ich habe ein echtes Problem und komme definitiv nicht mehr weiter. (Delphi 2005, Win32, Prog läuft auf Windows 98)
Es wäre cool , wenn jemand einen Tipp/eine Anregung hätte.

Es geht um ein Barcodescan-System in einer Mensa. Der handelsübliche Barcodecanner funktioniert wie eine Tastaur: er gibt das, was er scannt, wie eine Tastatur normal ein (halt etwas schneller..).
Das ganze ist so programmiert, das jeder, der Essen will, seinen Essens- Ausweis vor den Scanner hält, der eigens dafür zur Verfügung gestellte PC kontrolliert dann in der Datenbank, ob derjenige für den Tag bezahlt hat, ob er vegetarisch isst,...usw. Das klappt alles auch schon ganz gut.
NUR:
Mein Programm hat einfach ein Edit-Feld, in dem der Focus sitzt. Scannt der Barcodescanner jetzt einen Ausweis, schreibt er in das Edit-Feld, die Edit.Change-Methode springt an, und am Monitor wird ausgegeben: "Bezahlt" ,etc...
Der Focus ist immer auf das Edit-Feld gesetzt. NORMALERWEISE.

DAS PROBLEM: Es passiert manchmal (unmittelbar bei einem Scannvorgang, wie ich beobachten konnte), das der Curser nicht mehr im Edit-Feld ist, der Focus also verschwindet. Ich habe schon aus Verzweiflung einen Timer eingebaut, der alle 5 sekunden den Focus neu setzt, :wall: DOCH TROTZDEM SPRINGT ER MANCHMAL RAUS! :wall: Ich kann nur spekulieren, das sich vielleicht ein anderes Programm öfnnet, oder so, und deswegen das ganze Scanprogramm von mir den Fokus verliert.

Ich habe gehört ich solle doch ein modales Dialogfeld verwenden. Weiss jemand was das ist, wo ich das nachschauen kann, ob das überhaupt sinnvoll ist? :cyclops:

Ich brauche einfach nur ein Feld, das Tastatureingaben entgegennimmt, und das immeeeeeer den Focus behält und immer im Vordergrund bleibt. (Der Pc ist wird auch nur für das System verwendet.)

Ich hoffe ich konnte das Problem einigermassen verständlich schildern und freue mich über jede Antwort!!

Vielen Dank schon mal im Voraus,
Moritz

Ps: Im Anhang ein Bild des jetztigen Programms..

Phoenix 22. Jun 2007 19:11

Re: Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?
 
Hrm...

Vorschlag: Schmeiss das Edit weg ;-)

Du reagierst einfach immer auf das OnKeyPressed Event des Formulares und schreibst den gerade getippten Buchstaben hinten an eine Variable. Nach ende der Eingabe (ich tippe darauf der Barcodescanner schickt ein Return nach dem Scannen) verwurstet Du die Variable anstelle des Edit.Text und leerst sie. Jede weitere Eingaba landet dann wieder in der Variable und so weiter. Du brauchst Dich also gar nicht drum zu kümmern, solange das Formular - also die Anwendung selber - den Focus hat. Und das kannst Du mit einem fsStayOnTop und wsMaximized recht easy erreichen.

Manado 22. Jun 2007 19:19

Re: Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?
 
Ah ok, das klingt gut. Mit fsStayOnTop bleibt das Programm selber also immer im Vordergrund? Das ist gut.
Im Prinziep reicht das ja schon, aber ich teste auch mal das mit dem "Buchstaben in Form eingeben".
Ja, der Scanner sendet ein Return.
Danke :dancer:
Moritz

Manado 22. Jun 2007 19:27

Re: Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?
 
:!: :arrow: Ok, habs ausprobiert, den Focus kann das Programm trotzdem verlieren!!! Weil mit fsStayontop nur die Form optisch immer vorne gehalten wird, und wenn ein anderes (auch nicht sichtbares) Programm geöffnet wird verliert das Programm den Focus und eine Eingabe wird nicht angenommen!!! :|

marabu 22. Jun 2007 20:13

Re: Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?
 
Hallo,

ein ähnliches Problem wurde hier scheinbar gelöst: Immer im Vordergrund

Grüße vom marabu

dajuhsa 22. Jun 2007 22:21

Re: Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?
 
ich bin mir nich so sicher, aber:

Delphi-Quellcode:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Edit1.SetFocus;
end;
oder liege ich da falsch :?:

alzaimar 23. Jun 2007 06:14

Re: Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?
 
Ich habe mal für soetwas (Scanner-Eingabe unabhängig von der aktiven Anwendung) einen KeyLogger schreiben müssen. Die meisten Scanner schicken nicht nur den Barcode als Tastendrücke, sondern auch einige Key-Up / Key Down Ereignisse, die auf einer Tastatur nicht zu simulieren sind (z.B. 2x KeyUp hintereinander. Geht ja mit ner Tastatur nicht, weil die Taste auch losgelassen werden muss).

Der KeyLogger (DLL) macht normalerweise nix. Wenn die o.g. Sequenz kommt, schickt er alle Keyboard-Events zu der angemeldeten Applikation, bis die 'End-Scan' Sequenz erkannt wird, oder ein CR (#13).

Bei Scannern kann man auf jeden Fall ein Terminator-Symbol angeben (z.B. #13 oder #9), sodaß ein RETURN oder TAB simuliert werden kann.

Wenn deine Anwendung sowieso nur einen Scan erwartet, dann kannst Du auf die Analyse verzichten, und einfach einen profanen KeyLogger installieren.

Nachteil: Die DLL wird von allen Virenscannern als Schadsoftware erkannt.

@dajuhsa: Wenn die Anwendung den Focus verliert (weil eben ein anderes Programm gestartet wurde), dann klappt das eben nicht.

Soweit ich mich erinnere, habe ich das aber mit einer anderen Anwendung hinbekommen (1x pro Sekunde 'SetWindowPos' ausgeführt). Die genauen Parameter sind im Link von marabu zu finden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:55 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