Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Letzte gedrückte Taste aus dem System Speicher löschen ??? (https://www.delphipraxis.net/128089-letzte-gedrueckte-taste-aus-dem-system-speicher-loeschen.html)

Piro 23. Jan 2009 21:33


Letzte gedrückte Taste aus dem System Speicher löschen ???
 
Guten Abend,

ich benutze das "KeyUp" Event wenn die Taste VK_RETURN" gedrückt wird. Nun öffnet sich ein weiteres Formaular, wo es nur möglich ist mit der Taste "Enter", das Formular zu schließen. Nach dem Schließen wird sofort das Formular wieder geöffnet.

Es scheint, dass sich das System die letzte Taste merkt und wieder ausführt. In "C" konnte man den Speicher leeren. Geht das auch in Delphi? Wenn ja, wie?

Vielen Dank im voraus.

Sven

Dunkel 23. Jan 2009 23:44

Re: Letzte gedrückte Taste aus dem System Speicher löschen ?
 
Hallo!

Hilft vielleicht schon ein simples
Delphi-Quellcode:
Key:= 0;
am Ende der OnKeyUp-Ereignisbehandlung?

Piro 24. Jan 2009 09:58

Re: Letzte gedrückte Taste aus dem System Speicher löschen ?
 
Das war es noch nicht. Vielleicht sollte ich mal noch etwas mehr erklären.

Ich habe 2 Formulare. Formular 1 ist das Hauptformular. Formular 2 dient als Anzeige von Daten. Es besitzt nur eine Aktionskomponte (Close Button). Alles andere sind Anzeige Komponenten. Ich öffne Formular 2 mit "ShowModal".

Im KeyUp Ereignis des Formular 1 habe ich eingestellt, wenn die Enter Taste gedrückt wird, das Formular 2 geöffnet wird. Der Focus ist dann sofort auf dem CLose Button, welchen ich wiederum mit der Enter Taste betätigen kann. Wenn ich das aber mache, wird das Formular 2 geschlossen und sofort wieder aufgemacht.

Irgendwie merkt er sich die Enter Taste aus dem Formular 2 und sendet es wieder an das Formular 1. Wie kann ich die letzte Aktion, sprich die Enter Taste aus dem System Speicher löschen? Oder gibt es eine andere bessere Lösung?


Vielen Dank.

Sven

toms 24. Jan 2009 10:30

Re: Letzte gedrückte Taste aus dem System Speicher löschen ?
 
Hallo

Kannst du nicht OnKeyDown nehmen?

Reinhard Kern 24. Jan 2009 11:22

Re: Letzte gedrückte Taste aus dem System Speicher löschen ?
 
Zitat:

Zitat von daywalker299
...
Im KeyUp Ereignis des Formular 1 habe ich eingestellt, wenn die Enter Taste gedrückt wird, das Formular 2 geöffnet wird. Der Focus ist dann sofort auf dem CLose Button, welchen ich wiederum mit der Enter Taste betätigen kann. Wenn ich das aber mache, wird das Formular 2 geschlossen und sofort wieder aufgemacht.
...

Hallo,

falls das so ist: ich würde dem Formular1 ein boolean zufügen Form2Open, das mit dem ShowModal-Aufruf gesetzt wird. Ist es True, so wird einfach Formular2 nicht geöffnet, aber das Flag auf false zurückgesetzt. Alternativ kannst du auch die Eigenschaft IsVisible (oder so ähnlich, hab grade den Delphi-PC nicht am Laufen) von Formular2 nehmen, grundsätzlich jedenfalls machst du Form2 nur auf, wenn sie nicht schon offen ist.

Falls das nicht funktioniert: Form2 setzt beim Schliessen ein Flag JustClosed, das fragt Form1 ab und setzt es zurück, öffnet aber nicht Form2 wenn es gesetzt war.

Je nach Reihenfolge der Ereignisse funktioniert immer etwas in der Art. Wenn man es ganz kompliziert machen will, kann man statt einfacher Flags auch Semaphore u.ä. nehmen, das macht mehr Eindruck.

Gruss Reinhard

Piro 24. Jan 2009 11:56

Re: Letzte gedrückte Taste aus dem System Speicher löschen ?
 
Super..das KeyDown Ereignis bringt das gewünschte Ziel.

Dank an alle.

Schönes Wochenende.

Schwedenbitter 16. Jun 2011 11:06

AW: Re: Letzte gedrückte Taste aus dem System Speicher löschen ?
 
Zitat:

Zitat von Piro (Beitrag 872454)
Das KeyDown Ereignis bringt das gewünschte Ziel.

Und das klappt bei Dir?

Bei mir funktioniert folgender Code nicht:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Case Key Of
    54 : If (ssShift in Shift) Then Key:=0; // '&' einfach ignorieren
  End;
  Caption:=IntToStr(Key);
end;

end.
Zwar wird - wenn ich das '&' (Shift + 6) drücke - Key auf 0 gesetzt in meinem Edit1 erscheint dennoch das unliebsame '&'. Den Umweg über OnKeyPress(); wollte ich nicht gehen, weil ich in meinem Programm bereits eine sehr umfangreiche Procedure für OnKeyDown habe und es spätestens in ein paar Jahren sehr umständlich in der Wartung wird.
Wo liegt der Fehler bei mir?
Sollte es am Compiler von TurboDelphi liegen?


Ich wollte kein neues Thema aufmachen, weil schon die Frage wie die sprichwörtliche Faust aufs Auge passt und ich es daher sinnlos fand, genau dasselbe Thema erneut aufzumachen...

Gruß, Alex

jaenicke 16. Jun 2011 11:12

AW: Letzte gedrückte Taste aus dem System Speicher löschen ???
 
Das wird die Taste 38 (& eben) sein, denn wie du selbst schreibst, ist es ja eben nicht das Zeichen '6', sondern das Zeichen '&', das gedrückt wird. ;-)

s.h.a.r.k 16. Jun 2011 11:13

AW: Letzte gedrückte Taste aus dem System Speicher löschen ???
 
Hast du KeyPreview der Form auf True?

Ansonsten würde ich direkt im OnKeyDown-Event des Edits aggieren, vielleicht schafft das ja Abhilfe.

Schwedenbitter 16. Jun 2011 12:36

AW: Letzte gedrückte Taste aus dem System Speicher löschen ???
 
Danke für die Antworten trotz des alten Themas!
Zitat:

Zitat von jaenicke (Beitrag 1106715)
Das wird die Taste 38 (& eben) sein, denn wie du selbst schreibst, ist es ja eben nicht das Zeichen '6', sondern das Zeichen '&', das gedrückt wird. ;-)

Nö. Es ist schon die 54, denn ich lasse mir in der Caption der Form immer den Code anzeigen. Ich habe nebenbei bemerkt dennoch die 38 probiert - leider ohne Erfolg.
Zitat:

Zitat von s.h.a.r.k (Beitrag 1106716)
Hast du KeyPreview der Form auf True?

Ja, habe ich. Daran liegt es nicht.

Hat schonmal jemand ein leeres Programm erstellt, ein TEdit draufgezogen und meinen Code von oben probiert, der nicht TurboDelphi hat? Ich hatte schon einmal Merkwürdigkeiten in TurboDelphi, die in anderen Delphi-/Compiler-Versionen nicht existierten...

Das hier funktioniert übrigens auch nur insoweit, als Sondertasten wie Einf, Pos1, Bild, Pfeil hoch, runter etc. nicht geht, Buchstaben, Zahlen etc. aber in das TEdit eingetragen werden:
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  Key:=0;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:10 Uhr.
Seite 1 von 2  1 2      

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