Programmierung > Delphi

Nachrichtenschleife

Beschreibung

Wenn man auf Nachrichten reagieren will überschreibt man die procedure wndproc. Das kann bei der Fehlersuche etwas nervig werden, wenn man in einzelnen Schritten duch den Quelltext gehen will und dabei andauernd durch die Abarbeitung dieser Procedure unterbrochen wird. Das bedeutet, die Nachrichtenschleife soll im Debug-Modus nicht überschrieben werden. Dazu kann man einen Schalter verwenden.

Schalter für den Debug-Modus

Dieser wird in der Hauptunit im Interface eingefügt:

unit uMain;

interface

{ $Define Debug}  // Für Debug-Modus erstes Leerzeichen entfernen.

Mit dem Leerzeichen handelt es sich einfach nur um einen Kommentar.

unit uMain;

interface

{$Define Debug}  // Für Debug-Modus erstes Leerzeichen entfernen.

Ohne Leerzeichen ist es ein Compilerschalter.

In Delphi 7 habe ich keine andere Möglichkeit gefunden. In neueren Delphi-Versionen sollte es diese geben, da dort Ordner für Debug und Release angelegt werden.

Deklaration

type
  TfrmMain = class(TForm)
    ...
  public
    ...
    {$IfNDef Debug}
    procedure WndProc(var Msg: TMessage); override;
    {$EndIf}
    ...
  end;

Da der Schalter auf das Überschreiben der Nachrichtenschleife wirken soll, wird vor ihrer Deklaration ein {$IfNDef Debug} eingefügt. Das bedeutet "Wenn der Schalter Debug nicht deklariert ist". Hinter der Deklaration wird {$EndIf} eingefügt. Das ist das Ende der If-Anweisung. Ist der Schalter Debug gesetzt, wird die Deklaration beim Kompilieren nicht berücksichtigt.

Quelltext

{$IfNDef Debug}
procedure TfrmMain.WndProc(var Msg: TMessage);
begin
  ...
end;
{$EndIf}

Da oben die Deklaration der Procedure von der IfNDef-Anweisung eingeschlossen wurde, muss auch die gesamte Procedure davon eingeschlossen werden. Sonst kommt es beim Kompilieren zu Fehlern.

Ergebnis

Wenn der Schalter Debug nicht deklariert ist, wird die Nachrichtenschleife abgearbeitet. Wenn er deklariert ist, wird nur die Standardnachrichtenschleife im Hintergrund abgearbeitet.