Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Strg + Pfeiltaste runter (https://www.delphipraxis.net/108378-strg-pfeiltaste-runter.html)

Nils_13 12. Feb 2008 17:14


Strg + Pfeiltaste runter
 
Hi,

wenn ich
Delphi-Quellcode:
if (ssCtrl in Shift) and (Key = VK_UP) then
benutze, wird die gewünschte Aktion bei Strg+Pfeiltaste hoch durchgeführt. Bei Pfeiltaste runter funktioniert das nicht:
Delphi-Quellcode:
if (ssCtrl in Shift) and (Key = VK_DOWN) then
Woran liegt das ?

Muetze1 12. Feb 2008 17:19

Re: Strg + Pfeiltaste runter
 
Von welcher Komponente reden wir hier?

Nils_13 12. Feb 2008 17:20

Re: Strg + Pfeiltaste runter
 
:oops: Ganz vergessen, Listbox.

bitsetter 12. Feb 2008 22:22

Re: Strg + Pfeiltaste runter
 
Hi,

dazu habe ich mal ein Testprojekt mit einer Listbox erstellt, bei mir funktioniert auch
Delphi-Quellcode:
if (ssCtrl in Shift) and (Key = VK_DOWN) then
:gruebel:

lorand 13. Feb 2008 01:25

Re: Strg + Pfeiltaste runter
 
Ist in der Listbox denn überhaupt genug drin für [Strg+Pfeiltaste runter]?

mfg

Nils_13 13. Feb 2008 18:39

Re: Strg + Pfeiltaste runter
 
Es ist genug drinnen....

Der Fehler ist echt übel, liegt scheinbar nicht an meinem Code: Liegt VK_DOWN oben (im Code so gezeigt), wird VK_DOWN ausgeführt, VK_UP funktioniert dafür nicht. Liegt VK_UP weiter oben, wird VK_UP ausgeführt, VK_DOWN dafür nicht. Ich versteh den Fehler nicht:
Delphi-Quellcode:
procedure TfrmSettings.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (ssCtrl in Shift) and (Key = Ord('N')) then
    mValNeu.Click
  else
  if (ssCtrl in Shift) and (Key = VK_DELETE) then
    mValDel.Click
  else
  if (ssCtrl in Shift) and (ssAlt in Shift) and (Key = Ord('N')) then
    mKatNeu.Click
  else
  if (ssCtrl in Shift) and (Key = VK_DOWN) then
    if ActiveControl = lbKat then
      mKatMoveRunter.Click
  else
  if (ssCtrl in Shift) and (Key = VK_UP) then
    if ActiveControl = lbKat then
      mKatMoveHoch.Click
  else
  if Key = VK_ESCAPE then
    Close;
end;

bluesbear 13. Feb 2008 19:21

Re: Strg + Pfeiltaste runter
 
Moin Nils_13,
Zitat:

Zitat von Nils_13
Delphi-Quellcode:
procedure TfrmSettings.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
  if (ssCtrl in Shift) and (Key = Ord('N')) then
    mValNeu.Click
  else
  if (ssCtrl in Shift) and (Key = VK_DELETE) then
    mValDel.Click
  else
  if (ssCtrl in Shift) and (ssAlt in Shift) and (Key = Ord('N')) then
    mKatNeu.Click
  else
  if (ssCtrl in Shift) and (Key = VK_DOWN) then
    if ActiveControl = lbKat then
      mKatMoveRunter.Click
  else // dieses else gehört zu if ActiveControl = lbKat then
  if (ssCtrl in Shift) and (Key = VK_UP) then
    if ActiveControl = lbKat then
      mKatMoveHoch.Click
  else
  if Key = VK_ESCAPE then
    Close;
end;

füge mal überall zu jedem "then" und "else" jeweils "begin" und "end" ein. Dann sollte es klappen. Siehe Kommentar im zitierten Quellcode.
Und es sieht übersichtlicher aus imho.

Nils_13 13. Feb 2008 19:35

Re: Strg + Pfeiltaste runter
 
Ah, was für ein dummer Fehler. Ich finde es so unübsichtlicher, naja ist ja auch egal, der Compiler interpretiert es so nicht korrekt, werde es wohl so machen müssen. Danke, wäre nie drauf gekommen :) !

Hawkeye219 13. Feb 2008 20:17

Re: Strg + Pfeiltaste runter
 
Hallo,

um den Fallen einer geschachtelten IF-Anweisung zu entkommen, kann man auch eine CASE-Anweisung einsetzen:

Delphi-Quellcode:
procedure TfrmSettings.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
const
  key_ValNeu       = scCtrl or Ord('N');
  key_ValDel       = scCtrl or VK_DELETE;
  key_KatNeu       = scCtrl or scAlt or Ord('N');
  key_KatMoveRunter = scCtrl or VK_DOWN;
  key_KatMoveHoch  = scCtrl or VK_UP;
  key_Close        = VK_ESCAPE;
begin
  case {Menus.}ShortCut(Key, Shift) of

    key_ValNeu:
      mValNeu.Click;

    key_ValDel:
      mValDel.Click;

    key_KatNeu:
      mKatNeu.Click;

    key_KatMoveRunter:
      if ActiveControl = lbKat then
        mKatMoveRunter.Click;

    key_KatMoveHoch:
      if ActiveControl = lbKat then
        mKatMoveHoch.Click;

    key_Close:
      Close;
  end;
end;
Gruß Hawkeye


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:02 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz