![]() |
nonVCL: Nachrichtenschleife
hoi,
luckie hat in seinen win32api tuts diese nachrichtenschleife:
Delphi-Quellcode:
dazu habe ich einige fragen...
function WndProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM):
LRESULT; stdcall; begin Result := 0; case uMsg of WM_CREATE: // Funktionen ausführen WM_DESTROY: PostQuitMessage(0); else Result := DefWindowProc(wnd,uMsg,wp,lp); end; end; 1: Wer oder was ruft diese function auf? MUSS sie WndProc heissen? 2: Was ist UINT? unsigned integer(?) und wieso nicht integer oder longint? |
Re: nonVCL: Nachrichtenschleife
Erstens ist das keine Nachrichtenschleife sondern die Nachrichtenfunktion, und wenn du die Tutorials weiter gelesen hättest, wüsstest du die Antwort zu 1
Die Nachrichtenfunktion (Fenster-Tutorial) Zuständig für Nachrichten innerhalb unseres Programms ist eine eigene Funktion. Die meisten Programme verwenden den Namen "WndProc" für diese Funktion, der auch so in der Microsoft-Hilfe zu finden ist. Womit schon mal klar ist, dass du den Namen selbst wählen kannst. "WndProc" ist so eine Art Standard, der sich in den meisten Programmen eingebürgert hat. Aufgerufen, oder besser gesagt: zugewiesen, wird sie entweder in der Fensterklasse:
Delphi-Quellcode:
oder bei Dialogen in der Funktion, die den Dialog erzeugt:
var
{Struktur der Fensterklasse} wc: TWndClassEx = ( cbSize : SizeOf(TWndClassEx); Style : CS_HREDRAW or CS_VREDRAW; lpfnWndProc : @WndProc; cbClsExtra : 0; cbWndExtra : 0; hbrBackground : COLOR_APPWORKSPACE; lpszMenuName : nil; lpszClassName : ClassName; hIconSm : 0; );
Delphi-Quellcode:
Aber das klärt sich meiner Ansicht nach eigentlich, wenn man die Tutorials liest.
DialogBox(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc);
Und zu 2) Die Deklaration entspricht eigentlich dem C-Vorbild:
Code:
wobei ich immer den von dir zitierten Teil bevorzuge, in dem "wp" und "lp" benutzt werden, denn Delphi unterscheidet nicht zwischen Groß- und Kleinschreibung, darum verwende ich als Variablennamen ungern bestehende Typennamen. Und laut "Windows.pas" steckt hinter UINT ein LongWord. Wenn du mal in die Hilfe von Delphi schaust, dann ist das IMHO bloß ein Cardinal-Wert. Integer und Longint verbieten sich damit wohl, weil sie vorzeichenbehaftet sind.
LRESULT CALLBACK WindowProc( HWND hwnd,
UINT uMsg, WPARAM wParam, LPARAM lParam ); |
Re: nonVCL: Nachrichtenschleife
hallo,
sorry hatte mich verschrieben, ich meine natürlich die funktion. Ich verstehe aber immernoch nicht wo diese funktion:
Delphi-Quellcode:
mit "WndProc(?, ?, ?, ?);" aufgerufen wird. Also ich sehe nur die funktion, aber nirgends ein aufruf
function WndProc(wnd: HWND; uMsg: UINT; wp: WPARAM; lp: LPARAM):
LRESULT; stdcall; begin Result := 0; case uMsg of WM_CREATE: // Funktionen ausführen WM_DESTROY: PostQuitMessage(0); else Result := DefWindowProc(wnd,uMsg,wp,lp); end; end; |
Re: nonVCL: Nachrichtenschleife
Hai Pseudemys Nelsoni,
schaue dir in dem Posting von Mathias mal die Beschreibung der Fensterklasse an. Dort wird als dritter Parameter ein Pointer auf die Funktion angegeben. |
Re: nonVCL: Nachrichtenschleife
open Ur Is
Zitat:
|
Re: nonVCL: Nachrichtenschleife
ok, danke *g*, vielleicht kommts ja noch *weiterles*
|
Re: nonVCL: Nachrichtenschleife
Ohne dich beleidigen zu wollen: aber vielleicht solltest du so ein Kapitel erst mal komplett lesen? Viele Fragen klären sich dann von selbst, und falls nicht, dann ist Luckie ja immer noch anwesend.
|
Re: nonVCL: Nachrichtenschleife
jo, aber ich weiss nicht ob ich ein thema eröffnet hätte, wenn ich mich nicht auch gefragt hätte was "UINT" heisst, das wird da nicht drin stehen
|
Re: nonVCL: Nachrichtenschleife
Wenn du mal einen Typ nicht kennst, versuch mal, mit der rechten Maustaste daraufzuklicken und dort "Deklaration suchen" auszuwählen. Alternativ gehts auch mit Strg+Linksklick. Dort siehst du dann die Typdefinition.
|
Re: nonVCL: Nachrichtenschleife
ah, danke, kann man auch direkt "LongWord" benutzen? statt UINT?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:15 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