Seite 12 von 12

Verfasst: 07.03.2006 22:15
von mk-soft
Ok,
Habe ich durchgeschaut. Bis auch ein paar kleinigkeiten sieht es sehr gut aus.
- Bei über von Parameter Type Double war noch nicht auf VT_R8 umgeschrieben.
- Bei EnableCalibration ist das Password von Type BSTR (UNICODE). Übergebe nur Zeiger.

Wenn alles getestet ist kannst du mir ja bitte, zum abgleich von den "AdWrapper", bescheid geben .

Ich habe noch den "ATL Helper" mit der Funktion ReleaseInterface(*Obj) erweitert.
Somit braucht im Hauptprogramm kein Interface (IDispatch, IUnknown) mehr angegeben werden.

Hier Downloaden:
http://home.arcor.de/m_kastner/MyCodes

FF :wink:

Verfasst: 29.07.2006 01:00
von Falko
@MK-Soft
Hab hier mal ein Beispiel probiert, wo alle 8 Messkanäle abgefragt werden.
Funktioniert soweit super. Nun wollte ich aber die Farbe vom ContainerGadget
in PB4 ändern und irgendwie verstehe ich nicht, warum das nicht geht.

Messen funktioniert damit soweit super :allright:

Was leider störend im Windows ist, ist das Containercontroll, in dem ich nur
dort die Messwerte und Gadgets aufbauen kann. Oder geht das auch anders?
Ich meine damit, daß das Symbol unsichtbar ist und ich ein normales Fenster angezeigt bekomme? Wenn ich den ganzen ActiveX-Kram mal verstehen könnte,
hätte ich das schon erledigen können :cry:

Vielleicht kannst Du mir hier etwas weiter helfen.
Ich bin ja schon froh, das du der Einzigste Bist, der mir hier soweit
sehr geholfen hat. Im Vorraus vielen Dank hierzu und viele Grüsse
Falko

PS.: Herr Friedrich Lorenz , lorenz_gmbh@t-online.de [Firma Lorenz_GmbH] hat sich auch nach meiner letzten Mail nicht gemeldet, nachdem ich ihn drum gebeten hatte,
eine normale Standard DLL zu compilieren.

Mit der Herstellerfirma http://deutsch.ivt-hirschau.de/ , hatte ich mit einem netten Servicetechniker, Herrn Böhm Kontakt gehabt, der mir mitgeteilt hat, daß das Produckt: AD-USB4 eingestellt wurde, und das er ebenfalls meine Anfrage an Herrn Lorenz weitergeleitet hat.

Code: Alles auswählen

;-TOP  --  Grundgerüst von MK-Soft!
; Kommentar : Kleines Beispiel zur Anzeige 8 analoge  Eingänge (endlos)
; Datei     : Achtfach_Anzeige_analog.pb
; Version   : 1.0
; Erstellt  : 29.07.2006
; Geändert  : Falko Lünsmann

;- Includefiles
IncludeFile "Global.pb"
IncludeFile "AtlHelper.pb"
IncludeFile "AdWrapper.pb"

COMLIB_Init()

If InitAtl() = 0
  Debug LastMessage
  End
EndIf


If OpenWindow(0, 100, 100, 240, 235, "AD_USB 4 Version2XX",#PB_Window_SystemMenu )

  CreateGadgetList(WindowID(0)) 
    ContainerGadget(0, 0,0, 240, 235, #PB_Container_Raised ) ; This will be our container window, where the ActiveX will be rendered
    TextGadget(1, 30,  10, 70, 20, "Analog In0"):TextGadget(2, 140,  10, 80, 20, "0.0",#PB_Text_Border )
    TextGadget(3, 30,  35, 70, 20, "Analog In1"):TextGadget(4, 140,  35, 80, 20, "0.0",#PB_Text_Border )
    TextGadget(5, 30,  60, 70, 20, "Analog In2"):TextGadget(6, 140,  60, 80, 20, "0.0",#PB_Text_Border )
    TextGadget(7, 30,  85, 70, 20, "Analog In3"):TextGadget(8, 140,  85, 80, 20, "0.0",#PB_Text_Border )
    TextGadget(9, 30, 110, 70, 20, "Analog In4"):TextGadget(10, 140, 110, 80, 20, "0.0",#PB_Text_Border )
    TextGadget(11, 30, 140, 70, 20, "Analog In5"):TextGadget(12, 140, 140, 80, 20, "0.0",#PB_Text_Border )
    TextGadget(13, 30, 170, 70, 20, "Analog In6"):TextGadget(14, 140, 170, 80, 20, "0.0",#PB_Text_Border )
    TextGadget(15, 30, 200, 70, 20, "Analog In7"):TextGadget(16, 140, 200, 80, 20, "0.0",#PB_Text_Border )
    CloseGadgetList()

  *Container = CreateControl("ADUSB2XX.ADUSB2XXCtrl.1", GadgetID(0))
  If *Container = 0
    Debug LastMessage
    End
  EndIf
  
  *Control = GetControl(GadgetID(0))
  If *Control = 0
    Debug LastMessage
    ReleaseControl(*Container)
    End
  EndIf
  
  *ADUSB = QueryInterface(*Control, ?IID__DAD_USB2XX)
  If *ADUSB = 0
    Debug LastMessage
    ReleaseControl(*Container)
    End
  EndIf
        
  For i = 0 To 126
    If Scan(*ADUSB, i)
      Break
    EndIf
  Next i
    
  If i < 127
    IO=GetAnalogIO(*ADUSB, i, 1)
    ;Debug GetAnalogVoltage(*ADUSB, i, IO)
  Else
    MessageRequester("Fehler", "AD_USB2 nicht gefunden.")
  EndIf
     SetGadgetColor(1,#PB_Gadget_BackColor,RGB(0,128,254)) ; Geht leider nicht  
     
  Repeat
    Event = WindowEvent()
        Delay(0); gib der CPU etwas Luft :D
        SetGadgetText(2,StrD(GetAnalogVoltage(*ADUSB, 0, IO)))
        SetGadgetText(4,StrD(GetAnalogVoltage(*ADUSB, 1, IO)))
        SetGadgetText(6,StrD(GetAnalogVoltage(*ADUSB, 2, IO)))
        SetGadgetText(8,StrD(GetAnalogVoltage(*ADUSB, 3, IO)))
        SetGadgetText(10,StrD(GetAnalogVoltage(*ADUSB, 4, IO)))
        SetGadgetText(12,StrD(GetAnalogVoltage(*ADUSB, 5, IO)))
        SetGadgetText(14,StrD(GetAnalogVoltage(*ADUSB, 6, IO)))
        SetGadgetText(16,StrD(GetAnalogVoltage(*ADUSB, 7, IO))) 
       ;Debug GetAnalogVoltage(*ADUSB, i, IO) ; i entspricht der Kanalnummer

  Until Event = #PB_Event_CloseWindow
   Close(*ADUSB)        
  ReleaseInterface(*ADUSB)
  ReleaseControl(*Container)
             
  CloseWindow(0)   ; Don't forget this one, else the program will crash
EndIf   

End

;- DataSections AD_USB2XX
DataSection
  IID__DAD_USB2XX: ; BFD9E61F-75C4-4B33-8949-73A64F014514
  Data.l $BFD9E61F
  Data.w $75C4,$4B33
  Data.b $89,$49,$73,$A6,$4F,$01,$45,$14
  IID__DAD_USB2XXEvents: ; 9A894BB7-0F68-429D-A30A-FCE4F6379D78
  Data.l $BFD9E61F
  Data.w $75C4,$4B33
  Data.b $89,$49,$73,$A6,$4F,$01,$45,$14
EndDataSection

Verfasst: 29.07.2006 02:54
von mk-soft
Hi Falco,

versuch mal ohne Container, GetControl, QueryInterface mit

Code: Alles auswählen

*ADUSB = CreateObject("ADUSB2XX.ADUSB2XXCtrl.1")
FF :wink:

Download ComHelper: http://home.arcor.de/m_kastner/MyCodes/DCOM/

Ergebnis: Geht nicht ohne Container
Lösung: Container unsichtbar gestaltet

Verfasst: 29.07.2006 02:58
von Falko
hab das mal mit Semikolon ausgeschlossen. Dann wird kurz das Fenster angezeigt und wieder ausgeblendet wo dann im Debugfenster nichst steht und im Editor (PB4) Invalid Memory Access gezeigt wird und der rote Balken über End steht.

Das hatte ich auch anders versucht, indem ich das ControlGadget ausblenden wollte. Ging auch nicht so.

Grüße Falko

[Edit] @MK-SOFT :allright:
Ich danke Dir hier noch einmal für deine super Unterstützung zum
AD_USB2XX.OCX. Hier noch einmal der Sourc, den wir unter ICQ zusammen-
gebaut haben. Ich habe mit den Farben das noch etwas anders
eingefügt und das unsichtbare ContainerGadget ans Ende gestellt.
Läuft perfekt!

Und so sieht das Ergebnis unter Purebasic aus:

1. Bild mit sichtbaren Container und das 2. unsichtbar und coloriert
Bild Bild


Code: Alles auswählen

;-TOP  --  Grundgerüst von MK-Soft!
; Kommentar : Kleines Beispiel zur Anzeige 8 analoge  Eingänge (endlos)
; Datei     : Achtfach_Anzeige_analog.pb
; Version   : 1.0
; Erstellt  : 29.07.2006
; Geändert  : Falko Lünsmann mit Hilfe von MK-Soft zu ActiveX-Controls

;- Includefiles
XIncludeFile "Global.pb"
XIncludeFile "AtlHelper.pb"
XIncludeFile "AdWrapper.pb"
; 
Global LastError.l
Global LastMessage.s
;
If OpenWindow(0, 100, 100, 245, 225, "AD_USB 4 Version2XX",#PB_Window_SystemMenu )
SetWindowColor(0, RGB(250,0,0))
  If CreateGadgetList(WindowID(0)) 
     TextGadget(1, 30,  10, 70, 20, "AnalogIn 0"):TextGadget(2, 140,  10, 80, 20, "0.0",#PB_Text_Border )
     TextGadget(3, 30,  35, 70, 20, "AnalogIn 1"):TextGadget(4, 140,  35, 80, 20, "0.0",#PB_Text_Border )
     TextGadget(5, 30,  60, 70, 20, "AnalogIn 2"):TextGadget(6, 140,  60, 80, 20, "0.0",#PB_Text_Border )
     TextGadget(7, 30,  85, 70, 20, "AnalogIn 3"):TextGadget(8, 140,  85, 80, 20, "0.0",#PB_Text_Border )
     TextGadget(9, 30, 110, 70, 20, "AnalogIn 4"):TextGadget(10, 140, 110, 80, 20, "0.0",#PB_Text_Border )
     TextGadget(11, 30, 135, 70, 20, "AnalogIn 5"):TextGadget(12, 140, 135, 80, 20, "0.0",#PB_Text_Border )
     TextGadget(13, 30, 160, 70, 20, "AnalogIn 6"):TextGadget(14, 140, 160, 80, 20, "0.0",#PB_Text_Border )
     TextGadget(15, 30, 185, 70, 20, "AnalogIn 7"):TextGadget(16, 140, 185, 80, 20, "0.0",#PB_Text_Border )
     For i= 1 To 15 Step 2
       SetGadgetColor(i,#PB_Gadget_BackColor,RGB(0,128,254)) 
     Next i
     ContainerGadget(0, 0,0, 0, 0, #PB_Container_Raised ) ; This will be our container window, where the ActiveX will be rendered
     CloseGadgetList()
  Else
   MessageRequester("Warnung","CreateGadgetList fehlgeschlagen!")
  EndIf 
;  
 COMLIB_Init()
  
   If InitAtl() = 0
     Debug LastMessage
     End
   EndIf

  *Container = CreateControl("ADUSB2XX.ADUSB2XXCtrl.1", GadgetID(0))
  If *Container = 0
    Debug LastMessage
    End
  EndIf
  
   *Control = GetControl(GadgetID(0))
  If *Control = 0
    Debug LastMessage
    ReleaseControl(*Container)
    End
  EndIf
  
   *ADUSB = QueryInterface(*Control, ?IID__DAD_USB2XX)
  
  If *ADUSB = 0
    Debug LastMessage
    ReleaseControl(*Container)
    End
  EndIf

   *ADUSB = QueryInterface(*Control, ?IID__DAD_USB2XX)
  If *ADUSB = 0
    Debug LastMessage
    ReleaseControl(*Container)
    End
  EndIf

       
  For i = 0 To 126
    If Scan(*ADUSB, i)
      Break 1
    EndIf
  Next i
    
  If i < 127
    IO=GetAnalogIO(*ADUSB, i, 1)
    ;Debug GetAnalogVoltage(*ADUSB, i, IO)
  Else
    MessageRequester("Fehler", "AD_USB2 nicht gefunden.")
  EndIf
    
  Repeat
    Event = WindowEvent()
        Delay(0); gib der CPU etwas Luft :D
        
        SetGadgetText(2,StrD(GetAnalogVoltage(*ADUSB, 0, IO)))
        SetGadgetText(4,StrD(GetAnalogVoltage(*ADUSB, 1, IO)))
        SetGadgetText(6,StrD(GetAnalogVoltage(*ADUSB, 2, IO)))
        SetGadgetText(8,StrD(GetAnalogVoltage(*ADUSB, 3, IO)))
        SetGadgetText(10,StrD(GetAnalogVoltage(*ADUSB, 4, IO)))
        SetGadgetText(12,StrD(GetAnalogVoltage(*ADUSB, 5, IO)))
        SetGadgetText(14,StrD(GetAnalogVoltage(*ADUSB, 6, IO)))
        SetGadgetText(16,StrD(GetAnalogVoltage(*ADUSB, 7, IO))) 
       ;Debug GetAnalogVoltage(*ADUSB, i, IO) ; i entspricht der Kanalnummer

  Until Event = #PB_Event_CloseWindow
   Close(*ADUSB)        
   ;ReleaseInterface(*ADUSB)
   ;ReleaseControl(*Container)
             
  CloseWindow(0)   ; Don't forget this one, else the program will crash
EndIf   

End

;- DataSections AD_USB2XX
DataSection
  IID__DAD_USB2XX: ; BFD9E61F-75C4-4B33-8949-73A64F014514
  Data.l $BFD9E61F
  Data.w $75C4,$4B33
  Data.b $89,$49,$73,$A6,$4F,$01,$45,$14
  IID__DAD_USB2XXEvents: ; 9A894BB7-0F68-429D-A30A-FCE4F6379D78
  Data.l $BFD9E61F
  Data.w $75C4,$4B33
  Data.b $89,$49,$73,$A6,$4F,$01,$45,$14
EndDataSection
[/edit]