Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi KeyDown - Problem (https://www.delphipraxis.net/104172-keydown-problem.html)

JB-1990 28. Nov 2007 16:13


KeyDown - Problem
 
Hey leuz,
hab da ein Problem mit diesem OnKeyDown.
Es sieht so aus, dass wenn z.B. alt + f4 gedrückt wird es nicht geht (inkompatible typen)
Ich will mein Programm dazu bringen, dass es eine Showmessage bringt, wenn alt + f4 gedrückt wird und es trotzdem am leben bleibt.

Delphi-Quellcode:
KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
das is ja soweit ganz klar aber:

Delphi-Quellcode:
 if (  ssAlt in Shift ) and ( Key = VK_F4 ) tthen Showmessage:='Schade.';
will irgendwie net, der schließt mir das Programm ohne das auszuführen hab schon einiges Probiert, wenn ich 'ctrl' noch dazu setze also

Delphi-Quellcode:
 if ( Shift+ [ssctrl ,ssAlt] = Shift ) and ( Key = VK_F4 ) tthen Showmessage:='Schade.';
klappt das prima, aber mit alt+f4 ni -.-
hat jemand nen Plan wie ich das machen kann?
THX

Progman 28. Nov 2007 16:33

Re: KeyDown - Problem
 
Alt+F4 beendet das Programm. Man kann aber in CloseQuery des Forms CanClose auf False setzen und den Dialog anzeigen.

freak4fun 28. Nov 2007 16:38

Re: KeyDown - Problem
 
Delphi-Quellcode:
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  CanClose := MessageBox(0, 'Wirklich beenden', 'Beenden?', MB_YESNO) = ID_YES;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if((ssAlt in Shift) and (ssCtrl in Shift) and (Key = VK_F4))then
    begin
      ShowMessage('Alt Ctrl + + F4');
    end;
end;
:love:

JB-1990 28. Nov 2007 16:46

Re: KeyDown - Problem
 
THX euch beiden

das mit dem CanClose is echt HAMMER...

und das mit der MessageBox is auch ma nützlich *gg*

JB-1990 28. Nov 2007 16:58

Re: KeyDown - Problem
 
Nächstes Problem ist, wie kann ich jetzt
alt und einen buchstaben z.b. g miteinander verbinden?

Delphi-Quellcode:
 IF ((ssAlt in Shift) AND (Key = 'E')) THEN FScreen.AlphaBlendValue:=200
Inkompatible Typen... hat man ma n schönes Erfolgerlebnis und dann das -.-

DeddyH 28. Nov 2007 17:02

Re: KeyDown - Problem
 
Nimm mal $45 statt 'E'.

JB-1990 28. Nov 2007 17:07

Re: KeyDown - Problem
 
wo gibts so 'ne Tabelle für die Dinger?

DeddyH 28. Nov 2007 17:08

Re: KeyDown - Problem
 
Win32-SDK unter "virtual-key codes"

JB-1990 28. Nov 2007 17:12

Re: KeyDown - Problem
 
THX

Deep-Sea 29. Nov 2007 07:33

Re: KeyDown - Problem
 
Zitat:

Zitat von DeddyH
Nimm mal $45 statt 'E'.

Wie wäre es mit Ord('E') :wink:

DeddyH 29. Nov 2007 07:39

Re: KeyDown - Problem
 
Das funzt nur solange, wie er den Buchstaben in Großschreibung eingibt ;)

Deep-Sea 29. Nov 2007 07:47

Re: KeyDown - Problem
 
Zitat:

Zitat von DeddyH
Das funzt nur solange, wie er den Buchstaben in Großschreibung eingibt ;)

Wird er schon merken :P
Aber "Ord(UpperCase('e'))" zu nutzen ist auch sinnlos, da wenn ich weiß, dass ich einen Großbuchstaben brauche ihn ja gleich groß eingeben kann.
Allerdings finde ich, dass "Ord('E')" leichter verständlich ist als $45 :-D

DeddyH 29. Nov 2007 07:54

Re: KeyDown - Problem
 
Naja, falls man das in eine Methode packen möchte, sollte man schon in Großschreibung konvertieren, sonst wundert man sich irgendwann :-D

JB-1990 1. Dez 2007 17:28

Re: KeyDown - Problem
 
Zitat:

Zitat von Deep-Sea
Zitat:

Zitat von DeddyH
Das funzt nur solange, wie er den Buchstaben in Großschreibung eingibt ;)

Wird er schon merken :P
Aber "Ord(UpperCase('e'))" zu nutzen ist auch sinnlos, da wenn ich weiß, dass ich einen Großbuchstaben brauche ihn ja gleich groß eingeben kann.
Allerdings finde ich, dass "Ord('E')" leichter verständlich ist als $45 :-D

sind beide gleich verständlich, beim GTR is es ja auch so, dass jede Taste ne bestimmte Zahl hat z.B.: Getkey=79 von daher ist eig. alles ganz gut zu verstehen.

JB-1990 2. Dez 2007 02:07

Re: KeyDown - Problem
 
die Windowstasten kann man net ausstellen oder? ( hab da
Delphi-Quellcode:
VK_LWIN
gefunden) aber wenn ich sage:
Delphi-Quellcode:
IF ((VK_LWIN in Shift) AND (Key =$44)) THEN
sagt mir Delphi:
"Inkompatible Typen: 'Integer' und 'Enumeration'
geht das nur über Hook?

Amateurprofi 2. Dez 2007 03:09

Re: KeyDown - Problem
 
Zitat:

Zitat von DeddyH
Das funzt nur solange, wie er den Buchstaben in Großschreibung eingibt ;)

Nein.
Wir sind hier im KeyDown, nicht im KeyPress.....

Luckie 2. Dez 2007 10:04

Re: KeyDown - Problem
 
Da das wohl mit dinem anderen Programm zu tun hat: Man kann dein Programm über den Taskmanager abschiessen. Und Strg+Alt+Entf wirst du nur über einen Tastaturtreiber abfangen können.

JB-1990 2. Dez 2007 17:54

Re: KeyDown - Problem
 
richtig, kann man aber auch leider nix gegen unternehmen, war mir aber von vornherein klar...

aber: dazu muss man auch wissen wie das Prog heißt ^^ und wenn es mir gelingt "Windowstaste+D" und "Windowstaste+M" sowie "Windowstaste" dürfte es schwieriger werden, es zu finden(wenn man in den prozessen is). Zudem ist der Taskmanager im Hintergrund, man kann zwar mit der Tastatur agieren, aber wenn er hinter einer schwarzen Bildfäche liegt ist es schwer das richtige zu treffen ^^ klar könnte man einfach alle Prozesse beenden, aber nicht alle wissen, dass das auch ohne Maus geht ^^
Also im fall, dass ich wirklich vorhab, jemanden 100% zu hindern meinen PC zu benutzen is LockWorkStation auf Jedenfall besser und sicherer, und da ich weiß, dass die Progs. doch noch laufen, mach ich das dann auch so, wenn Bedarf besteht...

Aber die Windowstasten müssen sich irgendwie deaktivieren lassen, in games funzen die auch net...

edit: hab projekt aufgegeben, da es dann doch recht sinnlos ist...

JB-1990 8. Mai 2008 17:19

Neues KeyDown - Problem
 
Hey ho liebe Delphianer,
ich hab erneut ein Problem mit meinen Tasten.
Ich ein Editfeld in dem man nur Zahlen und Punkte eingeben können soll, da man dort ein Datum eingeben soll.

mit
Delphi-Quellcode:
IF NOT (Key IN [#48..#57,#60..#69,???]) THEN Key:=#0;
hab ich ja schon die zahlen aber jetzt brauch ich einen Punkt. In der Win32sdk werde ich nicht fündig. Und wenn dann steht da etwas von 0xBE oder VK_OEM_PERIOD #0xBE nimmt er mir nicht ab und VK_OEM_PERIOD ist nicht kompatibel mit dem Rest.
Variablen vom Typ string will er nicht (logisch wenn char verlangt wird) und das:
Delphi-Quellcode:
IF NOT (Key IN [#48..#57,#60..#69,#+x+y+z+a]) THEN Key:=#0;
will auch nicht gehen, weil der die variablen in denen je ein Zeichen von 0xBE steht zu einem ShortString zusammenfasst - was mir auch einleuchtet. Nun bin ich mit meinen Ideen am Ende und weiß auch nicht weiter.
LG JB-1990

Fussball-Robby 8. Mai 2008 17:24

Re: KeyDown - Problem
 
Du kannst doch einfach testen, welchen Wert die Punkt-Taste hat:
Delphi-Quellcode:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
  ShowMessage(IntToStr(Ord(Key)));
end;
Punkt-Taste = #46.

Mfg

JB-1990 8. Mai 2008 20:31

Re: KeyDown - Problem
 
fettes THX


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:15 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