Jak rozwiązać ten błąd?

0

Robię sobie legalnie programik w WinAPI a tu jak wstawie obojętnie jaki komponent za pomocą dynamicznego tworzenia Create(nil); i chce do tego komponentu podpiąć zdarzenie OnActive := Aktywacja; to wyskakuje mi błąd typu:
Incompatible types: 'method pointer and regular procedure'

Jak to zrobić inną metodą? (Jak podpiąć zdarzenie?)

0

Ta procedura musi byś częścią jakiegoś obiektu. Swoją drogą, jak ty piszesz program winapi, korzystając z vcl? ;-)

0

W winapi nie ma komponentów w takim pojęciu... tam sie je tworerzy poleceniem CreateWindow... czy ty nie czytałeś żadnego artu o WA?

0

Zapewniam że nie jest częścią żadnej innej metody.
Chodzi mi tylko o tą obsługę tego zdarzenia gdyż jak bym dodał moduł Forms to by mi przybyło z 200 KB , a te połączenie komponentu z tym zdarzeniem mi jest do tego potrzebne.

PS. Aha zapomniałem o najważniejszym ten komponent co go tworzę za pomocą Create(nil) jest niewizualny i działa lecz nie mogę obsłużyć żadnego jego zdarzenia.

0

nie no... musiż wybrać VCL, lub Api... Nie ma połączeń^^

//jak to nie ma połączeń - to Ty lepiej poczytaj sobie o tym a nie pouczasz (błędnie) innych - m.M

0

Ale przecież komponent się tworzy i działa jak należy tylko nie mogę obsłużyć jego zdarzeń.

0

Zapewniam że nie jest częścią żadnej innej metody.

No, właśnie to ci napisałem... :) Musi to być częścią, tyle że nie metody, ale jakiegoś obiektu (klasy).

PS. Aha zapomniałem o najważniejszym ten komponent co go tworzę za pomocą Create(nil) jest niewizualny

To wcale nie sprawia, że twój program jest pisany w winapi :).

0

Może to tak jakoś rozwiązać: (wziĄłem to z książki :p )

uses TypInfo;

type
TMethod = record
    Code, Data: Pointer;
  end;

procedure SetMethodPropertyIfExists(AComponent: TComponent;
                                     APropName: String; AMethod: TMethod);
var
  PropInfo: PPropInfo;
begin
  PropInfo := GetPropInfo(AComponent.ClassInfo, APropName);
  if PropInfo <> NIL then
  begin
    if PropInfo^.PropType^.Kind = tkMethod
    then
      SetMethodProp(AComponent, PropInfo, AMethod);//tu jest błąd ale wszystko wygląda ok
  end;
end;

I potem coś takiego:
SetMethodPropertyIfExists(Test, 'OnActive', Aktywacja);
[glowa]

Naprawdę dla mnie jest to bardzo ważne. [glowa]

Jakoś np. to działa:
Komponent.OnActive := nil; :-8
a jak przypiszę obojętnie j;a:e zdarzenie wyskakuje błąd (stałe proporcje w moim zdarzeniu są identyczne jak w zdarzeniu OnActive w dodatku w proporcjach nie ma Sender co nie wymaga klasy bazowej

No na pewno ktoś wie jak przypisać zdarzenie do komponentu bez modułu Forms, pomóżcie prszę. :-(

0

Kolego, od paru postów piszę ci, że twoja procedura musi być częścią jakiejś klasy :). Zbuduj sobie najprostszą klasę:

type
TCosTam=class(TObject)
private
deklaracja procedury
end;

...

implementation

...

tutaj ta twoja procedura

0

Pomogło :d
Wielkie dzięki Thenkles [browar]
Widać że potrafisz pomagać ludziom w potrzebie. ;-)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.