Definicja zdarzenia komponentu w osobnym module projektu

0

W glownym module zeby nie robic sobie balaganu przenosze funkcje / procedury do zewn modulu .
I nie ma problemu, lecz jezeli chce wywolac np OnKeyPress z automatu program tworzy procedure w glownym.
Czy da sie eventy wywalic do zewnetrznego modulu ?

1

Tak, w konstruktorze lub OnCreate:

OnKeyPress:[email protected];
0

Nie możesz przenieść ciał zdarzeń do osobnego modułu, bo muszą one być zdefiniowane w tym samym module, w którym zadeklarowana jest klasa; Możesz np. przypisać zdarzenie cudzego komponentu;

W każdym razie przypisywane inne zdarzenie musi być procedurą, zawartą w innej klasie; Nie możesz stworzyć sobie zwykłej procedury i ją przypisać, dlatego że potrzebujesz procedury typu TNotifyEvent.


Oczywiście można to obejść, tworząc sobie typ rekordu, zawierającego wskaźnik na metodę oraz wskaźnik na obiekt; Dzięki temu będziesz mógł podpiąć pod zdarzenie dowolną procedurę, egzystującą luzem, a nie wewnątrz innej klasy; Przykład poniżej;

Główny moduł z klasą formularza:

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

{...}

uses
  Unit2;

type
  TMethodPointer = packed record
    PMethod: Pointer;
    PObject: TObject;
  end;

procedure TForm1.FormCreate(Sender: TObject);
var
  mpOwnButtonClick: TMethodPointer;
begin
  mpOwnButtonClick.PMethod := @Unit2.OwnButtonClick;
  mpOwnButtonClick.PObject := nil;

  Button1.OnClick := TNotifyEvent(mpOwnButtonClick);
end;

Dodatkowy moduł:

unit Unit2;

interface

uses
  Windows;

procedure OwnButtonClick(Sender: TObject);

implementation

uses
  Unit1;

procedure OwnButtonClick(Sender: TObject);
begin
  MessageBox(Form1.Handle, 'OwnButtonClick works!', 'OwnButtonClick', MB_ICONINFORMATION);
end;

end.

W konstruktorze klasy formularza przypisywana jest do metody zwykła procedura, zawarta w dodatkowym module; Po kliknięciu w przycisk, zostanie wyświetlone okienko z wiadomością.

1 użytkowników online, w tym zalogowanych: 0, gości: 1