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/)
-   -   Form1.KeyUp problem (https://www.delphipraxis.net/153621-form1-keyup-problem.html)

JnZn558 10. Aug 2010 13:37

Form1.KeyUp problem
 
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  KeyPreview := True;
  FormColor := Form1.Color;
end;

procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ssCtrl in Shift then Form1.Color := clAqua;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if ssCtrl in Shift then Form1.Color := FormColor;
end;
mein problem hier ist, dass beim Form1.FormKeyUp Form1.Color nicht wieder hergestellt wird. heisst sozusagen Shift enthaelt ssCtrl nicht, aber warum, bei keydown geht das.

p80286 10. Aug 2010 13:50

AW: Form1.KeyUp problem
 
Wo ist das Problem?

Wenn die [Strg]-Taste gedrückt wird, wird das Form blau, wenn die Bstb-Taste losgelassen wird, dann wird wieder "zurück gefärbt!
(D2006)

Gruß
K-H

knochen 10. Aug 2010 14:52

AW: Form1.KeyUp problem
 
Wenn du die Crtl Taste loslässt, ist die Bedingung ja nicht mehr wahr. Es muss also heißen:

if not (ssCtrl in Shift) then Form1.Color := clBtnFace;

Grüße

DeddyH 10. Aug 2010 15:28

AW: Form1.KeyUp problem
 
Dann darf die STRG-Taste aber nicht gedrückt sein. Wieso nicht einfach
Delphi-Quellcode:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  Color := FormColor;
end;
:?:

JnZn558 10. Aug 2010 19:15

AW: Form1.KeyUp problem
 
danke sehr

so Ich hab es nun so ausprobiert, mit Ctrl klappts wunderbar, bei Alt Taste geht bei 2. druecken nicht wie bei 1.mal, zweites mal druecken muss die alt taste laenger gedrueckt halten, bis es die farbe aendert warum ist das so??
Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if ssAlt in Shift then Form1.Color := clAqua;
end;

procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if not ( ssAlt in Shift ) then Form1.Color := FormColor;
end;

knochen 11. Aug 2010 06:38

AW: Form1.KeyUp problem
 
Zitat:

Zitat von JnZn558 (Beitrag 1040886)
bei Alt Taste geht bei 2. druecken nicht wie bei 1.mal, zweites mal druecken muss die alt taste laenger gedrueckt halten, bis es die farbe aendert warum ist das so??

Das ist so, weil die Alt-Taste das Systemmenu der Form aktiviert. Ausprobieren mit <Alt>, danach(!) <Cursor down>. Heißt, das Systemmenu ist nach dem ersten Drücken aktiv, nur nich ausgeklappt.
Gegenprobe: Form1.BorderStyle auf bsNone setzten. Jetzt funktioniert es so wie erwartet.
Fazit: Die Alttaste ist für solch eine Aktion eher ungeeignet.

Grüße

xZise 11. Aug 2010 07:39

AW: Form1.KeyUp problem
 
Zitat:

Zitat von DeddyH (Beitrag 1040837)
Dann darf die STRG-Taste aber nicht gedrückt sein. Wieso nicht einfach
Delphi-Quellcode:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  Color := FormColor;
end;
:?:

Weil wenn man folgende Tasten drückt:
  1. ↓ CTRL
  2. ↓ Andere Taste (z.B. A)
  3. ↑ Diese andere Taste
  4. ↑ CTRL
Dann wird zu früh die Color zurückgesetzt. Wobei ich mich Frage ob das nicht auch der Fall ist, wenn man auf not(ssCtrl in Shift) testet.

MfG
Fabian

JnZn558 12. Aug 2010 17:12

AW: Form1.KeyUp problem
 
Zitat:

Zitat von knochen (Beitrag 1040962)
Zitat:

Zitat von JnZn558 (Beitrag 1040886)
bei Alt Taste geht bei 2. druecken nicht wie bei 1.mal, zweites mal druecken muss die alt taste laenger gedrueckt halten, bis es die farbe aendert warum ist das so??

Das ist so, weil die Alt-Taste das Systemmenu der Form aktiviert. Ausprobieren mit <Alt>, danach(!) <Cursor down>. Heißt, das Systemmenu ist nach dem ersten Drücken aktiv, nur nich ausgeklappt.
Gegenprobe: Form1.BorderStyle auf bsNone setzten. Jetzt funktioniert es so wie erwartet.
Fazit: Die Alttaste ist für solch eine Aktion eher ungeeignet.

Grüße

danke sehr, dies hat mich aufgeklaert


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