[Delphi/ActiveX] Eigen component verschijnt niet in wizard

Pagina: 1
Acties:
  • 225 views sinds 30-01-2008
  • Reageer

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Ik probeer een eigen gemaakt VCL component om te zetten naar een ActiveX component mbv Delphi' ActiveX wizard (Delphi7 pro).
Het probleem is dat de component niet in de lijst van VCL componenten verschijnt.

In de help staat:
In the wizard, select the name of the VCL control that will be wrapped by the new ActiveX control. The dialog lists all available controls, which are descendants of TWinControl
Veel componenten die van TWinControl zijn afgeleid verschijnen echter niet in de lijst. Zo staat TButton wel in de lijst maar TBitBtn (afgeleid van TButton) niet.
Ook mijn eigen component verschijnt niet in de lijst als de component van TWinControl is afgeleid maar wel wanneer deze van TButton is afgeleid.

Na wat zoeken ben ik erachter gekomen dat er (kleine?) verschillen zitten tussen verschillende versies van Delphi waardoor de lijst met VCL componenten kan verschillen.

Kent iemand dit probleem en/of is het te omzeilen?

Developer Accused Of Unreadable Code Refuses To Comment


  • Icelus
  • Registratie: Januari 2004
  • Niet online
Tweede poging.

Developer Accused Of Unreadable Code Refuses To Comment


  • RwD
  • Registratie: Oktober 2000
  • Niet online

RwD

kloonikoon

Mocht het je hier niet lukken doe dan een poging op www.delphipages.com

  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-05 09:58

alienfruit

the alien you never expected

Welke versie van Delphi :P ?

Verwijderd

Hoe verhoudt delphi zich eigenlijk tot C++? Ik heb delphi nog nooit geprobeerd.

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ik zie het probleem niet. Een component zit in een package en in die package staat een procedure Register. In die procedure wordt het component geregistreerd. Zodra je die package installeerd (niet alleen compiled) in Delphi zie je het component. Het heeft dus niets met Delphi versies te maken of van welk component je afleid, maar met welke package geladen is in de Delphi IDE.

Ik kan me nog wel een andere oorzaak bedenken. Ben je misschien een CLX applicatie aan het maken ipv een VCL? Of heb je CLX units geused (Q.....) ipv VCL units?

BCB en Delphi zijn bijna 100% gelijk kwa werkwijze en code.

We adore chaos because we like to restore order - M.C. Escher


  • Icelus
  • Registratie: Januari 2004
  • Niet online
LordLarry schreef op maandag 07 februari 2005 @ 10:42:
Ik zie het probleem niet. Een component zit in een package en in die package staat een procedure Register. In die procedure wordt het component geregistreerd. Zodra je die package installeerd (niet alleen compiled) in Delphi zie je het component. Het heeft dus niets met Delphi versies te maken of van welk component je afleid, maar met welke package geladen is in de Delphi IDE.
Component is uiteraard geregistreerd en te gebruiken in IDE.
Als ik onderstaande component in een package installeer verschijnt de component in de IDE en is normaal te gebruiken; de component verschijnt echter niet in de componentenlijst van de ActiveX wizard.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unit MyControl;

interface

uses  SysUtils, Classes, Controls;

type  TMyControl = class(TWinControl);

procedure Register;

implementation

procedure Register;
begin
     RegisterComponents('My Components', [TMyControl]);
end;

end.
Delphi versie zou inderdaad niet uit mogen maken maar ik ben ook berichten tegengekomen dat een VCL component dat in Delphi 5 om te zetten was naar ActiveX in Delphi 7 problemen gaf.

Developer Accused Of Unreadable Code Refuses To Comment


  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

Ah, ok. Nu snap ik m. Zo'n component moet van TWinControl afgeleid zijn en niet geregistreerd zijn via RegisterNoActiveX. Misschien dat dat de rede is? Of leid je direct van TWinControl af? Werkt het wel met een compleet lege afgeleide van TWinControl? Wat als je TCustomControl gebruikt?

We adore chaos because we like to restore order - M.C. Escher


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-05 09:58

alienfruit

the alien you never expected

Hmm, ik heb er niet zo veel problemen mee in Delphi 2005, net nog getest :)

  • Icelus
  • Registratie: Januari 2004
  • Niet online
LordLarry schreef op maandag 07 februari 2005 @ 11:42:
Ah, ok. Nu snap ik m. Zo'n component moet van TWinControl afgeleid zijn en niet geregistreerd zijn via RegisterNoActiveX.
Is afgeleid van TWinControl en RegisterNoActiveX wordt niet gebruikt.
Misschien dat dat de rede is? Of leid je direct van TWinControl af? Werkt het wel met een compleet lege afgeleide van TWinControl? Wat als je TCustomControl gebruikt?
  • Direct van TWinControl: geprobeerd; zie ook code in vorige post, dit werkt niet.
  • Een VCL component zoals TButton (TWinControl -> TButtonControl -> TButton afgeleid) komt wel in de lijst voor.
    TBitBtn (afgeleid van TButton) komt echter weer niet voor.
  • Een aantal klassen geprobeerd (allemaal afgeleid van TWinControl):
    niet: TWinControl, TButtonControl, TBitBtn, TCustomEdit
    wel: TCustomForm, TForm, TButton, TEdit

Developer Accused Of Unreadable Code Refuses To Comment


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-05 09:58

alienfruit

the alien you never expected

Wat als je IUnknown implementeert :) ? Alle componenten die afgeleid van mijn TdxCustomControl kan ik gewoon zien in de wizard.

Je kan het natuurlijk ook zelf doen door je component af te leiden van TActiveXControl en een interface te maken voor alle functies enzo.

[ Voor 76% gewijzigd door alienfruit op 07-02-2005 12:06 ]


  • Icelus
  • Registratie: Januari 2004
  • Niet online
alienfruit schreef op maandag 07 februari 2005 @ 12:01:
Je kan het natuurlijk ook zelf doen door je component af te leiden van TActiveXControl en een interface te maken voor alle functies enzo.
Dan omzeil je inderdaad de wizard die dat werk normaal voor je doet. Zal 'ns kijken...

Developer Accused Of Unreadable Code Refuses To Comment


  • alienfruit
  • Registratie: Maart 2003
  • Laatst online: 15-05 09:58

alienfruit

the alien you never expected

Of je mailt mij een testcase dat reproduceerbaar is naar alienfruit@gmail.com en ik zal eens kijken wat onze vrienden bij Borland er op te zeggen hebben, of je logt het zelf op Qualiy Central (qc.borland.com)

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Ben er nog niet helemaal uit.
Als ik de eerder gegeven code verander in:
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
unit MyControl;

interface

uses  SysUtils, Classes, Controls;

type  TMyControl = class(TWinControl)
        published
          property OnClick;
      end;

procedure Register;

implementation

procedure Register;
begin
     RegisterComponents('My Components', [TMyControl]);
end;

end.
komt de component wel in de lijst voor. Ik heb alleen de OnClick property zichtbaar gemaakt in de Object Inspector.
Voeg ik alleen een public procedure toe dan verschijnt de component niet.
Ik moet dus minimaal één event in het published gedeelte toevoegen?

Developer Accused Of Unreadable Code Refuses To Comment

Pagina: 1