Thread View: pl.comp.lang.delphi
20 messages
20 total messages
Started by mwitkowski2b
Tue, 13 Nov 2018 22:16
dispintertface - Jak się dostać do metod
Author: mwitkowski2b
Date: Tue, 13 Nov 2018 22:16
Date: Tue, 13 Nov 2018 22:16
36 lines
2734 bytes
2734 bytes
(Delphi 2007)
Zaimportowałem pliki TLB, miedzy innymi mam taki DispInterface (fragment):
_ISearchSessionEvents = dispinterface
['{E421B6DF-86ED-47ED-8EFE-54D69BFA4D7D}']
...
procedure Progress(Progress: Integer; const pSearchSession: ISearchSession);
dispid 1;
...
procedure TrackAvailable(Type_: SearchTypeEnum; const pResult: ITrack; const
pSearchSession: ISearchSession); dispid 4;
...
end;
Jest to fragment API do obsługi kontrolki ActiveX. Kontrolka jest zainstalowana wszystko już działa. Muszę wykonać operację wykorzystującą ww. dispinterface. Metody Progress i TrackAvailable są wykonywane automatycznie w przypadku gdy poszukiwanie przyniesie oczekiwany efekt.
Nie wiem jak mam się do nich dostać? Mam przykłady w C#, gdzie te metody są podpięte do zdarzeń, ale muszę to przenieść do Delphi.
Nie można zrobić tak:
Interface2 = interface(_ISearchSessionEvents)
end;
ani tak:
Interface3 = class(TInterfacedObject, _ISearchSessionEvents)
end;
Próbowałem również podstawić swoją metodę np. MyTrackAvailable
procedure My_TimelineAvailable(Type_: SearchTypeEnum; const pResult: ITimeline; const pSearchSession: ISearchSession);
a potem w programie:
var
obi: _ISearchSessionEvents;
i dalej:
obi.TrackAvailable := My_TrackAvailable;
też nic z tego.
Proszę o wskazówkę, jak się dostać do tych metod żeby móc odczytać przesłąne do nich parametry z ich wnętrza?
Pozdrawiam
MW
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Thu, 15 Nov 2018 07:03
Date: Thu, 15 Nov 2018 07:03
43 lines
2435 bytes
2435 bytes
Po pierwsze pokaż cały plik TLB
Po drugie zazwyczaj w zaimportowanym pliku jest metoda, która tworzy
interfejs.
Jeżeli nie ma to musisz ustalić pod jaką nazwą klasa jest zarejestrowana
i wtedy normalnie jak za każdą kontrolką ActivX.
Z calkiem robi się tak
var
openoffice : Variant;
OpenDesktop : Variant;
LoadParams : Variant;
monclasseur : Variant;
document,cellule,mafeuille,nb : Variant;
v:real;
oFormats,oLocale : variant;
nNumKey, i : integer;
Sheets, Sheet, MyStruct, Cell ,arkusz : variant;
begin
if VarIsEmpty(OpenOffice) then
try
OpenOffice := CreateOleObject('com.sun.star.ServiceManager');
except
Raise Exception.Create('Nie mogę pobrać ServiceManager OpenOffice');
Exit;
end;
OpenDesktop :=
OpenOffice.createInstance('com.sun.star.frame.Desktop');//
'private:factory/scalc',
LoadParams := VarArrayCreate([0, -1], varVariant);
if ((EditNIP.text[1]='P') AND
(EditNIP.text[2]='L'))OR(EditNIP.text[1] in ['0'..'9']) then
begin
document :=
openDesktop.LoadComponentFromURL('file:///'+ExtractFilePath(Application.ExeName)+'/wezwaniezagraniczne.xls','_blank',
0,LoadParams);
end else
begin
document :=
openDesktop.LoadComponentFromURL('file:///'+ExtractFilePath(Application.ExeName)+'/wezwaniezagraniczne.xls','_blank',
0,LoadParams);
end;
Re: dispintertface - Jak się dostać do metod
Author: mwitkowski2b
Date: Thu, 15 Nov 2018 09:49
Date: Thu, 15 Nov 2018 09:49
68 lines
5009 bytes
5009 bytes
Może rzeczywiście zbyt mało opisałem, przepraszam. Już to naprawiam.
Mam API, dzięki któremu łączę się kamerą i otrzymuję z niej obraz. SDK to zestaw plików DLL oraz API oparte na klasach i interfejsach. Obraz jest
prezentowany w kontrolce ActiveX (i to jest mój OLE server).
Wczytuje się pliki *.TLB i powstaje całe API. Dysponuję działającymi przykładami w C#, które należy przenieść do Delphi (D2007). Oczywiście nieco inne API powstaje w C#, a nieco inne w Delphi.
Interesuje mnie fragment, za pomocą którego przeprowadza się wyszukiwanie historycznych nagrań (kamera ma swoja pamięć). W C# jest to zrealizowane następująco:
Jest obiekt za pomocą którego wykonuje się poszukiwanie:
SearchSession f_trackSearch;
przy czym typ SearchSession to typ dzieddziczący po 2 interfejsach:
public interface SearchSession : ISearchSession,
_ISearchSessionEvents_Event
drugi z nich ma metody istotne dla procesu poszukiwania:
public interface _ISearchSessionEvents_Event
{
...
// czy już wszystko znalazl, wtedy Progress = 100
event _ISearchSessionEvents_ProgressEventHandler Progress;
// jeśli są dostępne nagrania to program tu wchodzi, można je pobrać
event _ISearchSessionEvents_TrackAvailableEventHandler TrackAvailable;
..
}
W C# akcja jest prosta:
tworzony jest obiekt do poszukiwania:
f_trackSearch = mdb.CreateSearchSession(steTrack);
a metody z interfejsu _ISearchSessionEvents_Event są podpięte jako zdarzenia:
f_trackSearch.TrackAvailable += new Bosch.VideoSDK.GCALib._ISearchSessionEvents_TrackAvailableEventHandler(OnTrackAvailable);
f_trackSearch.Progress += new Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(OnProgress);
uruchom poszukiwanie:
f_trackSearch.Start();
Teraz przenoszę ww. kod do Delphi.
Mam obiekt za pomocą ktorego wykonuje się poszukiwanie:
f_trackSearch: SearchSession;
przy czym SearchSession to interfejs:
ISearchSession = interface(IDispatch)
['{7EA4139D-5EFE-4BD2-9EF7-211F199DA18C}']
...
end;
W C# mieliśmy:
public interface SearchSession : ISearchSession, _ISearchSessionEvents_Event
a więc brakuje nam podpięcia _ISearchSessionEvents_Event, który zawiera istotne metody Progress() i TrackAvailable()
w powstałym w Delphi po wczytaniu plików *.TLB API jest odpowiadający mu interfejs (istotny fragment):
_ISearchSessionEvents = dispinterface
['{E421B6DF-86ED-47ED-8EFE-54D69BFA4D7D}']
procedure Progress(Progress: Integer; const pSearchSession:
ISearchSession); dispid 1;
procedure TrackAvailable(Type_: SearchTypeEnum; const pResult: ITrack;
const pSearchSession: ISearchSession); dispid 4;
...
end;
Proszę zauważyć, że jest to nie jest interface tylko dispintertface.
Teraz analogiczny kod jak w c#.
Tworzymy obiekt poszukiwania:
f_trackSearch := mdb.CreateSearchSession(steTrack);
dla
var
f_dispinterface: _ISearchSessionEvents;
// interfejs z naszymi brakującymi metodami Progress i TrackAvailable
// wykonujemy sprzężenie IDispatch z dispinterface wykonując:
f_dispinterface := _ISearchSessionEvents(f_trackSearch);
I w tym miejscy jest pytanie. Co zrobić, aby wykonały się metody z interfejsu _ISearchSessionEvents: Progress() i TrackAvailable()?
W jaki sposób podpiać je do moich obiektów? Jak z nich skorzytać?
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Thu, 15 Nov 2018 13:15
Date: Thu, 15 Nov 2018 13:15
34 lines
2227 bytes
2227 bytes
Ale interfejs musisz jakoś utworzyć, prawda?
>W C# akcja jest prosta:
>tworzony jest obiekt do poszukiwania:
f_trackSearch = mdb.CreateSearchSession(steTrack);
to jest tworzenie w C# (wywoływanie konstruktora który zwraca jakiś typ)
A jak to robisz w Delphi?
w Delphi robisz tak
>f_trackSearch := mdb.CreateSearchSession(steTrack);
tylko co to jest "mdb" i gdzie zostało utworzone?
w C# aby użyć konstruktora "wystarczy że jego kod jest widoczny" (to
oczywiście uproszczenie).
W Delphi musisz mieć obiekt "mdb" aby użyć jego metody (to też
uproszczenie).
Nie pokazujesz całego kodu więc trudno pomóc.
Na pewno nie masz interfejsu i metody tworzącej w pliku TLB?
coś w stylu
...
CLASS_TKsi: TGUID = '{097871C6-1C49-401D-81F7-124DA3AE2CD2}';
...
class function CoTKsi.Create: _Object;
begin
Result := CreateComObject(CLASS_TKsi) as _Object;
end;
może spróbuj tworzenia z TGUID tak jak powyżej
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Thu, 15 Nov 2018 13:28
Date: Thu, 15 Nov 2018 13:28
13 lines
1655 bytes
1655 bytes
Spróbuj http://www.delphigroups.info/2/b2/264416.html var Disp: IDispatch; MyDispinterface: ITMyAutoObjDisp; begin Disp := CreateComObject(CLASS_TMyAutoObj) as IDispatch; MyDispinterface := ITMyAutoObjDisp(Disp); kolejne naprowadzenia http://www.delphigroups.info/2/ba/258415.html http://delphidabbler.com/tips/216 <--- od tego zacznij
Re: dispintertface - Jak się dostać do metod
Author: mwitkowski2b
Date: Thu, 15 Nov 2018 13:45
Date: Thu, 15 Nov 2018 13:45
9 lines
2183 bytes
2183 bytes
Oczywiście, fragment o którym wspominam, to jest w momencie gdy już jestem podpięty do serwera COM. Jest w mdb. Po wykonaniu f_trackSearch := mdb.CreateSearchSession(steTrack); oraz (dla var f_dispinterface: _ISearchSessionEvents;) f_dispinterface := _ISearchSessionEvents(f_trackSearch); mogę napisać np.: f_dispinterface.Progress() i z tego punktu widzenia Twoja rada jak najbardziej działa. Tu masz oczywiście rację, tylko niestety u mnie np. Progress to jest (deklaracja): Progress(Progress: Integer; const pSearchSession: ISearchSession); dispid 1; Ja musze odczytać wartość parametrów Progres i ISearchSession, i na ich podstawie podjąć odpowiednią akcję. Wywołanie tej metody mi nie wystarczy. Musze się dostać do środka tych metod, czyli jakoś je podpiąć, przeładować, no właśnie na to nie mam pomysłu. :)
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Fri, 16 Nov 2018 08:47
Date: Fri, 16 Nov 2018 08:47
6 lines
1291 bytes
1291 bytes
W dniu 15-11-2018 o 14:45, mwitkowski2b@gmail.com pisze: > pSearchSession: ISearchSession pSearchSession: ISearchSession Czy dobrze zrozumiałem, że Ty potrzebujesz Implementacji ISearchSession ? Jeżeli tak to go zaimplementuj.
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Fri, 16 Nov 2018 08:50
Date: Fri, 16 Nov 2018 08:50
18 lines
1919 bytes
1919 bytes
W dniu 16-11-2018 o 09:47, konsul41@wp.pl pisze:
> W dniu 15-11-2018 o 14:45, mwitkowski2b@gmail.com pisze:
>> pSearchSession: ISearchSession
> pSearchSession: ISearchSession
> Czy dobrze zrozumiałem, że Ty potrzebujesz Implementacji ISearchSession ?
>
> Jeżeli tak to go zaimplementuj.
_ISearchSessionEvents = dispinterface
['{E421B6DF-86ED-47ED-8EFE-54D69BFA4D7D}']
...
procedure Progress(Progress: Integer; const pSearchSession:
ISearchSession);
dispid 1;
Podsumujmy.
Możesz wywołać metod Progressi musisz podać mu 2 parametry i
potrzebujesz implementację interfejsu ISearchSession tak?
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Fri, 16 Nov 2018 11:21
Date: Fri, 16 Nov 2018 11:21
7 lines
1757 bytes
1757 bytes
> Ja musze odczytać wartość parametrów Progres i ISearchSession, i na ich podstawie podjąć odpowiednią akcję. Wywołanie tej metody mi nie wystarczy. Musze się dostać do środka tych metod, czyli jakoś je podpiąć, przeładować, no właśnie na to nie mam pomysłu. :) Odczytać czy dostarczyć? To jest ważne ponieważ, może być sytuacja, że Metoda wykorzystuje parametr który podajesz do jakichś celów i to ty masz je utworzyć. Wtedy to ty implementujesz interfejs.
Re: dispintertface - Jak się dostać do metod
Author: Roman Tyczka
Date: Fri, 16 Nov 2018 11:45
Date: Fri, 16 Nov 2018 11:45
14 lines
1261 bytes
1261 bytes
On Tue, 13 Nov 2018 14:16:06 -0800 (PST), mwitkowski2b@gmail.com wrote: > (Delphi 2007) > Zaimportowałem pliki TLB, miedzy innymi mam taki DispInterface (fragment): [...] > Proszę o wskazówkę, jak się dostać do tych metod żeby móc odczytać przesłąne do nich parametry z ich wnętrza? Opublikuj tego Video_SDK_UserGuide.pdf ;-) Bet tego nikt Ci nie pomoże :-) -- pozdrawiam Roman Tyczka
Re: dispintertface - Jak się dostać do metod
Author: mwitkowski2b
Date: Fri, 16 Nov 2018 12:08
Date: Fri, 16 Nov 2018 12:08
7 lines
1834 bytes
1834 bytes
Oprogramowanie i dokumentację można bez problemu ściągnąć ze strony producenta. W "SDK Downloads" wybieramy pliki msi (najlepiej 64 bit dla c#) https://ipp.boschsecurity.com/en/news-events/product-news/video-sdk-6-04/video-sdk Po zainstalowaniu w katalogu : C:\Program Files\Bosch\VideoSDK6\Documentation jest plik z dokumentacją: Video SDK Interface Definition.chm Ale uprzedzam, że tego jest dość sporo.
Re: dispintertface - Jak się dostać do metod
Author: mwitkowski2b
Date: Fri, 16 Nov 2018 12:13
Date: Fri, 16 Nov 2018 12:13
114 lines
6654 bytes
6654 bytes
Jeszcze raz podsumowanie:
Cel, który chcę osiągnąć to przeniesienie kodu z C# do Delphi.
W C# wygląda to tak, że jeżeli chciałbym sprawdzić jakiego rodzaju dane są przechowywane na karcie pamięci, to wykonuję to w następujący sposób (celowo zamieszczam tylko wybrane fragmenty kodu żeby nie komplikować problemu dodatkowo. Przyjmijmy, że mam już połączenie, widzę obraz, teraz muszę tylko z istniejącej sesji połączenia pobrać te dodatkowe informacje)
Najpierw analiza w C#:
[1]
private void StartTrackSearch(Bosch.VideoSDK.MediaDatabase.MediaDatabase mdb)
{
if(mdb != null)
{
// do f_trackSearch poniższa metoda zwraca mi obiekt klasy SearchSession
f_trackSearch = mdb.CreateSearchSession(Bosch.VideoSDK.MediaDatabase.SearchTypeEnum.steTrack);
// podepnij obsluge zdarzeń TrackAvailable() i Progress()
f_trackSearch.TrackAvailable += new Bosch.VideoSDK.GCALib._ISearchSessionEvents_TrackAvailableEventHandler(OnTrackAvailable);
f_trackSearch.Progress += new Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(OnProgress);
// uruchom mechanizm poszukiwania, UWAGA: automatycznie wywoła OnTrackAvailable i OnProgress
f_trackSearch.Start();
}
}
f_trackSearch jest typu public Bosch.VideoSDK.MediaDatabase.SearchSession, a dokładnie:
public interface SearchSession : ISearchSession, _ISearchSessionEvents_Event
{
}
przy czym
public interface ISearchSession
{
...
}
a _ISearchSessionEvents_Event zawiera te dwa potrzebne do obsługi poszukiwania zdarzenia
public interface _ISearchSessionEvents_Event
{
...
event _ISearchSessionEvents_ProgressEventHandler Progress;
event _ISearchSessionEvents_TrackAvailableEventHandler TrackAvailable;
...
}
ich realizacja jest następująca (fragment):
[2]
private void OnProgress(int progress, Bosch.VideoSDK.MediaDatabase.SearchSession searchSession)
{
if (progress == 100)
{
// zatrzymaj proces poszukiwania nagrań
f_trackSearch.Stop();
// odepnij obsługę zdarzeń
f_trackSearch.TrackAvailable -= new Bosch.VideoSDK.GCALib._ISearchSessionEvents_TrackAvailableEventHandler(OnTrackAvailable);
f_trackSearch.Progress -= new Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(OnProgress);
...
}
}
Najważniejsze jest wywołanie OnTrackAvailable(), jeżeli w karcie pamięci znajduje się nagranie to poniżej jest ono w track i wstawiane jest do listy f_tracks
(cały kod):
[3]
private void OnTrackAvailable(Bosch.VideoSDK.MediaDatabase.SearchTypeEnum se, Bosch.VideoSDK.MediaDatabase.Track track, Bosch.VideoSDK.MediaDatabase.SearchSession searchSession)
{
f_tracks.Add(track);
}
ta lista to:
public System.Collections.Generic.List<Bosch.VideoSDK.MediaDatabase.Track> f_tracks = new System.Collections.Generic.List<Bosch.VideoSDK.MediaDatabase.Track>();
przyjmijmy, że to jest:
lista typu Track, gdzie klasa Track ma już wszystkie informacje o nagraniu, stąd można pobrać nazwę, id, i samo nagranie
---------------------------------------------------------------
No i teraz próba przeniesienia tego fragmentu do Delphi.
Wywołujemy StartTrackSearch()
[A]
procedure MBosch.StartTrackSearch(mdb: MediaDatabase);
begin
f_SearchSession := mdb.CreateSearchSession(steTrack);
f_dispinterface := _ISearchSessionEvents(f_SearchSession);
f_SearchSession.Start(3000);
end;
Przy czym f_SearchSession: SearchSession i tutaj podobnie jak w c# SearchSession = ISearchSession
ISearchSession = interface(IDispatch)
...
end;
natomiast f_dispinterface: _ISearchSessionEvents;
_ISearchSessionEvents = dispinterface
['{E421B6DF-86ED-47ED-8EFE-54D69BFA4D7D}']
...
procedure Progress(Progress: Integer; const pSearchSession: ISearchSession); dispid 1;
procedure TrackAvailable(Type_: SearchTypeEnum; const pResult: ITrack;
const pSearchSession: ISearchSession); dispid 4;
...
end;
Jak widać próba przeniesienia tego konkretnie fragmentu kodu z c# natrafia na podstawowy problem, taki, że nie możemy w łatwy sposób podpiąć obsługi zdarzeń Progress() i TrackAvailable(). Metody te (ale nie zdarzenia) implementuje dispinterfejs _ISearchSessionEvents.
Jednak kod z [A] (StartTrackSearch(mdb: MediaDatabase)) nie sprawi, że można pobrać z nich wartości.
Rzeczywiście moglibyśmy te metody wywołać ręcznie:
// tutaj mogło by być np.
f_dispinterface.Progress(...);
ale to nie ma sensu, ponieważ w C# poprzez podpięcie zdarzeń wystarczyło użyć
f_trackSearch.Start();
żeby te zdarzenia uruchomiły się automatycznie. W Delphi takiej konstrukcji nie mamy do dyspozycji. Czyli potrzebny jest teraz kod który umożliwi mi odczytanie wartości już po wywołaniu Progress() i TrackAvailable()
Proszę zauważyć, że w [A], we fragmencie
f_SearchSession := mdb.CreateSearchSession(steTrack);
my otrzymujemy już w f_SearchSession obiekt typu ISearchSession
a kod
f_dispinterface := _ISearchSessionEvents(f_SearchSession);
"nakłada na niego" wiedzę o Progress() i TrackAvailable()
Tylko co dalej? Co zrobić żebyśmy mogli otrzymać kod jak w C# w [2] i [3]
Pozdrawiam
MW
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Fri, 16 Nov 2018 12:37
Date: Fri, 16 Nov 2018 12:37
16 lines
2033 bytes
2033 bytes
> Jak widać próba przeniesienia tego konkretnie fragmentu kodu z c# natrafia na podstawowy problem, taki, że nie możemy w łatwy sposób podpiąć obsługi zdarzeń Progress() i TrackAvailable(). Metody te (ale nie zdarzenia) implementuje dispinterfejs _ISearchSessionEvents. To są callback czyli funkcja jest wołana gdy nastąpi jakieś zdarzenie(poprawcie jeżeli się mylę). Sprawdź czego żąda Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(OnProgress); jako OnProgress. I tak spreparuj aby nie krzyczał błędami. private void OnProgress(int progress, Bosch.VideoSDK.MediaDatabase.SearchSession searchSession) ... zakładam że ONProgress jest metodą jakiejś klasy, więc trzeba nie jawnie przekazać parametr self.
Re: dispintertface - Jak się dostać do metod
Author: Roman Tyczka
Date: Fri, 16 Nov 2018 12:41
Date: Fri, 16 Nov 2018 12:41
38 lines
2182 bytes
2182 bytes
On Fri, 16 Nov 2018 04:13:01 -0800 (PST), mwitkowski2b@gmail.com wrote:
Chłopie, Ty tak mieszasz i bełkoczesz, że za cholerę nie mogę się w tym
połapać :-)
Np. poniżej:
> Przy czym f_SearchSession: SearchSession i tutaj podobnie jak w c# SearchSession = ISearchSession
> ISearchSession = interface(IDispatch)
> ...
> end;
No i co niby do anielci ktoś ma napisać, skoro ukrywasz to co w tych
kropkach jest? Wszak tam powinny być te zdarzenia, do których możesz
podpiąć swoje metody obsługi analogicznie jak w C#.
Czyli interfejs powstały po wywołaniu mdb.CreateSearchSession(), u Ciebie
zaszyty pod zmienną f_SearchSession, powinien oferować to co oferuje w C#:
f_trackSearch.TrackAvailable += new
Bosch.VideoSDK.GCALib._ISearchSessionEvents_TrackAvailableEventHandler(OnTrackAvailable);
f_trackSearch.Progress += new
Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(OnProgress);
czyli po delphiowemu:
f_trackSearch.TrackAvailable := MojaMetodaOnAvailable;
f_trackSearch.Progress := MoJaMetodaProgress;
A co do SDK, skoro trzeba je instalować to wrzuć gdzieś do sieci samego
helpa i daj linka, nikt nie będzie syfu instalował na swoim kompie.
--
pozdrawiam
Roman Tyczka
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Fri, 16 Nov 2018 12:51
Date: Fri, 16 Nov 2018 12:51
46 lines
2972 bytes
2972 bytes
W dniu 16-11-2018 o 13:41, Roman Tyczka pisze: > On Fri, 16 Nov 2018 04:13:01 -0800 (PST), mwitkowski2b@gmail.com wrote: > > > Chłopie, Ty tak mieszasz i bełkoczesz, że za cholerę nie mogę się w tym > połapać :-) > > Np. poniżej: > >> Przy czym f_SearchSession: SearchSession i tutaj podobnie jak w c# SearchSession = ISearchSession >> ISearchSession = interface(IDispatch) >> ... >> end; > > > No i co niby do anielci ktoś ma napisać, skoro ukrywasz to co w tych > kropkach jest? Wszak tam powinny być te zdarzenia, do których możesz > podpiąć swoje metody obsługi analogicznie jak w C#. > > Czyli interfejs powstały po wywołaniu mdb.CreateSearchSession(), u Ciebie > zaszyty pod zmienną f_SearchSession, powinien oferować to co oferuje w C#: > > f_trackSearch.TrackAvailable += new > Bosch.VideoSDK.GCALib._ISearchSessionEvents_TrackAvailableEventHandler(OnTrackAvailable); > f_trackSearch.Progress += new > Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(OnProgress); > > czyli po delphiowemu: > > f_trackSearch.TrackAvailable := MojaMetodaOnAvailable; > f_trackSearch.Progress := MoJaMetodaProgress; raczej f_trackSearch.Progress := Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(MoJaMetodaProgress); Prawdopodobnie metoda Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler coś robi jeszcze z uchwytem. Tylko zastanawia mnie operator += w C# to jest przecież przypisanie z dodawaniem czyli PSEUDOKOD f_trackSearch.Progress := f_trackSearch.Progress+Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(MoJaMetodaProgress);
Re: dispintertface - Jak się dostać do metod
Author: mwitkowski2b
Date: Fri, 16 Nov 2018 13:11
Date: Fri, 16 Nov 2018 13:11
5 lines
1635 bytes
1635 bytes
Panowie, mnie się wydawało, że włożyłem trochę pracy, żeby możliwie najprościej wyjaśnić, o co mi chodziło. Do tego na prawdę nie jest potrzebna znajomość całości problemu. W istocie to się sprowadza do pytania jak przenieść obsługę zdarzeń do interfejsów. Jestem nieco zaskoczony ocena mojego podejścia. Tym niemniej dziękuje za pomoc. Pozdrawiam MW
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Fri, 16 Nov 2018 13:18
Date: Fri, 16 Nov 2018 13:18
4 lines
1790 bytes
1790 bytes
W dniu 16-11-2018 o 14:11, mwitkowski2b@gmail.com pisze: > Panowie, mnie się wydawało, że włożyłem trochę pracy, żeby możliwie najprościej wyjaśnić, o co mi chodziło. Do tego na prawdę nie jest potrzebna znajomość całości problemu. W istocie to się sprowadza do pytania jak przenieść obsługę zdarzeń do interfejsów. Jestem nieco zaskoczony ocena mojego podejścia. Tym niemniej dziękuje za pomoc. Nie przenieść i nie zdarzeń, a zarejestrować callback.
Re: dispintertface - Jak się dostać do metod
Author: Roman Tyczka
Date: Fri, 16 Nov 2018 13:22
Date: Fri, 16 Nov 2018 13:22
13 lines
1396 bytes
1396 bytes
On Fri, 16 Nov 2018 13:51:56 +0100, konsul41@wp.pl wrote: > Tylko zastanawia mnie operator += w C# to jest przecież przypisanie z > dodawaniem czyli > PSEUDOKOD > f_trackSearch.Progress := > f_trackSearch.Progress+Bosch.VideoSDK.GCALib._ISearchSessionEvents_ProgressEventHandler(MoJaMetodaProgress); Multicast events. Delphi też to oferuje, choć nie w standardzie niestety. -- pozdrawiam Roman Tyczka
Re: dispintertface - Jak się dostać do metod
Author: konsul41
Date: Fri, 16 Nov 2018 13:27
Date: Fri, 16 Nov 2018 13:27
5 lines
1482 bytes
1482 bytes
> Multicast events. Delphi też to oferuje, choć nie w standardzie niestety. > Tak myślałem, dzięki za nazwanie i potwierdzenie.
Re: dispintertface - Jak się dostać do metod
Author: Roman Tyczka
Date: Fri, 16 Nov 2018 18:25
Date: Fri, 16 Nov 2018 18:25
29 lines
1981 bytes
1981 bytes
On Fri, 16 Nov 2018 05:11:01 -0800 (PST), mwitkowski2b@gmail.com wrote: > Panowie, mnie się wydawało, że włożyłem trochę pracy, Nikt temu nie przeczy, ale pamiętaj, że to Twoja praca w Twoim interesie, nie naszym. > żeby możliwie najprościej wyjaśnić, o co mi chodziło. No to się chyba nie udało sądząc po odzewie grupy. > Do tego na prawdę nie jest > potrzebna znajomość całości problemu. W istocie to się sprowadza do > pytania jak przenieść obsługę zdarzeń do interfejsów. Tutaj akurat masz imho błędne założenie. Zdrowo jest zakładać, że się nie wie gdzie jest problem i przedstawiać szerszy opis zagadnienia, bo się może okazać (i często okazuje), że problem leży zupełnie gdzie indziej (np. niezrozumieniu jak coś działa). > Jestem nieco zaskoczony ocena mojego podejścia. Tym niemniej dziękuje za pomoc. Oceny Twoje podejścia nikt nie dokonywał, co najwyżej jego efektów ;-) I się jak baba nie obrażaj tylko odpowiadaj na pytania, które dostałeś. -- pozdrawiam Roman Tyczka
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads