Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - ActiveX einbinden - aber wie?!
tdroese - So 16.11.08 15:43
Titel: ActiveX einbinden - aber wie?!
Hallo an alle Forumsmitglieder,
derzeit bin ich dabei von VB auf Delphi umzusteigen und einige Projekte zu übertragen. Viele Dinge sind in Delphi leichter zu realisieren aber ich beiße mir manchmal echt die Zähne aus...
Zum Beispiel:
Ich habe eine Anwendung die auf ein ActiveX zugreift, dies habe ich auch in Delphi eingebunden und ein Objekt unter "ActiveX" in der Leiste.
Dies bette ich nun in die Anwendung ein "TEIBNet". Dies kann ich dann auch prima ansprechen und Kommandos an das ActiveX senden z.B. "EIBNet1.SendBit (X);" usw. aber wie reagiere ich darauf, wenn das ActiveX etwas empängt? Es gibt dort eine Methode die nennt sich EIBNet1.OnReceive, die ein Ereignis ähnlich "OnClick" auslösen soll...
In VB hab ich dafür folgende Prozedur:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| Private Sub EIBnet1_OnReceive(ByVal GroupAddr As Integer, ByVal Value As Long) Dim GA1 As Integer Dim GA2 As Integer Dim GA3 As Integer '-- decompress GroupAddress GA1 = (GroupAddr And &HF800) / (2 ^ 11) GA2 = (GroupAddr And &H700) / (2 ^ 8) GA3 = (GroupAddr And &HFF) '-- format values Dim sGA As String sGA = "GA = " + Format(GA1) + "/" + Format(GA2) + "/" + Format(GA3) Range("E5").Select ActiveCell.FormulaR1C1 = sGA
If (GA1 = 10) And (GA2 = 3) And (GA3 = 1) Then .... End If
End Sub |
Aber wie löse ich das in Delphi? Bin völlig ratlos und nirgendwo fündig geworden...
Geht das über ein Interface?! Und wie löse ich die Gruppenadressen auf?
Hoffe hier gibt es noch den ein oder anderen der "in beiden Welten" zu Hause ist und mir weiterhelfen kann...
Schönen Tag noch!
Thomas
Moderiert von
UGrohne: Code-Tags hinzugefügt.
tdroese - Mo 17.11.08 14:35
Titel: Lösung für "OnReceive"
Habe die Lösung inzwischen gefunden! Für den Fall, dass es andere hier gibt, die ebenfalls dieses Problem haben sollten:
Unter
type
procedure OnReceive(Sender: TObject; GroupAddr: smallint; Value: longint);
Dann im FormCreate Ereignis:
EIBNet1.OnReceive := OnReceive;
und nun die Prozedur... :)...
procedure OnReceive(Sender: TObject; GroupAddr: smallint; Value: longint);
begin
...
end;
Damit löst die ActiveX ein Ereignis im Hauptprogramm aus. Soweit so gut...
Aber wie ich jetzt die Gruppenadresse zerlege... Ich weiß es nicht...
Also wie löse ich diese Rechnung in Delphi?
GA1 = (GroupAddr And &HF800) / (2 ^ 11)
GA2 = (GroupAddr And &H700) / (2 ^ 8)
GA3 = (GroupAddr And &HFF)
tdroese - Di 18.11.08 20:40
Titel: Binärzahlen usw.
Hallo Leute,
ich brauche immer noch Hilfe bei der Auflösung der Gruppenadressen!
In VB:
Quelltext
1: 2: 3:
| GA1 = (GroupAddr And &HF800) / (2 ^ 11) GA2 = (GroupAddr And &H700) / (2 ^ 8) GA3 = (GroupAddr And &HFF) |
Bisher in Delphi
Quelltext
1: 2: 3:
| GA1 := (GroupAddr And StrToInt('$' + 'F800') GA2 := (GroupAddr And StrToInt('$' + 'F700') GA3 := (GroupAddr And StrToInt('$' + 'FF') |
Im VB Code steht 2^11. Damit werden typischerweise Bitpositionen beschrieben:
2^0 = 1 = &H1, niederwertigstes Bit
2^1 = 2 = &H2
2^10 = 1024 = &H400
2^20 = 1024*1024 = 1048576 = &H100000
2^31 = 2147483648 = &H80000000, höchstwertiges Bit
etc.
Quelltext
1: 2: 3:
| GA1 = (GroupAddr And &HF800) / (2 ^ 11) GA2 = (GroupAddr And &H700) / (2 ^ 8) GA3 = (GroupAddr And &HFF) |
GA1: Es wird ein Teil der GroupAddr maskiert. Hier die 5 höchstwertigen Bits eines Wortes (16 Bit) und diese um 11 bit nach rechts geschoben. Man könnte sagen rechtsbündig ausgerichtet.
GA2: Es werden 3 Bit unterhalb GA1 maskiert und um 8 Bit nach rechts geschoben.
GA3: Es werden die restlichen 8 Bit maskiert, die müssen nicht mehr geschoben werden, da sie schon rechtsbündig sind.
Man hat also hier 16 Bit, die folgendermaßen aufgebaut sind:
|- höchstwertiges Bit --> niederwertigstes Bit
54321 098 76543210
GA1 GA2 GA3
Aber wie mache ich soetwas in Delphi?!
Bin jetzt endgültig am Ende meiner Fähigkeiten...
Gruß
Thomas
Sinspin - Di 18.11.08 22:10
Ich glaube du machst dir das ganze unnötig schwehr.
Zum einem kann man kann auch in Delphi Hexa-Zahlen schreiben.
Zum anderen gibt es hier auch Schiebeoperationen. Die sind vom Namen her sogarn ein bisschen an Assembler angelehnt.
Delphi-Quelltext
1: 2: 3:
| GA1 := (GroupAddr And $F800) shr 11; GA2 := (GroupAddr And $0700) shr 3; GA3 := GroupAddr And $FF; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!