Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Enter wie bei OnKeyDown im Edit abfangen... (https://www.delphipraxis.net/28503-enter-wie-bei-onkeydown-im-edit-abfangen.html)

Dark Templar 25. Aug 2004 15:21


Enter wie bei OnKeyDown im Edit abfangen...
 
Ich will, dass ein bestimmter code ausgeführt wird, wenn der User in meinem Edit-Control die Eingabetaste drückt, so wie beim VCL OnKeyDown Event.

Die Message dazu wäre ja WM_KEYDOWN, aber wie muss ich die einsetzen, um auch wirklich nur die eingaben in dem bestimmten control abzufangen?

Nikolas 25. Aug 2004 15:59

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
Im OnKeyPress schauen, ob Key=#13 und los geht's.

nailor 25. Aug 2004 16:19

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
WinAPI!!!

Hansa 25. Aug 2004 16:28

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
Die WinApi braucht man für so was nun wirklich nicht. Wie Toxman schreibt : Im OnKeyPress abfangen !

Dark Templar 25. Aug 2004 17:03

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
Ähem... könnten sich die VCL Junkies mal bitte da heraushalten?
Das Edit-Control, dass mit der WinAPI erstellt wurde, ist in keiner Klasse wie TEdit zusammengefasst, demzufolge kann ich auch nicht auf Notification-Properties zurückgreifen.

Luckie 25. Aug 2004 20:10

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
Du musst das Edit Subclassen:
Delphi-Quellcode:
function EditWndProc(hEdit, uMsg, wParam, lParam: DWORD): DWORD; stdcall;
begin
  Result := 0;
  case uMsg of
    WM_CHAR:
      case Byte(wParam) of
        Byte('0')..Byte('9'),
          Byte(','), VK_DELETE,
          VK_BACK:
          CallWindowProc(OldWndProc, hEdit, uMsg, wParam, lParam);
      end;
  else
    Result := CallWindowProc(OldWndProc, hEdit, uMsg, wParam, lParam);
  end;
end;
Delphi-Quellcode:
OldWndProc := Pointer(SetWindowLong(GetDlgItem(hWnd, 103), GWL_WNDPROC, Integer(@EditWndProc)));
Obiges Fensterprozedur läst nur Ziffern in einem Edit zu.

Leuselator 25. Aug 2004 20:17

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
Hier werden Sie geholfen
Gruß

Dark Templar 27. Aug 2004 12:35

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
thx

Dark Templar 31. Aug 2004 15:22

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
Ich hab jetzt einen extra Typen für das EditControl entworfen, bei dem die WndProc als private deklariert wurde.

Der constructor soll nun die alte Proc auf die neue umstellen, was dann in etwa so aussehen sollte:

Delphi-Quellcode:
FOldWndProc:= Pointer(SetWindowLong(FHandle, GWL_WNDPROC, Integer(@Self.WndProc)));
Der Compiler meckert jetzt herum, weil er eine Variable beim dritten Parameter erwartet. Aber warum erkennt er die klasseninterne Funktion nicht an?

Vjay 31. Aug 2004 15:32

Re: Enter wie bei OnKeyDown im Edit abfangen...
 
Das lässt sich einfach erklären du kannst nur globale Funktionen (mit eindeutigen Adressen) verwenden. Schau dir mal die funktion allocatehWnd von Delphi an.

Diese erzeugt für eine Objekt-Funktion eine eindeutige Speicheradresse.
Somit ist es möglich dass 2 Objekte (mit Fenster) initialisiert werden


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:57 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