AGB  ·  Datenschutz  ·  Impressum  







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

Wie Entertaste bei Button abfangen?

Ein Thema von Armageddon · begonnen am 24. Mär 2006 · letzter Beitrag vom 1. Apr 2006
Antwort Antwort
Seite 2 von 3     12 3      
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11

Re: Wie Entertaste bei Button abfangen?

  Alt 24. Mär 2006, 22:07
@Armageddon : genau so ist das.

Nimm einen SpeedButton und fertig. Dann taucht das Problem erst gar nicht auf, weil kein Focus. Dann würde ich für Edits usw. Form-global (wie bereits gesagt) das OnkeyPress bei Enter auch auf WM_NEXTDLGCTRL auswerten. Suche mal nach EnterTab.

@Engine : dto. Tipse würde irgendwann Krankenschein machen müssen wegen Handverrenkung, um bei einzugebenden Zahlenkollonnen mit dem kleinen rechten Finger die Tab-Taste links oben zu erreichen. Solche Sachen stehen in den DINs drin, die M$ anscheinend aber nicht interessieren.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: Wie Entertaste bei Button abfangen?

  Alt 25. Mär 2006, 00:19
Zitat von Hansa:
Solche Sachen stehen in den DINs drin, die M$ anscheinend aber nicht interessieren.
MS ist aber ne amerikanische Firma, die werden sich da kaum für Forderungen eines deutschen Instituts interessieren. Zudem ist die ganze Bedienung "historisch gewachsen" (ich glaub bei ~15 Jahren kann man das im IT-Bereich schon sagen) und eben nicht von heut' auf morgen zu ändern.
Daniel Schuhmann
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

Re: Wie Entertaste bei Button abfangen?

  Alt 25. Mär 2006, 01:31
Zitat von Daniel Schuhmann:
... Zudem ist die ganze Bedienung "historisch gewachsen" (ich glaub bei ~15 Jahren kann man das im IT-Bereich schon sagen) und eben nicht von heut' auf morgen zu ändern.
Was soll wo geändert werden ? RETURN kommt von "Carriage Return" und das bedeutet "Wagenrücklauf". Diese Taste war immer schon ganz rechts, relativ groß und zwar seit Anfang des 20. Jahrhunderts. Selbst 15 Jahre reichen deshalb nicht aus, einen eigenen "Standard" zu setzen und diese Arbeitsweise zu ersetzen. Was konkret zu tun ist, das steht im Thread. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Armageddon
Armageddon

Registriert seit: 30. Mär 2003
Ort: Wilflingen
158 Beiträge
 
#14

Re: Wie Entertaste bei Button abfangen?

  Alt 31. Mär 2006, 16:25
So hab mich jetzt nochmal dran versucht. Das ich mit Enter vom einen Edit zum nächsten springen kann ist mir bekannt und verwende ich auch so. Nur leider haut das bei dem Button nicht hin. Und ich kann den Button nicht aus der TabOrder nehmen!!! Wie kann ich im OnKlick des Buttons abfragen ob es durch das drücken der Enter-Taste ausgelöst wurde? Das ist immer noch mein Problem. Das kann doch nicht so schwer sein.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#15

Re: Wie Entertaste bei Button abfangen?

  Alt 31. Mär 2006, 21:19
Hallo Armageddon,

Du könntest die WindowProc des Buttons ersetzen:

Delphi-Quellcode:
type
  TForm1 = class (TForm)
    Button1: TButton;
    procedure FormCreate (Sender: TObject);
    procedure FormDestroy (Sender: TObject);
  private
    svWndProc : TWndMethod;
    procedure NewWndProc (var aMessage: TMessage);
  end;

procedure TForm1.FormCreate (Sender: TObject);
begin
  svWndProc := Button1.WindowProc;
  Button1.WindowProc := NewWndProc;
end;

procedure TForm1.FormDestroy (Sender: TObject);
begin
  Button1.WindowProc := svWndProc;
end;

procedure TForm1.NewWndProc (var aMessage: TMessage);
begin
  if ((aMessage.Msg = CN_KEYDOWN) and (aMessage.WParam = 13)) then
    aMessage.WParam := 9;
  svWndProc (aMessage);
end;
In der neuen WindowProc wird die CN_KEYDOWN-Nachricht für den Button abgefangen und die Taste RETURN (Code 13) durch TAB (Code 9) ersetzt. Ein Drücken von RETURN führt beim Button nun zum Fokussieren des nächsten Dialogelements.

Gruß Hawkeye
  Mit Zitat antworten Zitat
gfjs

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

Re: Wie Entertaste bei Button abfangen?

  Alt 1. Apr 2006, 07:52
Guten Morgen, allerseits.

Kann man nicht mit KeyPreview erreichen, dass die Eingabe zuerst vom Formular bearabeitet wird? Dann könnte man doch an dieser Stelle den Focus auf das nächste Steuerelement setzen, wenn >Enter< gedrückt wurde?!

Bin noch Anfänger und hoffe, dass ich da nicht allzu falsch liege.

mfg gfjs
Mein neues Motto (von "Unbekannt"):
Gewinnen: Wenn Du kannst - Verlieren: Wenn Du musst - Aufgeben: NIE!
  Mit Zitat antworten Zitat
Benutzerbild von Armageddon
Armageddon

Registriert seit: 30. Mär 2003
Ort: Wilflingen
158 Beiträge
 
#17

Re: Wie Entertaste bei Button abfangen?

  Alt 1. Apr 2006, 10:38
Danke für den Code Hawkeye219,

nur leider läßt es sich nicht kompilieren. Delphi ist mit der Zeile irgenwie nicht ganz zufrieden:

Delphi-Quellcode:
  private
    svWndProc : TWndMethod;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#18

Re: Wie Entertaste bei Button abfangen?

  Alt 1. Apr 2006, 11:01
Merkwürdig, der Code läuft bei mir unter Delphi 6 und Delphi 2006 einwandfrei.
TWndMethod ist in den Units Classes und Controls definiert, und die sollten eigentlich in deiner Uses-Liste enthalten sein.

Wie sieht denn die Fehlermeldung aus?
  Mit Zitat antworten Zitat
Benutzerbild von Armageddon
Armageddon

Registriert seit: 30. Mär 2003
Ort: Wilflingen
158 Beiträge
 
#19

Re: Wie Entertaste bei Button abfangen?

  Alt 1. Apr 2006, 11:38
Zitat:
Wie sieht denn die Fehlermeldung aus?
Felddefinition nicht erlaubt nach Methoden oder Eigenschaften. Hab das wohl irgendwie am falschen Fleck so wie es aussieht. Ich häng mal die Unit an. Bzw. den Brocken Code vielleicht siehst Du ja meinen Fehler:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, Menus, XPMan, ComCtrls, StdCtrls, Buttons, jpeg, IniFiles,
  LMDOneInstance, LMDUtils, LMDCustomControl,
  LMDCustomPanel, LMDCustomBevelPanel, LMDCustomParentPanel,
  LMDCustomGroupBox, LMDGroupBox, LMDIniCtrl, LMDApplicationCtrl,
  LMDControl, LMDBaseControl, LMDBaseGraphicControl, LMDGraphicControl,
  LMDBaseImage, LMDCustomLImage, LMDLImage, LMDBaseController,
  LMDCustomContainer, LMDCustomImageList, LMDImageListConnector, ImgList,
  LMDClock, LMDImageList, LMDCustomButton, LMDButton, LMDClass,
  RichEdit, Clipbrd, LMDCustomStatusBar, LMDStatusBar, LMDWndProcComponent,
  LMDFormStyler, LMDCustomComponent;

type
  TForm1 = class(TForm)
    PopupMenu1: TPopupMenu;
    PageControl1: TPageControl;
    TabSheet1: TTabSheet;
    TabSheet2: TTabSheet;
    Panel1: TPanel;
    Image1: TImage;
    Label1: TLabel;
    GroupBox1: TGroupBox;
    GroupBox2: TGroupBox;
    RichEdit1: TRichEdit;
    RichEdit2: TRichEdit;
    GroupBox4: TGroupBox;
    GroupBox3: TGroupBox;
    TL_V_DREHZAHL: TLabel;
    TL_V_VC: TLabel;
    TL_V_VORSCHUB: TLabel;
    TL_V_REFPUNKT: TLabel;
    TL_V_VERSATZ: TLabel;
    TL_V_BREITE: TLabel;
    TL_V_AUFMASS: TLabel;
    TL_V_TEILE: TLabel;
    TL_V_UEBERWACHUNG: TLabel;
    TL_V_MATERIAL: TLabel;
    TL_VS: TLabel;
    TL_VQ: TLabel;
    TE_V_DREHZAHL: TEdit;
    TE_V_VC: TEdit;
    TE_V_VORSCHUB: TEdit;
    TE_V_REFPUNKT: TEdit;
    TE_V_VERSATZ: TEdit;
    TE_V_BREITE: TEdit;
    TE_V_AUFMASS: TEdit;
    TE_V_TEILE: TEdit;
    TE_V_UEBERWACHUNG: TEdit;
    TE_V_MATERIAL: TEdit;
    TE_VS: TEdit;
    TE_VQ: TEdit;
    Panel3: TPanel;
    LMDOneInstance1: TLMDOneInstance;
    Panel4: TPanel;
    TL_V_AUSSPANN: TLabel;
    TL_VE: TLabel;
    TL_VZ: TLabel;
    TE_V_AUSSPANN: TEdit;
    TE_VE: TEdit;
    TE_VZ: TEdit;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    XPManifest1: TXPManifest;
    TL_VA: TLabel;
    TE_VA: TEdit;
    BB_V_REFPUNKT: TBitBtn;
    TE_V_ANSCHLAG: TEdit;
    TL_V_ANSCHLAG: TLabel;
    TL_VX: TLabel;
    TE_VX: TEdit;
    BB_M27: TBitBtn;
    LMDImageList1: TLMDImageList;
    BB_V_MATERIAL: TBitBtn;
    Timer1: TTimer;
    StatusBar1: TStatusBar;
    procedure FormDestroy(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
    procedure Vorschau(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure LMDOneInstance1Custom(Sender: TObject);
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure EditKommaExit(Sender: TObject);
    procedure EditNumerischKeyPress(Sender: TObject; var Key: Char);
    procedure EditEnter(Sender: TObject);
    procedure BB_V_REFPUNKTClick(Sender: TObject);
    procedure TE_V_TEILEExit(Sender: TObject);
    procedure BB_V_REFPUNKTEnter(Sender: TObject);
    procedure BB_V_REFPUNKTExit(Sender: TObject);
    procedure BB_M27Click(Sender: TObject);
    procedure BB_M27Enter(Sender: TObject);
    procedure BB_M27Exit(Sender: TObject);
    procedure BitBtn1Enter(Sender: TObject);
    procedure BitBtn2Enter(Sender: TObject);
    procedure PageControl1Enter(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure BB_V_MATERIALClick(Sender: TObject);
    procedure BB_V_MATERIALEnter(Sender: TObject);
    procedure TE_V_DREHZAHLExit(Sender: TObject);
    procedure PageControl1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
  private
    { Private-Deklarationen }
    procedure WMEXITSIZEMOVE(var Msg : TWMSIZE); message WM_EXITSIZEMOVE;
    svWndProc : TWndMethod;
    procedure NewWndProc (var aMessage: TMessage);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  M27, Maschinenauswahl: Boolean;
  R: Integer;
  V_ANSCHLAG, V_DREHZAHL, V_VC, V_VORSCHUB, V_REFPUNKT, V_VERSATZ, V_BREITE: String;
  V_AUFMASS, V_TEILE, V_UEBERWACHUNG, V_MATERIAL, VS, VQ: String;
  V_AUSSPANN, VE, VZ, VA, VX, HUB, Ini_Name: String;
  V_WKSTLAENGE, V_HUBZUGABE, Maschtyp: String;
  K1, K2: String;
  aktControl: String;

implementation

uses Unit2, Unit3, Unit4, MTRMethoden;

{$R *.dfm}

procedure TForm1.WMEXITSIZEMOVE(var Msg: TWMSIZE);
var
  minhoehe: Integer;
begin
  BitBtn1.Top := ClientHeight - BitBtn1.Height - StatusBar1.Height - R * 2;
  BitBtn2.Top := BitBtn1.Top;
  PageControl1.Height := BitBtn1.Top - PageControl1.Top - R;
  Label1.Top := TabSheet1.Height - R - Label1.Height;
  Image1.Height := Label1.Top - R - Image1.Top;
  Image1.Width := Image1.Height;
  GroupBox3.Left := Image1.Left + Image1.Width + R;
  GroupBox4.Left := GroupBox3.Left;
  PageControl1.Width := GroupBox3.Left + GroupBox3.Width + Image1.Left
    + ( PageControl1.Width - TabSheet1.Width );
  minhoehe := GroupBox4.Top + GroupBox4.Height + Label1.Height * 5
    + BitBtn1.Height;
  if ClientHeight < minhoehe then
  begin
    ClientHeight := minhoehe;
    SendMessage(self.Handle, WM_EXITSIZEMOVE, 0, 0);
  end;
  if ClientHeight > Screen.WorkAreaHeight then
  begin
    ClientHeight := minhoehe;
    SendMessage(self.Handle, WM_EXITSIZEMOVE, 0, 0);
  end;
  ClientWidth := PageControl1.Left + PageControl1.Width + PageControl1.Left;
  BitBtn1.Left := ClientWidth div 4 - BitBtn1.Width div 2;
  BitBtn2.Left := ClientWidth div 4 * 3 - BitBtn2.Width div 2;
//Vorschaubereich
  GroupBox1.Left := R; GroupBox1.Top := R;
  GroupBox1.Height := TabSheet2.Height - GroupBox1.Top - R;
  GroupBox2.Top := GroupBox1.Top;
  GroupBox2.Height := GroupBox1.Height;
  GroupBox1.Width := TabSheet2.Width div 2 - 2 * GroupBox1.Left;
  GroupBox2.Width := GroupBox1.Width;
  GroupBox2.Left := TabSheet2.Width div 2 + GroupBox1.Left;
  Left := Screen.WorkAreaWidth div 2 - Width div 2;
  Top := Screen.WorkAreaHeight div 2 - Height div 2;
end;

procedure TForm1.NewWndProc (var aMessage: TMessage);
begin
  if ((aMessage.Msg = CN_KEYDOWN) and (aMessage.WParam = 13)) then aMessage.WParam := 9;
  svWndProc (aMessage);
end;
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#20

Re: Wie Entertaste bei Button abfangen?

  Alt 1. Apr 2006, 11:48
Die Online-Hilfe kann das viel besser erklären als ich.
Einfach mit der Maus die Fehlermeldung anklicken und F1 drücken...

Gruß Hawkeye
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 05:06 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