AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Checkbox / KeyDown, KeyPress, KeyUp

Ein Thema von LuckySpacy · begonnen am 13. Sep 2006 · letzter Beitrag vom 14. Sep 2006
Antwort Antwort
LuckySpacy

Registriert seit: 2. Apr 2003
Ort: Fränkisch-Crumbach
50 Beiträge
 
Delphi 10.4 Sydney
 
#1

Checkbox / KeyDown, KeyPress, KeyUp

  Alt 13. Sep 2006, 11:28
Frage wieso funktioniert bei den Checkboxen die Ereignisse KeyDown, KeyPress und KeyUp nicht, wenn ich die Pfeiltasten hoch oder runter drücke?

Folgendes Problem:
Ich verwende ein EditFeld (Edit1), eine Checkbox (Checkbox1) und ein EditFeld (Edit2).

Tabulatorenreihenfolge: Edit1, Checkbox1, Edit2

Das Editfeld2 setze ich auf Tabstop := false;

Ich starte das Programm und Edit1 wird fokusiert.
Dann drücke ich auf die TAB-Taste und Checkbox1 wird fokusiert.
Dann drücke ich auf die Pfeil nach unten Taste und Edit2 wird fokusiert.
Warum das denn???
Edit2 wurde auf Tabstop = false gesetzt.

Wenn die Checkbox1 fokusiert ist und ich drücke die TAB-Taste, dann wird richtigerweise Edit1 fokusiert.
Das Abfragen in KeyDown funktioniert in den Checkboxen nicht, wenn ich die Pfeiltasten drücke.
Warum eigentlich nicht?

Wie schalte ich die Pfeiltasten in den Checkboxen aus, wenn die Ereignisssteuerung nicht greift?
Ich möchte auf jedenfall verhindern, dass ein Wincontrol den Fokus bekommt, wenn ich die Tabstop-Eigenschaft auf false gesetzt habe.
Thomas Bachmann
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Checkbox / KeyDown, KeyPress, KeyUp

  Alt 13. Sep 2006, 17:54
TabStop := false bedeutet m.E. nur, dass die Komponente nicht mit der Tabulatortaste angesprungen werden kann. Sie kann sehr wohl den Focus bekommen, z.B. wenn Du mit der Maus reinklickst. Du kannst damit also nicht verhindern, dass ein Control den Focus bekommt. Dafür fällt mir im Moment nichts anderes als "Enabled := false" ein. Für das Umgehen der Pfeiltasten fällt mir im Moment auch nichts ein.

Gruß Jürgen
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von juergen
juergen

Registriert seit: 10. Jan 2005
Ort: Bönen
1.164 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Checkbox / KeyDown, KeyPress, KeyUp

  Alt 13. Sep 2006, 18:49
Hallo LuckySpacy,

entweder habe ich dich nicht richtig verstanden, oder du hast ein anderes Problemchen.
Bei mir tut's das nämlich, mit der selben Delphi-Version...
Wenn die Combobox den Focus hat und ich dann die Pfeiltaste nach unten betätige, wird die Combox "durchgescrollt".
Ist es das was du willst?
Im Anhang mal der Source.

//Edit -> 150...
Angehängte Dateien
Dateityp: zip test1_198.zip (8,3 KB, 7x aufgerufen)
Jürgen
Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Checkbox / KeyDown, KeyPress, KeyUp

  Alt 13. Sep 2006, 22:22
Moin LuckySpacy,

such' hier mal nach Hier im Forum suchenWM_GETDLGCODE.
Da wirst Du einige Beispiele finden (für Dich kommt dann auch noch Hier im Forum suchenDLGC_WANTARROWS in Frage)

Ob das bei einer CheckBox das gewünschte Ergebnis bringt, weiss ich auch nicht.
Standardmässig dienen die Pfeiltasten zur Navigation, und werden nicht durchgereicht.

@juergen:
CheckBox, nicht ComboBox
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
gfjs

Registriert seit: 8. Dez 2005
Ort: Hohenkammer
298 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Checkbox / KeyDown, KeyPress, KeyUp

  Alt 14. Sep 2006, 03:24
Guten Morgen, LuckySpacy.

Nachdem Du nicht willst, dass Deine TextBox/Edit2 den Focus erhält, vermute ich, dass das Control nur zur Ausgabe dienen soll. Dann wäre es doch einfacher, dafür ein Label zu verwenden, das ohnehin nie den Focus erhalten kann.

Ich habe mich einmal in der .NET Framework SDK-Dokumentation umgesehen und bin auf folgendes gestoßen:

Es gibt eine Eigenschaft CanSelect, die einen Wert abruft, der angibt, ob das Steuerelement den Focus erhalten kann.
Dazu gibt es eine geschützte Methode SetStyle, mit der man mittels der ControlStyles-Enumeration das Member selectable setzen kann.

Allerdings bin ich überhaupt nicht fit in OOP. Deshalb ist es mir nicht gelungen, die Methode SetStyle zu überschreiben. Ich habe es dann so versucht:
MyTextBox.SetStyle(ControlStyles.Selectable, false); und folgende Fehlermeldung erhalten:
[Pascal Fehler] WinForm.pas(133): E2363 Nur Methoden von abgeleiteten Typen dürfen auf protected Member [System.Windows.Forms]Control.SetStyle über Assemblierungsgrenzen hinweg zugreifen Ich weiß nicht, was ich falsch gemacht habe und hoffe, ich liege nicht total daneben. Aber vielleicht hilft Dir ja der Hinweis auf SetStyle und ControlStyles weiter. Wenn ja, wäre es nett, wenn Du mir das Ergebnis zukommen lassen würdest.

Viel Erfolg und noch einen schönen Tag.

Gruß Jürgen
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: Checkbox / KeyDown, KeyPress, KeyUp

  Alt 14. Sep 2006, 07:39
Hallo,

Pfeiltasten in Checkbox abfangen? CM_DIALOGKEY abfangen.

so ähnlich:
Delphi-Quellcode:
//...
private
  procedure CMDialogKey(var Message: TCMDialogKey); message CM_DIALOGKEY;
//...
procedure TForm1.CMDialogKey(var Message: TCMDialogKey);
begin
  with message do begin
    case charcode of
    VK_LEFT,VK_UP : if ActiveControl is TCheckBox then
                         SendMessage(Self.Handle,WM_NEXTDLGCTL,1,0);
    VK_RIGHT,VK_DOWN : if ActiveControl is TCheckBox then
                         SendMessage(Self.Handle,WM_NEXTDLGCTL,0,0);
    else
      inherited;//Standardverhalten sicherstellen
    end;
  end;
end;
Mit WM_NEXTDLGCTL wird das nächste Element entsprechend TabOrder/TapStop fokussiert.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
LuckySpacy

Registriert seit: 2. Apr 2003
Ort: Fränkisch-Crumbach
50 Beiträge
 
Delphi 10.4 Sydney
 
#7

Re: Checkbox / KeyDown, KeyPress, KeyUp

  Alt 14. Sep 2006, 10:24
Vielen Dank an alle die sich hier meinem Problem angenommen haben.

An Lannes:
Ich habe deinen Quellcode ausprobiert.
Funktioniert einwandfrei und wäre eine denkbare Lösung für mich.

Da ich aber damit ein grundsätzliches Problem habe und ich nicht
in allen Projekten vorher diesen Quellcode übernehmen möchte,
habe ich mich für eine andere Lösung entschieden.

Ich habe aus der TCheckbox meine eigene Komponente gemacht.
Die Lösung ist ganz einfach:

Delphi-Quellcode:
unit syCheckBox;

interface

uses
  SysUtils, Classes, Controls, StdCtrls, Windows, Messages;

type
  TsyCheckBox = class(TCheckBox)
  private
    procedure WMGETDLGCODE(var msg : TWMGetDlgCode); message WM_GETDLGCODE;
 protected
  public
  published
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('MeineKomponenten', [TsyCheckBox]);
end;

{ TsyCheckBox }

procedure TsyCheckBox.WMGETDLGCODE(var msg: TWMGetDlgCode);
begin
  msg.Result := msg.Result or DLGC_WANTARROWS;
end;


end.
Damit kann ich ganz normal die KeyDown und KeyUp Ereignisse abfragen und es wird kein anderes Control fokusiert.
Vorsicht: KeyPress funktioniert damit nicht.
Thomas Bachmann
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:31 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