AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Kann in selbst erzeugtem ActiveX Control Property nicht setzen
Thema durchsuchen
Ansicht
Themen-Optionen

Kann in selbst erzeugtem ActiveX Control Property nicht setzen

Ein Thema von DaveTW · begonnen am 11. Jul 2024
Antwort Antwort
DaveTW

Registriert seit: 11. Jul 2024
1 Beiträge
 
#1

Kann in selbst erzeugtem ActiveX Control Property nicht setzen

  Alt 11. Jul 2024, 12:37
Hallo liebe Delphi- Programmierer,

ich habe ein ActiveX-Form erstellt (nach diesem Tutorial: https://www.youtube.com/watch?v=G6cT7mdsFyQ ), habe auf der Form ein Label, einen Button und ein Edit-Feld (nach dieser Anleitung: https://docwiki.embarcadero.com/RADS...eX_Active_Form ) eingefügt und die entsprechenden Änderungen und Code- Einfügungen vorgenommen. Ich kann das Projekt erzeugen, es entsteht ein .ocx
Ich kann dieses in mein LabVIEW- Programm einbinden, die programmierte Funktion ShowMessage über ButtonClick funktioniert, und über die mitgelieferten Standard- Properties auch steuern (z.B. Color, Autosize).
So weit, so gut. Ich möchte nun gerne selbst Properties und Methoden erzeugen, über welche ich das Control steuern kann. Leider gelingt mir schon der erste Schritt nicht vollständig.
Meine KLasse heißt IMyAX_Class, von dieser leiten sich die entspr. Interface- Namen ab. Das Projekt heißt MyActiveX_2, entspechend die Dateinamen.
In der .RIDL - Datei habe ich im Designer eine neue Property "X" erzeugt (Typ Long), diese bekam die ID 235. Die entsprechenden Getter und Setter sollten die private Variable FX setzen oder lesen. Delphi hat mir da nicht viel geholfen, deswegen musste ich in "MyActiveX_2_TLB.pas" in der Interface- Deklaration folgendes einfügen:

IMyAX_ClassDisp = dispinterface
...
property X: Integer dispid 235;
...
end;



IMyAX_Class = interface(IDispatch)
...
procedure Set_X(Value: Integer); safecall;
function Get_X: Integer; safecall;
...
property X: Integer read Get_X write Set_X;
...
end;

Das habe ich mir zusammengereimt, weil die vorhandenen, vom Wizard generierten Properties genauso deklariert wurden. Dann in der Unit "MyActiveX_2U.pas" habe ich im protected- Bereich meine Member definiert:

TMyAX_Class = class(TActiveForm, IMyAX_Class)
...
protected
FX : Integer;
procedure Set_X(Value: Integer); safecall;
function Get_X: Integer; safecall;
...

und deklariert:

...
function TMyAX_Class.Get_X: Integer;
begin
Label1.Caption := FX.ToString;
Result := FX;
end;

procedure TMyAX_Class.Set_X(Value: Integer);
begin
FX := Value;
Label1.Caption := Value.ToString;
end;

FX habe ich in der Initialize- Methode auf 33 gesetzt.

In meinem aufrufenden LabVIEW-Code habe ich dann zuerst die Property X mit einer 22 gesetzt, danach ausgelesen. Der Rückgaewert ist 33, das Label wird auch zu 33 gesetzt.
Das heißt, der Setter wird nicht aufgerufen, denn die Variable FX enthält nicht den gesetzten Wert 22 und Label1.Caption wird nicht verändert. Der Getter hingegen funktioniert, hier wird das Label verändert und ich bekomme den Wert 33 zurück.
Ich habe mein Projekt in die ZIP im Anhang verpackt, es währe schön, wenn Ihr mal reinsehen würdet.
Hat einer von Euch erfahrenen Delphianern eine Idee?

Gruß, David
Angehängte Dateien
Dateityp: zip ComTest4.zip (79,1 KB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 01:21 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