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?