AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Letzte gedrückte Taste aus dem System Speicher löschen ???
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Piro · begonnen am 23. Jan 2009 · letzter Beitrag vom 16. Jun 2011
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

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

  Alt 23. Jan 2009, 22:33
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
  Mit Zitat antworten Zitat
Benutzerbild von Dunkel
Dunkel

Registriert seit: 26. Mär 2007
Ort: Klingenstadt
541 Beiträge
 
Delphi 2007 Enterprise
 
#2

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

  Alt 24. Jan 2009, 00:44
Hallo!

Hilft vielleicht schon ein simples
Key:= 0; am Ende der OnKeyUp-Ereignisbehandlung?
Es ist zu wahr um schön zu sein...
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#3

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

  Alt 24. Jan 2009, 10:58
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
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#4

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

  Alt 24. Jan 2009, 11:30
Hallo

Kannst du nicht OnKeyDown nehmen?
Thomas
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#5

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

  Alt 24. Jan 2009, 12:22
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
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#6

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

  Alt 24. Jan 2009, 12:56
Super..das KeyDown Ereignis bringt das gewünschte Ziel.

Dank an alle.

Schönes Wochenende.
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#7

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

  Alt 16. Jun 2011, 12:06
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
Alex Winzer
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.580 Beiträge
 
Delphi 11 Alexandria
 
#8

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

  Alt 16. Jun 2011, 12:12
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#9

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

  Alt 16. Jun 2011, 12:13
Hast du KeyPreview der Form auf True?

Ansonsten würde ich direkt im OnKeyDown-Event des Edits aggieren, vielleicht schafft das ja Abhilfe.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Schwedenbitter

Registriert seit: 22. Mär 2003
Ort: Finsterwalde
622 Beiträge
 
Turbo Delphi für Win32
 
#10

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

  Alt 16. Jun 2011, 13:36
Danke für die Antworten trotz des alten Themas!
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.
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;
Alex Winzer
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 16:30 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