Witam.
Ktoś podpowie jak w przykładnie:
Rzutowanie metod
type
TProcedureType = Procedure of Object;
ProcRelay : TProcedureType; przepisać do Event: TNotifyEvent ?
Event ?:= ProcRelay;
Witam.
Ktoś podpowie jak w przykładnie:
Rzutowanie metod
type
TProcedureType = Procedure of Object;
ProcRelay : TProcedureType; przepisać do Event: TNotifyEvent ?
Event ?:= ProcRelay;
Coś w ten deseń:
procedure CallMe;
begin
ShowMessage('CallMe');
end;
procedure TForm1.CallMe2;
begin
ShowMessage('CallMe2');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage('Button1Click');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
ProcRelay: TProcedureType;
Event: TNotifyEvent;
begin
@ProcRelay:= @CallMe; //lub jak nizej
//@ProcRelay:= @TForm1.CallMe2;
//@ProcRelay:= MethodAddress('Button1Click');
Event:= TNotifyEvent(ProcRelay);
Button2.OnClick:= Event;
end;
Tylko nie rozumiem po co to?
@kAzek jesteś pewny, ze to zadziała? Na pewno się skompiluje ale przecież TNotifyEvent
ma parametr a TProcedureType
już nie.
Dzięki stokrotne.
Ten pierwszy przykład też załapałem ale to się przyda dla innych. Szukałem po necie ale wszędzie twierdzą że takie procedury do wywołania po nazwie muszą być w sekcji published. A jak nie jest to się kompiluje tylko nie działa. To tak dla innych "szukających".
Po co?
Tworzę listę akcji różnych klas, jako ze klasy i część komponentów jest tworzone dynamicznie więc i obsługę chcę trochę zautomatyzować.
Więc w tej chwili:
Zamiast dwóch procedur dla Menu i Tray (plus inne) pomnożone przez ilość zdarzeń.. mam dwie linijki w pętli w jednej procedurze które z listy podpinają zdarzenia do np. TMenuItem.OnClick komponentów tworzonych dynamicznie na podstawie tej samej dynamicznej listy zdarzeń, na postawie stringów.
Brak ikonek na razie przeboleję.
Zastanawiam się nad wprowadzeniem do rekordu pozycji nazwa klasy i pobieranie bezpośrednio z jednej klasy a nie ściąganie do jednej z akcjami ale to już makijaż.
Można było zrobić Tliste ale wydaje mi się ze ta lista będzie zajmować mniej miejsca. Wszelkie sugestie mile widziane.
Niestety mam Delphi 2007 a dostałem info że dopiero od 2010 można pobierać listę procedur dla danej klasy w postaci stringów. Więc ten temat muszę odpuścić bo już by było całkiem z automatu.
edit:
Działa, działa.
function TkExProc.ProcMethod(const MethodName: string): TNotifyEvent;
var
ProcRelay : TProcedureType;
Method: TMethod;
begin
@ProcRelay:= MethodAddress(MethodName);
Method.Data:= nil;
Method.Code:= @ProcRelay;
Result:= TNotifyEvent(Method);
end;
edit:
był Warning ale już dodałem ProcRelay:= nil; i gra.