Autor Beitrag
tdroese
Hält's aus hier
Beiträge: 3



BeitragVerfasst: So 16.11.08 15:43 
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:

ausblenden 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 user profile iconUGrohne: Code-Tags hinzugefügt.
tdroese Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: 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:

ausblenden Quelltext
1:
2:
3:
GA1 = (GroupAddr And &HF800) / (2 ^ 11) 
GA2 = (GroupAddr And &H700) / (2 ^ 8)
GA3 = (GroupAddr And &HFF)


Bisher in Delphi

ausblenden 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.

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1335
Erhaltene Danke: 118

Win 10
RIO, CE, Lazarus
BeitragVerfasst: 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.
ausblenden Delphi-Quelltext
1:
2:
3:
  GA1 := (GroupAddr And $F800shr 11;
  GA2 := (GroupAddr And $0700shr 3;
  GA3 := GroupAddr And $FF;

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?

Für diesen Beitrag haben gedankt: tdroese