AGB  ·  Datenschutz  ·  Impressum  







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

nonVCL: Nachrichtenschleife

Ein Thema von Pseudemys Nelsoni · begonnen am 22. Feb 2004 · letzter Beitrag vom 22. Feb 2004
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 07:06
hoi,

luckie hat in seinen win32api tuts diese nachrichtenschleife:

Delphi-Quellcode:
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;
dazu habe ich einige fragen...


1: Wer oder was ruft diese function auf? MUSS sie WndProc heissen?
2: Was ist UINT? unsigned integer(?) und wieso nicht integer oder longint?
Mario
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#2

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 07:42
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:
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;
  );
oder bei Dialogen in der Funktion, die den Dialog erzeugt:
DialogBox(hInstance, MAKEINTRESOURCE(100), 0, @dlgfunc); Aber das klärt sich meiner Ansicht nach eigentlich, wenn man die Tutorials liest.

Und zu 2) Die Deklaration entspricht eigentlich dem C-Vorbild:
Code:
LRESULT CALLBACK WindowProc(          HWND hwnd,
    UINT uMsg,
    WPARAM wParam,
    LPARAM lParam
);
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.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#3

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 07:50
hallo,

sorry hatte mich verschrieben, ich meine natürlich die funktion.

Ich verstehe aber immernoch nicht wo diese funktion:

Delphi-Quellcode:
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;
mit "WndProc(?, ?, ?, ?);" aufgerufen wird. Also ich sehe nur die funktion, aber nirgends ein aufruf
Mario
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 07:55
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.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#5

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 07:56
open Ur Is

Zitat von MathiasSimmack:
Aufgerufen, oder besser gesagt: zugewiesen, wird sie entweder in der Fensterklasse:
Delphi-Quellcode:
var
  {Struktur der Fensterklasse}
  wc: TWndClassEx = (
    { ... }
    lpfnWndProc : @WndProc;
    { ... }
  );
Aber das steht auch exakt so in den Tutorials drin. Ich weiß nicht womit du anfängst, und ich will dich auch nicht kritisieren, aber schau mal unter "Fenster und Controls -> Fenster -> Die Nachrichtenfunktion". Da steht´s gleich ganz oben.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#6

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 08:01
ok, danke *g*, vielleicht kommts ja noch *weiterles*
Mario
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 08:53
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.
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#8

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 09:18
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
Mario
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 13:25
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.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#10

Re: nonVCL: Nachrichtenschleife

  Alt 22. Feb 2004, 17:47
ah, danke, kann man auch direkt "LongWord" benutzen? statt UINT?
Mario
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:33 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