Einzelnen Beitrag anzeigen

LuckySpacy

Registriert seit: 2. Apr 2003
Ort: Fränkisch-Crumbach
50 Beiträge
 
Delphi 10.4 Sydney
 
#1

Ereignis (Event) einer ActiveX-Form ohne tlb zuweisen

  Alt 27. Nov 2003, 10:34
Folgendes Problem:
Ich habe eine ActiveX-Form erstellt.
Auf diesem Activex-Form befindet sich eine Edit-Komponente und ein Button.
Sobald ich auf den Button drücke, soll über ein Ereignis der Inhalt des Edit-Textes
nach außen übergeben werden.


Beispiel 1:

In der ActiveX-Form sieht es folgendermaßen aus:
Delphi-Quellcode:
..
  private
    { Private-Deklarationen }
    FEvents: IActiveFormXOle1Events;
    procedure ChangeEdit2Text(Sender: TObject; const Edit2Text: WideString);
..

procedure TActiveFormXOle1.ChangeEdit2Text(Sender: TObject;
  const Param1: WideString);
begin
  if FEvents <> nil then
    FEvents.OnChangeEdit2Text(Param1);
end;

procedure TActiveFormXOle1.Button1Click(Sender: TObject);
begin
  ChangeEdit2Text(Sender, Edit2.Text);
end;
über "Projekt|Typbibliothek importieren" importiere ich mir meine ActiveX-Form.
Dann erstelle ich mir eine neue Anwendung;
Auf die Anwendung setze ich meine importierte Activex-Form und ein Label;

Der Quelltext meiner Anwendung sieht unter anderem so aus:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  ActiveFormXOle11.OnChangeEdit2Text := OnChangeEdit2Text;
end;

procedure TForm1.OnChangeEdit2Text(Sender: TObject;
  const Param1: WideString);
begin
  Label1.Caption := Param1;
end;
Wenn ich das Programm starte, dann funktioniert alles wunderbar.
Die Label-Komponente auf meiner Anwendung bekommt den Inhalt des Textes meiner ActiveX-Form Edit-Komponente
zugewiesen, sobald ich auf den Button drücke.


Beispiel 2:

Jetzt möchte ich aber nicht die tlb verwenden.
Das ActiveX soll in meiner Anwendung angezeigt werden.
Dazu verwende ich den OleContainer.

Mein Quelltext hierzu sieht wie folgt aus:

Delphi-Quellcode:
..
  private
    OleObjekt: OleVariant;
..


procedure TForm1.rbtActiveFormXClick(Sender: TObject);
begin
  OleContainer1.CreateObject('ActiveFormXOle1Proj1.ActiveFormXOle1', false); // in den Container laden
  OleContainer1.DoVerb(ovShow); // Anzeigen
  OleObjekt := OleContainer1.OleObject; // OleObjekt zuweisen
  OleObjekt.OnChangeEdit2Text := OnChangeEdit2Text; // Event wie im ersten Beispiel zuweisen
end;

Wenn ich dies jetzt Kompiliere, dann bekomme ich folgende Fehlermeldung:
"Nicht genügend wirkliche Parameter"

Wenn ich das tue, was der Compiler von mir verlangt
"OleObjekt.OnChangeEdit2Text := OnChangeEdit2Text(Sender, 'Hallo');"
meckert der Compiler auch nicht mehr rum.
Nützt aber nichts, weil es in der Anwendung nicht funktionert.


Zusammengefasst:
Ich benutze in beiden Beispielen das selbe ActiveX.

Der Unterschied zwischen den beiden Versionen ist:
Im ersten Beispiel benutze ich die tlb und im zweiten Beispiel nicht.

Frage:
Wieso kann ich das Event nicht zuweisen ?
Ich verstehe es einfach nicht.
Was muss ich tun, damit es funktioniert?
Thomas Bachmann
  Mit Zitat antworten Zitat