Re: API-Funktion SetWindowPos
Hallo,
hier nochmal der formatierte Code
Delphi-Quellcode:
Danke
procedure TForm1.Timer1Timer(Sender: TObject);
begin //Dll-Funktion um Maschinenstatus abzufragen MepRemote_ReadMachineState(eStatus); //Wenn der Status 9 ist muss das Formular eingeblendet werden um den Barcode abzufragen if (eStatus = 9) and not Fl_SetSerial then begin //Barcode-Formular in den Vordergrund bringen PostMessage(Self.Handle, WM_SYSCOMMAND, SC_RESTORE, 0); SetForegroundWindow(Self.Handle); Edit1.SetFocus end; //Wenn der Status ungleich 9 ist muss das Formular wieder in den Hintergrund gehen if (eStatus <> 9) then begin Fl_SetSerial := false; edit1.Text := ''; //Barcode-Formular in den Hintergrund bringen SetWindowPos(handle,HWND_BOTTOM,Left,Top,Width,Height,SWP_SHOWWINDOW); end; end; |
Re: API-Funktion SetWindowPos
Und Dein 'Barcode-Formular' ist Form1, ja?
Ansonsten würde 'Self' nicht passen. Desweiteren würde ich bedingt auf den Status reagieren, also das Ganze mit 'Else' abwickeln:
Delphi-Quellcode:
Edit: Bevor jemand meckert:
if (eStatus = 9) and not Fl_SetSerial then
begin [...] end else if (eStatus <> 9) then begin [...] end; das hat zwar nichts mit Deinem aktuellen Problem zu tun, verhindert aber, dass gar nicht erst auf 'Status <> 9' geprüft wird, sollte '(eStatus = 9) and not Fl_SetSerial' bereits zutreffen. In diesem Beispiel Kinkerlitzchen, aber da können ggf. auch dickere Dinger dahinter stecken, die man sich so sparen und die Performance optimal halten kann. |
Re: API-Funktion SetWindowPos
Hallo,
danke habe das else .. if eingebaut, gibt es die Möglichkeit ein Formular speziell mit einem Befehl zu aktivieren, ich vermute das die andere Anwendung mit der ich über dll kommuniziere sich einmal den Fokus zurückholt. Vielen Dank |
Re: API-Funktion SetWindowPos
Hallo,
ich habe noch eine andere Frage, gibt es die Möglichkeit eine Tastatureingabe abzufragen wenn mein Formular im Vordergrund ist aber nicht aktiv ist, wäre eine Lösung für mein Problem, denn ich benötige eigentlich nur den String vom Barcodescanner, ich dachte der Weg über das edit-Feld wäre gut geht aber bei mir irgendwie nicht. Vielleicht gibt es ja die Möglichkeit das man grundsätzlich die Tastatureingabe abfragen kann. Vielen Dank |
Re: API-Funktion SetWindowPos
Sicherlich kann man da etwas machen - aber ich weiss leider noch nicht, was Du erreichen möchtest, und wie das Ganze von statten gehen soll.
Wie viele Anwendungen hast Du, was machen die, was meinst Du mit Tastatureingabe etc.? |
Re: API-Funktion SetWindowPos
Hallo,
es laufen auf dem PC folgende Anwendungen, 1. Anwendung ist eine Automatisierungsanwendung die über eine PCI-Karte eine Presse steuert 2. es läuft ein RPC-Server der für die Kommunikation der 1. Anwendung über eine dll zuständig ist 3. eine Anwendung läuft zur Kommunikation einer SPS mit der Automatisierungssoftware der Presse 4. Meine Anwendung soll auf dem PC laufen um einen Barcode einlesen zu können, dieser eingelesene Barcode kann dann auch über eine dll-Funktion an den RPC-Server übergeben werden, anhand dieses Barecodes speichert Automatisierungssoftware der Presse Daten mit ab, Dateiname = Barcodenummer. Meine Aufgabe ist es den Bediener der Presse aufmerksam zu machen einen Barcode einzulesen, hierfür dachte ich das ich ein Formular einblende um den Barcode über ein edit-Feld einzulesen, da der Barcodescanner über die Tastatur eingeschleift ist. Jetzt habe ich aber das Problem das nach dem Einblenden meines Formulars die Automatisierungssoftware den Fokus zurückholt, mein Formular ist sichtbar aber ist noch nicht aktiv, dazu muss ich das Formular erst anklicken. Ich habe nur die Möglichkeit die 4. Anwendung zu bearbeiten, wenn es die Möglichkeit gibt die Tastatureingabe abzufragen ohne das mein Formular aktiv ist, wäre mein Problem gelöst. Mein Formular könnte ich sichtbar machen wenn auch nicht aktiv, der Bediener würde den Barcode scannen und ich würde anhand der Tastatureingabe meinen Barcode an die Automatisierungssoftware senden. Ich bin für jeden Tip dankbar Vielen Dank |
Re: API-Funktion SetWindowPos
Hallo,
muss der Barcode der eingscannt wird vorher überprüft werden ? Wenn nein, würde ich das ganze über ein Programm laufen lassen, was im Hintergrund läuft. Bei vielen Barcode-Scannern, kann man ja noch irgendwelche Steurungszeichen mitsenden. Das Hintergrundprogramm überprüft die Tastatureingaben, wenn nun das Steuerungszeichen eingegeben wird, werden die Daten an Deine Anwendung übergeben. |
Re: API-Funktion SetWindowPos
Zitat:
Sorry, aber das konnte ich mir nicht verkneifen :zwinker: Zitat:
Beschäftige Dich doch mal mit Hooks. Mit einem globalen Keyboardhook kannst Du die Tastatureingabe abfangen/-fragen, unabhängig davon, welche Anwendung gerade aktiv ist. Vorher könntest Du allerdings noch mit Form.OnKeyDown prüfen, ob Deine Form nicht vielleicht doch Input bekommt, der nur nicht da landet, wo er hin soll. |
Re: API-Funktion SetWindowPos
Hallo
zuerst vielen Dank für Deine Hilfe, der Barcode muss noch überprüft werden, es müssen die ersten 8 Zeichen einer Nummer (96619889) entsprechen, aber die Überprüfung kann auch im Hintergrund gemacht werden, falls der Barcode nicht die Nummer hat muss nur eine Meldung ausgegeben werden (Messagebox). Könnte man die Eingaben der Tastatur nicht gleichzeitig in meinem Formular laufen lassen, ohne das mein Formular aktiv ist, ich bekomme anhand des eStatus 9 über die dll-Funktion mitgeteilt das die Presse einen Barcode erwartet, jetzt könnte ich mein Formular einblenden (wenn es aktiv wäre könnte ich gleich weiter machen), ich würde abwarten was für Zeichen vom Scanner kommen und dann über meine Anwendung den Barcode über eine weitere dll-Funktion wieder an die Presse geben. Hast Du schon eine Idee? Vielen Dank |
Re: API-Funktion SetWindowPos
Hallo,
ich habe folgende Ereignisse probiert OnKeyDown und OnKeyPress, hier habe ich breakpoints gesetzt, wenn mein Formular aktiv ist komme ich in OnKeyPress bei einer Eingabe rein, wenn mein Formular nicht aktiv ist komme ich nicht zum breakpoint, OnKeyDown reagiert überhaupt nicht, (aktiv oder nicht aktiv) Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:29 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