TWinControl - WndProc

0

Chce sobie zrobić obługę MIDI w osobnym unicie, często z tego korzystam i tak byłoby mi wygodniej. Główna forma służy mi teraz tylko do testowania, czy działa ok. No i mam dwa pytania.
1
W tym unicie MIDI mam zdefiniowaną klasę:

interface
type
  TMIDI = class(TControl)
// tu jest definicja
   public
    procedure WndProc(var Msg: TMessage); override;
  end;

var
  MIDI: TMIDI;

implementation

itd.

procedure TMIDI.WndProc(var Msg: TMessage);
begin
  // tu zajmuję się komunikatem
  inherited WndProc(Msg);
end;

Na końcu unita mam:

initialization
  MIDI := TMIDI.Create(Application);
finalization
  MIDI.Free;

Dostaję błąd przy zamykaniu programu (Access Violation at Address = 00000000). Czy to oznacza, że Application sama zwalnia ten obiekt? Jak zmienię AOwner na nil - jest ok.

2
WndProc użyte z główną formą działa, a z tą utworzoną przeze mnie klasą w osobnym unicie nie :( To znaczy, nie przejmuje żadnych komunikatów. Próbowałem w sekcji initalization zrobić tak:

MIDI := TMIDI.Create(Application.MainForm);

ale też nic nie daje. Zatem moje drugie pytanko brzmi - w jaki sposób przechwytywać komunikaty poza główną formą?

Mam nadzieję, że nie zamotałem... ;)

Pozdrowienia,
Jacek

0
initialization
  MIDI := TMIDI.Create(Application);
finalization
  MIDI.Free;

Dostaję błąd przy zamykaniu programu (Access Violation at Address = 00000000). Czy to oznacza, że Application sama zwalnia ten obiekt? Jak zmienię AOwner na nil - jest ok.

Obiekt Application jest zwalniany wczesniej, niż ty wywołuejsz MIDI.Free, a ponieważ MIDI jest obiektem należącym do Application to zostaje razem z Application zwolniony.

Pomiń Free, albo zrób

MIDI := TMIDI.Create(Nil);
0

Dziękuję. Z tym drugim problemem też sobie już poradziłem przesyłając komunikaty MIM_DATA i MIM_LONGDATA do tej klasy TMIDI. Nie jest dokładnie tak, jak chciałem, ale działa. Próbowałem przypisywać WindowProc do procedury w klasie TMIDI, ale wtedy okna nie funkcjonowały poprawnie, mimo iż dalej miałem inherited WndProc.

Pozdrawiam,
Jacek

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