AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warten bis Event OnKeyDown abgearbeitet ist

Ein Thema von concept2015 · begonnen am 5. Jan 2017 · letzter Beitrag vom 8. Jan 2017
Thema geschlossen
Seite 2 von 2     12   
EWeiss
(Gast)

n/a Beiträge
 
#11

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 6. Jan 2017, 08:17
Es wäre schön wenn du die Code Formatierung verwenden würdest.
Dein Beitrag ist leider nicht lesbar.

gruss

Geändert von TBx (24. Jul 2019 um 07:25 Uhr) Grund: Anhang auf Wunsch von EWeiss gelöscht
 
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#12

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 6. Jan 2017, 08:59
Ich kenne mich in Foren leider noch nicht so gut aus, was das Schreiben betrifft
Codeformatierung ? über Code einfügen ? sieht alles gleich aus
Ahh ... hat geklappt !

Umsetzung für Sonderzeichen ????
Hier ?

Code:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
    // Tasteneingabe nur Numerisch
      if not (key in [#8,#13,#48..#57]) then key := #0;
end;

Geändert von concept2015 ( 6. Jan 2017 um 09:00 Uhr) Grund: Fehler erkannt
 
EWeiss
(Gast)

n/a Beiträge
 
#13

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 6. Jan 2017, 09:04
Zitat:
Ich kenne mich in Foren leider noch nicht so gut aus, was das Schreiben betrifft
Dann mache ich das mal für dich.
Und schon ist es lesbar

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Timer1: TTimer;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure PostKeyExHWND(hWindow: HWnd; key: Word; const shift: TShiftState; specialkey: Boolean);
type
  TBuffers = array [0 .. 1] of TKeyboardState;
var
  pKeyBuffers: ^TBuffers;
  lParam: LongInt;
begin

  (* check if the target window exists *)
  if IsWindow(hWindow) then
  begin
    (* set local variables to default values *)
    pKeyBuffers := nil;
    lParam := MakeLong(0, MapVirtualKey(key, 0));

    (* modify lparam if special key requested *)
    if specialkey then
      lParam := lParam or $1000000;

    (* allocate space for the key state buffers *)
    New(pKeyBuffers);
    try
      (* Fill buffer 1 with current state so we can later restore it.
        Null out buffer 0 to get a "no key pressed" state. *)

      GetKeyboardState(pKeyBuffers^[1]);
      FillChar(pKeyBuffers^[0], SizeOf(TKeyboardState), 0);

      (* set the requested modifier keys to "down" state in the buffer *)
      if ssShift in shift then
        pKeyBuffers^[0][VK_SHIFT] := $80;
      if ssAlt in shift then
      begin
        (* Alt needs special treatment since a bit in lparam needs also be set *)
        pKeyBuffers^[0][VK_MENU] := $80;
        lParam := lParam or $20000000;
      end;

      if ssCtrl in shift then
        pKeyBuffers^[0][VK_CONTROL] := $80;
      if ssLeft in shift then
        pKeyBuffers^[0][VK_LBUTTON] := $80;
      if ssRight in shift then
        pKeyBuffers^[0][VK_RBUTTON] := $80;
      if ssMiddle in shift then
        pKeyBuffers^[0][VK_MBUTTON] := $80;

      (* make out new key state array the active key state map *)
      SetKeyboardState(pKeyBuffers^[0]);
      (* post the key messages *)
      if ssAlt in shift then
      begin
        PostMessage(hWindow, WM_SYSKEYDOWN, key, lParam);
        PostMessage(hWindow, WM_SYSKEYUP, key, lParam or $C0000000);
      end
      else
      begin
        PostMessage(hWindow, WM_KEYDOWN, key, lParam);
        PostMessage(hWindow, WM_KEYUP, key, lParam or $C0000000);
      end;
      (* process the messages *)
      Application.ProcessMessages;

      (* restore the old key state map *)
      SetKeyboardState(pKeyBuffers^[1]);
    finally
      (* free the memory for the key state buffers *)
      if pKeyBuffers <> nil then
        Dispose(pKeyBuffers);
    end; { If }
  end;
end; { PostKeyEx }

procedure TForm1.Button1Click(Sender: TObject);
const
  Str1: string = '2340';
  Str2: string = '118,65';
var
  Inp: TInput;
  I: Integer;
begin
  Edit1.SetFocus;
  for I := 1 to Length(Str1) do
  begin
    // press
    Inp.Itype := INPUT_KEYBOARD;
    Inp.ki.wVk := Ord(UpCase(Str1[I]));
    Inp.ki.dwFlags := 0;
    SendInput(1, Inp, SizeOf(Inp));

    // release
    Inp.Itype := INPUT_KEYBOARD;
    Inp.ki.wVk := Ord(UpCase(Str1[I]));
    Inp.ki.dwFlags := KEYEVENTF_KEYUP;
    SendInput(1, Inp, SizeOf(Inp));

    Application.ProcessMessages;
    Sleep(120);
  end;

  Edit2.SetFocus;
  for I := 1 to Length(Str2) do
  begin
    // press
    Inp.Itype := INPUT_KEYBOARD;
    Inp.ki.wVk := Ord(UpCase(Str2[I]));
    Inp.ki.dwFlags := 0;
    SendInput(1, Inp, SizeOf(Inp));

    // release
    Inp.Itype := INPUT_KEYBOARD;
    Inp.ki.wVk := Ord(UpCase(Str2[I]));
    Inp.ki.dwFlags := KEYEVENTF_KEYUP;
    SendInput(1, Inp, SizeOf(Inp));

    Application.ProcessMessages;
    Sleep(120);
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Bei Taste + befehl ausführen
  if GetAsyncKeyState(VK_ADD) < 0 then
    Button1Click(Button1);
end;

end.
 
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.355 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 6. Jan 2017, 09:11
Umsetzung für Sonderzeichen ????
Hier ?
Code:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  // Tasteneingabe nur Numerisch
  if not (key in [#8,#13,#48..#57]) then key := #0;
end;
Nein, hier:

Inp.ki.wVk := Ord(UpCase(Str2[i])); Wenn du an dieser Stelle auf ein Komma triffst, wird der Ordinal-Wert (44) vom Komma übergeben. Du musst aber VK_SEPARATOR (108) übergeben.
Peter
 
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#15

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 6. Jan 2017, 16:24
Entschuldige, aber das ist im moment zu hoch für mich.
Ich hänge wohl schon zu lange in dieser Sache.

44 ist doch das Komma und genau das soll doch dort eingetragen werden.

Ich bin LEER im Kopf ... wenn du mir den Lösungsweg zeigst komme ich evtl. dahinter

if (Inp.ki.wVk=Ord(UpCase(Str1[i])))=(CHR(44)) then Inp.ki.wVk:=(CHR(108)) else Inp.ki.wVk=Ord(UpCase(Str1[i])); bringt nur Fehler .... HIIILFE ich kann nicht mehr.
 
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#16

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 7. Jan 2017, 08:33
Danke

Hat sich erledigt, habe es anders gelöst.

Wie so oft im Leben, der Wald und die Bäume
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#17

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 8. Jan 2017, 04:24
Und sagst du uns auch, wie du es gelöst hast?
Michael
Ein Teil meines Codes würde euch verunsichern.
 
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#18

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 8. Jan 2017, 09:27
Ja klar, ursprünglich war geplant, die Daten von einem eigenständigen Programm in das Hauptprogramm als "Tastatureingabe"
zu übergeben.

Da sich das aber als Problem herausstellte, habe ich es jetzt im Hauptprogramm gelassen und fülle die Felder direkt.

Bei der komplexität des Hauptprogramms - jede Eingabe wird erst
geprüft dann zugeordnet und berechnet - war mir das aber zu aufwändig.

Wie gesagt, es lief alles bis auf das Komma.
Da ich aber leider nicht sehr geduldig bin, bin ich jetzt dabei, es im Hauptprogramm zu implementieren.

Ganz nebenbei habe ich auch keine Lust mehr.
Ich schreibe meine Programme eigentlich mit Visual Dbase -
habe jetzt aber Geschmack an Delphi bekommen und musste mich zwischenzeitlich mit Java (Eclipse) wegen der optischen Bearbeitung beschäftigen - mit 62 Jahren geht das alles nicht mehr ganz so mit "links".
Jetzt kommt auch noch C++ (Arduino) für den automatischen Belegeinzug.
Das ganze reicht mir ... und wenn dann auch noch so blöde Fehler wie der mit dem Komma kommen stosse ich an meine Grenzen der Gedult und stehe kurz davor es hinzuschmeissen .... NEEE da steckt zuviel Arbeit drin.

Danke für das Interesse, sollte ich weitere Probleme bekommen, melde ich mich.
 
concept2015

Registriert seit: 22. Dez 2015
Ort: Nähe Dortmund
44 Beiträge
 
Delphi 7 Professional
 
#19

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 8. Jan 2017, 10:44
Ich hätte da noch etwas
Im System sind 2 Rechner.
Rechner 1 (bei mir zum testen und programmieren Win10)
in der Firma Win 7

Als Leseeinheit benutze ich einen MiniPc (Win10):Rechner2

Zwischen den beiden Rechnern müssen jetzt Daten ausgetauscht werden.

Rechner1 prüft, ob auf Rechner2 eine Datei vorhanden ist, wenn ja, holt er sich diese Datei zur Weiterverarbeitung.

Das mache ich im Moment über ein Heimnetz (Wlan) Lankabel geht nicht, da Rechner 1 in der Firma vernetzt ist und ich da nicht ran möchte.

Jetzt habe ich mir gedacht, dass beide Rechner USB Anschlüsse haben, über die doch eine Kommunikation möglich sein müsste.
Über einen Arduino beide Rechner mit (USB-(RS232)-USB) verbinden.

Im Rechner1 ist ein Programm (Delphi). dass ein Signal über (USB-(Arduino)-USB) an Rechner2 schickt.
Das Programm in Rechner2 prüft ob die Datei da ist und sendet sie an das Programm in Rechner1 und speichert es in einem Verzeichnis (C:\Austausch)
Damit würde ich alles mit Lan und W-Lan umgehen.

Hat dazu jemand eine Idee ?
In der Theorie ist das kein Problem ... aber die Praxis
 
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#20

AW: Warten bis Event OnKeyDown abgearbeitet ist

  Alt 8. Jan 2017, 10:46
Ich hätte da noch etwas
Dann mach bitte einen neuen Thread mit entsprechenden aussagekräftigen Titel auf. Ich schließe hier mal.
Michael
Ein Teil meines Codes würde euch verunsichern.
 
Thema geschlossen
Seite 2 von 2     12   

 

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 19:14 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