AGB  ·  Datenschutz  ·  Impressum  







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

Vorhergehendes Control fokussieren

Ein Thema von BrunoT · begonnen am 20. Jun 2005 · letzter Beitrag vom 20. Jun 2005
Antwort Antwort
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#1

Vorhergehendes Control fokussieren

  Alt 20. Jun 2005, 10:05
Hi DP'ler,

Ich habe folgendes gefunden, um bei Enter zun nächsten Control zu springen:

Delphi-Quellcode:
procedure TForm1.EditKeyPress(Sender: TObject; var Key: Char);
begin
  if key = #13 then
  begin
    key := #0;
    Perform(WM_NEXTDLGCTL, 0, 0);
  end;
end;
Das ist die Keypress für alle Edit-Compos;

nun will ich mit der Hoch-Taste auf das vorhergehende Control springen:

Delphi-Quellcode:
procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_UP then
    ...SetFocus;
end;
für jedes Edit müsste ich aber dieses Keydown-Ereignis hinterlegen. geht das nicht einfacher? (so wie bei Enter)

mfg

BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Vorhergehendes Control fokussieren

  Alt 20. Jun 2005, 10:18
Hallo Holger,

hiermit wird der Fokus auf das vorhergehende Control übertragen:

Perform(WM_NEXTDLGCTL, 1, 0); Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#3

Re: Vorhergehendes Control fokussieren

  Alt 20. Jun 2005, 10:59
Hi marabu,

danke für die schnelle Antwort. Nun kann ich zwischen Edit-Feldern mit Enter und Pfeil-Hoch springen,
aber nun kann ich leider dieses in einem Button nicht abfangen:

Delphi-Quellcode:
procedure Tform.JvBitBtn1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if key = VK_UP then
  begin
    key:=0;
    Feld_Speichern;
    Perform(WM_NEXTDLGCTL, 1, 0);
  end;
end;
Wenn es da noch eine Möglichkeit gäbe...

mfg

BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  Mit Zitat antworten Zitat
Benutzerbild von Flocke
Flocke

Registriert seit: 9. Jun 2005
Ort: Unna
1.172 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Vorhergehendes Control fokussieren

  Alt 20. Jun 2005, 11:30
Du solltest für das Formular die Eigenschaft "KeyPreview" auf True stellen und dann nur einmal für das Formular das Ereignis "OnKeyDown" auswerten. Dann musst du es nicht für alle Controls machen.
Volker
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#5

Re: Vorhergehendes Control fokussieren

  Alt 20. Jun 2005, 11:49
Mit VK_UP - wie mit allen Pfeil-Tasten und einigen mehr - ist das nicht ganz einfach. Borland hat in der VCL eine Sonderbehandlung für diese Tasten implementiert. Der message dispatcher von WinControl generiert für bestimmte Tasten manchmal keine key messages, da sie eine feste Bedeutung haben. VK_UP kann zwar von TEdit behandelt werden, aber TButton erfährt erst gar nichts von diesem Tastendruck. Da hilft übrigens auch Form.KeyPreview nicht.

marabu
  Mit Zitat antworten Zitat
Benutzerbild von BrunoT
BrunoT

Registriert seit: 23. Jan 2003
Ort: Sandbeiendorf
360 Beiträge
 
Delphi 8 Professional
 
#6

Re: Vorhergehendes Control fokussieren

  Alt 20. Jun 2005, 12:12
Hi Flocke, hi marabu,

Einmal zur Verdeutlichung des Problems:
Ich habe ein Image, auf dem für den Anwender scheinbar lauter Eingabefelder und Button verteilt sind. Klickt der Anwender an eine bestimmte Stelle des Images, so wird dort das Eingabefeld, oder ein Button sichtbar, aber es ist immer der gleiche Button und immer das gleiche Eingabefeld, nur die Koordinaten ändern sich. Nun soll die Navigation im "Bild-Formular" auch über die Pfeiltaste "Hoch" und "Enter" erfolgen.
Drückt der User Enter- nächstes Feld(Button), drückt er Pfeil hoch- vorhergehendes Feld(Button). Ich muß ermitteln können, in welche Richtung ich den Button bzw. das Edit-Feld verlasse. Beim Editfeld kein Problem (wie gesagt).

kann man die Message "Perform(WM_NEXTDLGCTL, 1, 0)" die ja irgendwie gesendet werden muss, abfangen?

mfg

BrunoT
Holger

EDV- Ende der Vernunft
Meine Calcedit-Kompo
  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 14:14 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