Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#10

Re: Problem mit Verfügbarkeit der Funktion

  Alt 17. Aug 2006, 12:10
Einer der Wege das ganze etwas zu verpacken (erster Schritt). Eine Unit mit einer Funktion die es ermöglicht eine Methode für jedes Fenster aufrufen zu lassen:
Delphi-Quellcode:
unit WndUtils;

interface

uses
  Windows;

type
  // Die Enumerierung wird abgebrochen wenn die Methode False zurückgibt.
  TEnumWndCallback = function(AWnd: HWND): Boolean of object;

function EnumWnd(ACallback: TEnumWndCallback): Boolean;

implementation

type
  PEnumWndParam = ^TEnumWndParam;
  TEnumWndParam = record
    Callback: TEnumWndCallback;
  end;

function EnumWndProc(AWnd: HWND; AParam: LPARAM): BOOL stdcall;
begin
  Result := PEnumWndParam(AParam).Callback(AWnd);
end;

function EnumWnd(ACallback: TEnumWndCallback): Boolean;
var
  Param: TEnumWndParam;
begin
  Param.Callback := ACallback;
  Result := EnumWindows(Pointer(Addr(EnumWndProc)), LPARAM(Addr(Param)));
end;

end.
In der benutzenden Klasse muss eine Methode vom Typ TEnumWndCallback implementiert werden:
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Classes, Forms, Controls, StdCtrls;

type
  TForm1 = class(TForm)
  //...
  private
    { Private-Deklarationen }
    function EnumWndCallback(AWnd: HWND): Boolean;
  //...
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

uses
  WndUtils;

//...

function TForm1.EnumWndCallback(AWnd: HWND): Boolean;
begin
  //...
  Result := True; // Enumerierung fortsetzen
end;

//...

end.
Dann muss der Hilfsfunktion nur die Methode übergeben werden:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  EnumWnd(EnumWndCallback);
end;
Dadurch wird dann TForm1.EnumWndCallback für jedes Fenster aufgerufen.

Der nächste Schritt der Kapselung wäre eine eigene Klasse, die in ihrer EnumWndCallback das Standardverhalten implementiert.
  Mit Zitat antworten Zitat