AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Ereignis (Event) einer ActiveX-Form ohne tlb zuweisen

Ereignis (Event) einer ActiveX-Form ohne tlb zuweisen

Ein Thema von LuckySpacy · begonnen am 27. Nov 2003 · letzter Beitrag vom 27. Nov 2003
Antwort Antwort
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, 09: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
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Ereignis (Event) einer ActiveX-Form ohne tlb zuweisen

  Alt 27. Nov 2003, 10:15
Wenn du keine tlb benutzt, woher soll der compiler wissen wo/wie/welcher parameter der handler braucht? ...Ist die tlb nicht intern in der activeX-compo als resource angehängt?
  Mit Zitat antworten Zitat
LuckySpacy

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

Re: Ereignis (Event) einer ActiveX-Form ohne tlb zuweisen

  Alt 27. Nov 2003, 11:49
Ich habe jetzt die Frage nicht richtig verstanden.
Ich poste einfach mal die gesamte Anwendung:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtnrs, ExtCtrls;

type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Button1: TButton;
    OleContainer1: TOleContainer;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    OleObjekt: OleVariant;
    procedure OnChangeEdit2Text(Sender: TObject;
      const Param1: WideString);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  OleContainer1.CreateObject('ActiveFormXOle1Proj1.ActiveFormXOle1', false);
  OleContainer1.DoVerb(ovShow);
  OleObjekt := OleContainer1.OleObject;
  OleObjekt.OnChangeEdit2Text := OnChangeEdit2Text;
end;

procedure TForm1.OnChangeEdit2Text(Sender: TObject;
  const Param1: WideString);
begin
  Label1.Caption := Param1;
end;
Du siehst, es ist keine tlb eingebunden.
Thomas Bachmann
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#4

Re: Ereignis (Event) einer ActiveX-Form ohne tlb zuweisen

  Alt 27. Nov 2003, 13:41
So gut kenn ich mich damit auch nicht aus, aber mir fällt folgendes auf:

Delphi-Quellcode:
OleObjekt: OleVariant; // standard ole teil
...
OleObjekt := OleContainer1.OleObject;
OleObjekt.OnChangeEdit2Text := OnChangeEdit2Text;
woher soll das OleObject dein event kennen, wenn du nicht das richtige interface am wickel hast? Das com-object wird ja erst zur laufzeit aufgelöst!

Wie würde das denn mit tlb aussehen?
  Mit Zitat antworten Zitat
LuckySpacy

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

Re: Ereignis (Event) einer ActiveX-Form ohne tlb zuweisen

  Alt 27. Nov 2003, 16:03
Der Compiler kann das Event gar nicht kennen.
Das ist auch richtig so. Erst wenn das ActiveX geladen wird stehen diese Events, Funktionen oder Proceduren zur Verfügung.
Der Compiler weiß das und meckert es auch nicht an.
Zum Beispiel funktioniert so etwas ja auch einwandfrei.

Delphi-Quellcode:
OleObjekt: OleVariant; // standard ole teil
...
OleObjekt := OleContainer1.OleObject;
OleObjekt.Machwas;
Die Procedure Machwas kennt der Compiler ja auch nicht und trotzdem funktioniert es.
Aus diesem Grund verstehe ich das mit dem Event nicht.

So sieht es mit der tlb aus:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, OleCtrls, ActiveFormXOle1Proj1_TLB;

type
  TForm1 = class(TForm)
    ActiveFormXOle11: TActiveFormXOle1;
    Label1: TLabel;
    procedure FormCreate(Sender: TObject);
  private
    procedure OnChangeEdit2Text(Sender: TObject;
      const Param1: WideString);
  public
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

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



procedure TForm1.OnChangeEdit2Text(Sender: TObject;
  const Param1: WideString);
begin
  Label1.Caption := Param1;
end;


end.
Sobald ich auf den Button im ActiveX-Form drücke wird der Inhalt der Edit-Komponente aus der ActiveX-Form an das Label in der Anwendung übergeben.
Thomas Bachmann
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#6

Re: Ereignis (Event) einer ActiveX-Form ohne tlb zuweisen

  Alt 27. Nov 2003, 18:32
Delphi-Quellcode:
OleObjekt := OleContainer1.OleObject;
OleObjekt.Machwas;
Im ernst. War mir nicht klar...is das die vielzitierte ole-automation? ...ich dachte das verhält sich genau wie bei COM, wovon ole ja abstammt! Naja, dann streich meine fragen von oben

viel glück weiterhin!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz