Budowa kontrolki ActixeX -> Problem uruchomienia programu

Budowa kontrolki ActixeX -> Problem uruchomienia programu
KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0

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)

obscurity
Uzywan Delphi 7 dude
Marius.Maximus
  • Rejestracja:ponad 14 lat
  • Ostatnio:2 dni
  • Postów:2100
0

obejrzał bym pliki DFM


--
Nie przyjmuję reklamacji za moje rady, używasz na własną odpowiedzialność.
Programowanie bez formatowania to jak chodzenie ze spodniami spuszczonymi na kostki. Owszem da się ale po pierwsze nie wygodne, po drugie nieprzyzwoicie wygląda.
Przed zaczęciem nowego wątku przeczytam problem XY
KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0
Marius.Maximus napisał(a):

obejrzał bym pliki DFM

Unit10.dfm

MI
  • Rejestracja:około 7 lat
  • Ostatnio:10 dni
  • Postów:43
0

Czy w Twojej kontrolce, która dziedziczy po TWinControl opublikowałeś właściwość TabOrder? Bo w TWinControl ma widoczność na poziomie "public".

KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0
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

KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0
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 publishedClip2353.pngOCX_IRZPlus_API.rar

MI
  • Rejestracja:około 7 lat
  • Ostatnio:10 dni
  • Postów:43
0

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ę.

edytowany 1x, ostatnio: michalgw
KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0
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

MI
  • Rejestracja:około 7 lat
  • Ostatnio:10 dni
  • Postów:43
0

Opowiedz co chcesz zrobić, jaki efekt uzyskać. Będzie łatwiej coś podpowiedzieć bo to obszerny temat.

KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0
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.

MI
  • Rejestracja:około 7 lat
  • Ostatnio:10 dni
  • Postów:43
0

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ć.

KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0

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?

MI
  • Rejestracja:około 7 lat
  • Ostatnio:10 dni
  • Postów:43
0

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.

KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0
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.

flowCRANE
Moderator Delphi/Pascal
  • Rejestracja:ponad 13 lat
  • Ostatnio:około 2 godziny
  • Lokalizacja:Tuchów
  • Postów:12175
0

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.


Pracuję nad własną, arcade'ową, docelowo komercyjną grą z gatunku action/adventure w stylu retro (pixel art), programując silnik i powłokę gry od zupełnych podstaw, przy użyciu Free Pascala i SDL3. Więcej informacji znajdziesz na moim mikroblogu.
edytowany 2x, ostatnio: flowCRANE
KI
  • Rejestracja:około miesiąc
  • Ostatnio:9 dni
  • Postów:9
0
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.