AGB  ·  Datenschutz  ·  Impressum  







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

Memofelder und Tastaturbotschaften

Ein Thema von Marco Steinebach · begonnen am 12. Mai 2009 · letzter Beitrag vom 12. Mai 2009
Antwort Antwort
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#1

Memofelder und Tastaturbotschaften

  Alt 12. Mai 2009, 12:38
Hallo Zusammen,
Diese Memo-Felder machen mich noch wahnsinnig!
Mit einer Ereignisbehandlungsroutine für WM_KEYDOWN kann man ja, bekanntermaßen, , Tastaturereignisse abfangen und behandeln.
Das geht aber nur solange, wie kein Memo-Feld (Tmemo) auf der Form liegt, weil das offensichtlich, ungefragt, alle Messages abfängt.
Denn ohne Tmemo funktioniert untenstehende Behandlungsroutine einwandfrei, ist ein Tmemo da, tut sich mal gar nix.
Kann mir mal bitte jemand verraten, wo hier der Code begraben liegt?

Delphi-Quellcode:
  TForm1 = class(TForm)
    Memo1: TMemo;
    procedure WMKeyDown(var Message: TWMKeyDown); message WM_KEYDOWN;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;
....
procedure TForm1.WMKeyDown(var Message: TWMKeyDown);
begin
  inherited;
  case Message.CharCode of
    VK_RETURN: // ENTER pressed
      if (Message.KeyData and $1000000 <> 0) then
        // Test bit 24 of lParam
        ShowMessage('ENTER on numeric keypad')
      else
        ShowMessage('ENTER on Standard keyboard');
  end;
end;
Freundliche Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Memofelder und Tastaturbotschaften

  Alt 12. Mai 2009, 12:41
.. hast Du keyPreview der Form auf true gesetzt?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Memofelder und Tastaturbotschaften

  Alt 12. Mai 2009, 12:44
Geht trotzdem dann nicht. Das Problem ist, dass das Memo sich den Focus holt und dann alle Messages bearbeitet und nicht mehr weiterschickt. Du müsstest den Focus des Memos verlassen.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#4

Re: Memofelder und Tastaturbotschaften

  Alt 12. Mai 2009, 12:49
Zitat von quendolineDD:
Geht trotzdem dann nicht. Das Problem ist, dass das Memo sich den Focus holt und dann alle Messages bearbeitet und nicht mehr weiterschickt. Du müsstest den Focus des Memos verlassen.
*grummel, keine andere Chance? Ich müßte nämlich, während man sich im Memo befindet, zwischen den beiden Enter-Tasten unterscheiden. ;Kann man denn nicht irgendwo, bevor das memo von den Messages erfährt, die schon abfangen?
Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
quendolineDD

Registriert seit: 19. Apr 2007
Ort: Dresden
781 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Memofelder und Tastaturbotschaften

  Alt 12. Mai 2009, 12:51
Du kannst doch die Verarbeitungsroutinge des Memos verändern. Also müsstest von TMemo ableiten und dann dein eigenes Memo instanzieren.
Lars S.
Wer nicht mit der Zeit geht, geht mit der Zeit.
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#6

Re: Memofelder und Tastaturbotschaften

  Alt 12. Mai 2009, 13:42
Zitat von quendolineDD:
Du kannst doch die Verarbeitungsroutinge des Memos verändern. Also müsstest von TMemo ableiten und dann dein eigenes Memo instanzieren.
Tja, wenn ich nur wüßte, welche Routine die ganzen Botschaften abfängt?
Hiiilfe!
Marco Steinebach
  Mit Zitat antworten Zitat
taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#7

Re: Memofelder und Tastaturbotschaften

  Alt 12. Mai 2009, 13:55
.. die WinProc des Memos vielleicht?
Ralph
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
491 Beiträge
 
Delphi 5 Enterprise
 
#8

Re: Memofelder und Tastaturbotschaften

  Alt 12. Mai 2009, 21:38
Hallo Zusammen,
Wer also jemals ein Memofeld hat, und die Enter-Tasten unterscheiden will/muß, hier die Lösung.
Klasse ableiten
Delphi-Quellcode:
uses
  Windows, STDCTRLS, Messages;

type
  TTextfeldKomponente = Class (TMemo)
    public
      NumPadEnter: boolean; // true, wenn enter auf dem Nummernblock gedrückt wird.
      procedure WndProc(var Msg: TMessage); override;
  end;

implementation

procedure TTextfeldKomponente.WndProc(var Msg: TMessage);
begin
  if msg.msg = WM_KEYDOWN then
    if TWMKEYDOWN(msg).CharCode = VK_RETURN then
      NumPadEnter := (TWMKEYDOWN(msg).KeyData and $1000000 <> 0);
  inherited;
end;

end.
und dann kann im KeyDown des aufrufenden Formulars beispielsweise stehen:
Delphi-Quellcode:
  case key of
    VK_RETURN:
    begin
      if tf.NumPadEnter then
      begin
       // mach was, wenn enter auf dem Nummernblock gedrückt wurde...
Viel Spaß damit!
Marco
Marco Steinebach
  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 01:15 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