AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?
Thema durchsuchen
Ansicht
Themen-Optionen

Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?

Ein Thema von Manado · begonnen am 22. Jun 2007 · letzter Beitrag vom 23. Jun 2007
Antwort Antwort
Manado

Registriert seit: 30. Jan 2007
Ort: Frankfurt/M.
34 Beiträge
 
#1

Den Focus in Edit-Feld immer setzen? Modales Dialogfeld?

  Alt 22. Jun 2007, 20:04
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, DOCH TROTZDEM SPRINGT ER MANCHMAL RAUS! 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?

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..
Miniaturansicht angehängter Grafiken
mensa-scanner_893.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.639 Beiträge
 
#2

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

  Alt 22. Jun 2007, 20:11
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.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Manado

Registriert seit: 30. Jan 2007
Ort: Frankfurt/M.
34 Beiträge
 
#3

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

  Alt 22. Jun 2007, 20:19
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
Moritz
  Mit Zitat antworten Zitat
Manado

Registriert seit: 30. Jan 2007
Ort: Frankfurt/M.
34 Beiträge
 
#4

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

  Alt 22. Jun 2007, 20:27
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!!!
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

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

  Alt 22. Jun 2007, 21:13
Hallo,

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

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von dajuhsa
dajuhsa

Registriert seit: 20. Apr 2007
397 Beiträge
 
Turbo Delphi für Win32
 
#6

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

  Alt 22. Jun 2007, 23:21
ich bin mir nich so sicher, aber:

Delphi-Quellcode:
procedure TForm1.Edit1Exit(Sender: TObject);
begin
  Edit1.SetFocus;
end;
oder liege ich da falsch
das Essen ist wie das Internet - Downstream ist immer angenehmer als Upstream
-
Warum missbraucht die ganze Programmierwelt Images als Paintboxen
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#7

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

  Alt 23. Jun 2007, 07:14
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:39 Uhr.
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