Witam
Buduje kontrolkę ActiveX zgodnie z https://stackoverflow.com/questions/19112324/how-to-write-delphi-activex-control-which-can-be-used-in-ms-word-excel-powerpoin inherit z TWinControl (także z TPanel). Po położeniu kontrolki OCX na formie widzę i mam dostęp do wszystkich właściwości i procedur/funkcji ale przy próbie uruchomienia programu mam błąd. W przypadku dziedziczenia z TWinControl: "Property TabOrder does not exist" (ParentFont dla dziedziczenia z TPanel".
Czy ktoś może pomóc?
P.S.
(Uzywan Delphi 7)
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9

- Rejestracja:ponad 14 lat
- Ostatnio:2 dni
- Postów:2100
obejrzał bym pliki DFM
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9
Marius.Maximus napisał(a):
obejrzał bym pliki DFM
- Unit10.dfm (1 KB) - ściągnięć: 5
- Unit10.dfm (1 KB) - ściągnięć: 17
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9
michalgw napisał(a):
Czy w Twojej kontrolce, która dziedziczy po TWinControl opublikowałeś właściwość TabOrder? Bo w TWinControl ma widoczność na poziomie "public".
Muszę sprawdzić. Przy testach dziedziczenia z TPanel sprawdzałem czy właściwość do której się czepiał była published. Była. Sprawdzę Jak mam TabOrder z TWinControl
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9
kerIC napisał(a):
michalgw napisał(a):
Czy w Twojej kontrolce, która dziedziczy po TWinControl opublikowałeś właściwość TabOrder? Bo w TWinControl ma widoczność na poziomie "public".
Muszę sprawdzić. Przy testach dziedziczenia z TPanel sprawdzałem czy właściwość do której się czepiał była published. Była. Sprawdzę Jak mam TabOrder z TWinControl. W załącznikach ScreenShot i wszystkie zródłowki + DFM z programu testowego. Na formę dodatkowo wstawilem obiekt TIRZPlus_API dla którego robię ActiveX..
Jest publishedOCX_IRZPlus_API.rar
- Clip2353.png (37 KB) - ściągnięć: 2
- OCX_IRZPlus_API.rar (2 MB) - ściągnięć: 3
- Unit10.dfm (1 KB) - ściągnięć: 6
- Rejestracja:około 7 lat
- Ostatnio:10 dni
- Postów:43
Interfejs IOCX_IRZPlus_APIX z modułu OCX_IRZPlus_API_TLB nie posiada tej właściwości. Może musisz ponownie wygenerować bibliotekę typów (tlb) dla tego komponentu. Przyznam, że nigdy nie tworzyłem wizualnych kontrolek ActiveX i trochę zgaduję.
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9
michalgw napisał(a):
Interfejs IOCX_IRZPlus_APIX z modułu OCX_IRZPlus_API_TLB nie posiada tej właściwości. Może musisz ponownie wygenerować bibliotekę typów (tlb) dla tego komponentu. Przyznam, że nigdy nie tworzyłem wizualnych kontrolek ActiveX i trochę zgaduję.
Ponieważ miałem wcześnie kontrolke dziedziczona z TPanel to przed przygotowaniem źródłówek dołączonym do postu przeprowadziłem caly proces od początku tzn.Zaczynając od rejestracji obiektu TIRZPlus_API = class(TWinControl) kończąc na tworzeniu ActiveX zgodnie z instrikcją z linku z pierwszego postu.
Ponieważ NIE POTRZEBUJĘ kontrolki wizualnej bardzo bym prosił o instrukcje jak zrobić nie wizualną. Piwo (własnej roboty) wyśle na wskazany adres
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9
michalgw napisał(a):
Opowiedz co chcesz zrobić, jaki efekt uzyskać. Będzie łatwiej coś podpowiedzieć bo to obszerny temat.
Potrzebuję kontrolki ActiveX Ktora będzie będzie obsługiwać API. (pobieranie, wysylanie). Na dobrą sprawę wystarczy możliwość wywolywania procedur//funkcji. Mile widziane właściwosci (np USER, PASSWORD, itd) ale w ostateczności mogą być przekazywane zawsze w prodeurach/funkcjach.
- Rejestracja:około 7 lat
- Ostatnio:10 dni
- Postów:43
Może wystarczy biblioteka z wewnątrzprocesowym serwerem COM lub OLE Automation. W jaki sposób chcesz korzystać z biblioteki? Czy chcesz użyć jej tylko w środowiskach programistycznych (np Delphi, C/C++, .net) to wystarczy biblioteka COM. Jeśli chcesz używać biblioteki również w środowiskach skryptowych (np VBA w Excelu lub w klasycznym VB, korzystając z późnego wiązania) to wtedy biblioteka z serwerem OLE Automation.
W Delphi musisz utworzyć nowy projekt "ActiveX Library" i następnie dodajesz serwery COM/Automation (w Delphi "New" -> "COM Object" lub "Automation Object") i definiujesz interfejs w oknie edytora biblioteki typów. Delphi automatycznie wygeneruje szkielet klasy implementującą stworzony interfejs, którą musisz uzupełnić o kod. W przypadku OLE Automation pamiętaj, żeby w swoim interfejsie korzystać tylko z typów zgodnych z automatyzacją.
Zalecam najpierw zapoznanie się z podstawami technologii COM/OLE Automation (IUnknown, IDispatch, model współbieżności, producenci, HResult, delegacje, itp... jak wspominałem temat-rzeka).
No i uwaga na koniec: biblioteki wewnątrzprocesowe COM/Auutomation są specyficzne dla platformy - 32bit biblioteka będzie działać tylko z 32bit oprogramowaniem. Więc za pomocą Delphi 7 zrobisz tylko 32bit bibliotekę i aplikacje 64-bit nie będą mogły z niej korzystać.
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9
Dzieki, przyjrze się temu rozwiazaniu Chodzi o udostepnienie dla nowszych wersji Delphi. Jestem świadom ograniczeń 32/64. Muszę udostepnić innej osobie funkcjonalnosci Przyznaje się że do tej pory nigdy nie potrzebowalem udostępniać a kwestia jest taka iż nie chce udostepniac kodów źródłowych. Sam kod nie jest żadnym fenomenem ale musiałem 2 lata walczyc z pewna agencją rządową o dokumentacje.
A jeżeli masz doświadczenie z ActiveX nie wizualnymi to może byś dal jakas instrukcje jak taką założyc?
- Rejestracja:około 7 lat
- Ostatnio:10 dni
- Postów:43
Jak stworzyć taką bibliotekę napisałem w poprzedniej wiadomości:
michalgw napisał(a):
W Delphi musisz utworzyć nowy projekt "ActiveX Library" i następnie dodajesz serwery COM/Automation (w Delphi "New" -> "COM Object" lub "Automation Object") i definiujesz interfejs w oknie edytora biblioteki typów. Delphi automatycznie wygeneruje szkielet klasy implementującą stworzony interfejs, którą musisz uzupełnić o kod. W przypadku OLE Automation pamiętaj, żeby w swoim interfejsie korzystać tylko z typów zgodnych z automatyzacją.
Zacznij od zaprojektowania swoich interfejsów za pomocą edytora biblioteki typów w Delphi (type library editor).
Jednakże jeśli bibliotekę zamierzasz używać tylko z Delphi to rozważ stworzenie biblioteki w formie biblioteki dynamicznej DLL - jest to proces znacznie łatwiejszy.
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9
michalgw napisał(a):
Jak stworzyć taką bibliotekę napisałem w poprzedniej wiadomości:
michalgw napisał(a):
W Delphi musisz utworzyć nowy projekt "ActiveX Library" i następnie dodajesz serwery COM/Automation (w Delphi "New" -> "COM Object" lub "Automation Object") i definiujesz interfejs w oknie edytora biblioteki typów. Delphi automatycznie wygeneruje szkielet klasy implementującą stworzony interfejs, którą musisz uzupełnić o kod. W przypadku OLE Automation pamiętaj, żeby w swoim interfejsie korzystać tylko z typów zgodnych z automatyzacją.
Zacznij od zaprojektowania swoich interfejsów za pomocą edytora biblioteki typów w Delphi (type library editor).
Jednakże jeśli bibliotekę zamierzasz używać tylko z Delphi to rozważ stworzenie biblioteki w formie biblioteki dynamicznej DLL - jest to proces znacznie łatwiejszy.
Ogólnie robię DLL-ki, tylko że mam problem ze stringami. Kiedyś próbowałem ogarnąć problem stringów zgodnie z jakimś artykułów, ale nie działało. Może wrócę do tematu. Ogólnie dzieki z próbę pomocy.
Postępuj zgodnie z wytycznymi, a nie będzie żadnych problemów z obsługą stringów w DLL. — Sharing Memory.
Zwróć uwagę na to, że jeśli skorzystasz z modułu ShareMem, to obok pliku wykonywalnego musi się znajdować biblioteka BORLNDMM.DLL
, która musi być dostarczona z całym programem (klientowi). W przypadku modułu SimpleShareMem takiego obowiązku nie ma.
- Rejestracja:około miesiąc
- Ostatnio:9 dni
- Postów:9
flowCRANE napisał(a):
Postępuj zgodnie z wytycznymi, a nie będzie żadnych problemów z obsługą stringów w DLL. — Sharing Memory.
Zwróć uwagę na to, że jeśli skorzystasz z modułu ShareMem, to obok pliku wykonywalnego musi się znajdować biblioteka
BORLNDMM.DLL
, która musi być dostarczona z całym programem (klientowi). W przypadku modułu SimpleShareMem takiego obowiązku nie ma.
Ogólnie wielkie dzięki.
Uzywalem takiej samej instrukcji jak probowalem kiedys zrobic i znowu mialem ten sam problem niedzialania. Z tym że troche :) wiecej praktyki i znalazlem blad. Mianowicie (z roznych powodow) mam wywolywanie DLL-i poprzez "LoadLibrary" a to jak sie okazuje "ni" działa. Zadepkarowalem procedure poprzez external i jak reka odjął.
Jeszcze raz dziąki
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.
Uzywan Delphi 7
dude