Hallo,
ich kann die Klasse nat�rlich nicht testen, aber was h�lst Du von folgendem:
Dim PLDevice As Byte
Private Sub AxPLServer1_DataArrived(ByVal sender As System.Object, ByVal
e As AxPLSERVERLib._DPLServerEvents_DataArrivedEvent) Handles
AxPLServer1.DataArrived
Dim oT As Thread
PLDevice = Me.AxPLServer1.GetExtraID(e.id)
If PLDevice = 1 Then
Me.TextBox2.Text = PLDevice
ElseIf PLDevice = 2 Then
Me.TextBox3.Text = PLDevice
Else
Exit Sub
End If
If e.frameid = -1 And curFormID <= 0 Then
F_Hauptmen�(PLDevice)
Exit Sub
End If
oT = New Thread(AddressOf LetsDoItWithTheAxPLServer)
oT.Start()
End Sub
Private Sub LetsDoItWithTheAxPLServer()
Dim retval As Boolean
Dim curFormID As Integer
Dim datastr As String
datastr = Me.AxPLServer1.GetData(PLDevice, 0)
curFormID = Me.AxPLServer1.GetFormID(PLDevice)
Me.TextBox1.Text = curFormID
If curFormID = 210 Then
If Me.AxPLServer1.IsData(PLDevice, TERM_BUT) Then
retval = Me.AxPLServer1.ClearCmd(PLDevice, 1, 140, 150)
retval = Me.AxPLServer1.FieldCmd(PLDevice, 47, 128)
retval = Me.AxPLServer1.PopMessage(PLDevice, 82, "Anzahl
Artikel: " & anz_artikel)
retval = Me.AxPLServer1.Send(PLDevice, -1)
anz_artikel = 0
ElseIf Me.AxPLServer1.IsData(PLDevice, BACK_BUT) Then
F_Warenausgang(PLDevice)
Else
DatenKasse(PLDevice)
End If
Exit Sub
End If
If (datastr = "F1" And curFormID = MAIN_MENU) Or
(Me.AxPLServer1.IsData(PLDevice, 45) And curFormID = MAIN_MENU) Then
F_Warenausgang(PLDevice)
Exit Sub
ElseIf (datastr = "F2" And curFormID = MAIN_MENU) Or
(Me.AxPLServer1.IsData(PLDevice, 65) And curFormID = MAIN_MENU) Then
F_Wareneingang(PLDevice)
Exit Sub
ElseIf (datastr = "F3" And curFormID = MAIN_MENU) Or
(Me.AxPLServer1.IsData(PLDevice, 85) And curFormID = MAIN_MENU) Then
F_Inventar(PLDevice)
Exit Sub
ElseIf (datastr = "F4" And curFormID = MAIN_MENU) Or
(Me.AxPLServer1.IsData(PLDevice, 105) And curFormID = MAIN_MENU) Then
F_Abfragen(PLDevice)
Exit Sub
ElseIf (datastr = "F1" And curFormID = M_WARENAUSGANG) Or
(Me.AxPLServer1.IsData(PLDevice, 45) And curFormID = M_WARENAUSGANG) Then
anz_artikel = 0
F_Kasse(PLDevice)
Exit Sub
ElseIf (datastr = "F2" And curFormID = M_WARENAUSGANG) Or
(Me.AxPLServer1.IsData(PLDevice, 65) And curFormID = M_WARENAUSGANG) Then
F_Lieferschein(PLDevice)
Exit Sub
End If
If Me.AxPLServer1.IsData(PLDevice, 18) And curFormID =
M_WARENAUSGANG Then
F_Hauptmen�(PLDevice)
Exit Sub
ElseIf Me.AxPLServer1.IsData(PLDevice, 18) And curFormID = M_KASSE
Then
F_Warenausgang(PLDevice)
End If
End Sub
-----Urspr�ngliche Nachricht-----
Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]
Auftrag von Oskar Vaia
Gesendet: Dienstag, 5. August 2003 09:06
An: [EMAIL PROTECTED]
Betreff: [Vb.net] AW: [Vb.net] AW: [Vb.net] AW: [Vb.net] AW: [Vb.net]
AW: [Vb.net] [Vb.net] ereignis eines OCX-objektes ausf�hren mehrmals
(multithreading?)
Hallo,
hier mal der gesamte Code:
die Sub-Routine "AxPLServer1_DataArrived" wird vom OCX-Objekt ausgel�st,
sobald Daten vom Barcode-Leseger�t gesendet werden. Auch die dazugeh�renden
Parameter werden vom OCX-Objekt �bergeben.
Und genau hier m�chte ich eigentlich erreichen, dass wenn die Prozedur
bereits in Ausf�hrung ist und ein weiteres Ger�t sendet, die Prozedur
nochmals starten kann mit den dazugeh�renden Parametern.
Gr��e
Oskar
------------------------------------
Public Class Form1
Inherits System.Windows.Forms.Form
Dim ss_id As Short
Dim anz_artikel As Short
'frameID constants
Const MAIN_MENU As Integer = 10
Const M_WARENAUSGANG As Integer = 20
Const M_KASSE As Integer = 210
Const M_LIEFERSCHEIN As Integer = 220
Const M_WARENEINGANG As Integer = 30
Const M_INVENTAR As Integer = 40
Const M_ABFRAGEN As Integer = 50
Const BACK_BUT As Integer = 18
Const TERM_BUT As Integer = 155
'NEW_FIELD constants
Const SND_ENTER As Byte = 1
Const NO_SEND As Byte = 2
Const SND_ALL As Byte = 4
Const FLD_LOCK As Byte = 8
Const FLD_LINE As Byte = 16
Const FLD_READER As Byte = 32
Const FLD_CLR As Byte = 64
Const FLD_ACTIVE As Byte = 128
'NEW_FIELD_EX constants
Const SND_ENTER_EX As Byte = 1
Const NO_SEND_EX As Byte = 2
Const SND_ALL_EX As Byte = 4
Const OVR_EX As Byte = 16
Const FLD_READER_EX As Byte = 32
Const READER_DEFAULT_EX As Byte = 64
Const FLD_ACTIVE_EX As Byte = 128
#Region " Vom Windows Form Designer generierter Code "
Public Sub New()
MyBase.New()
' Dieser Aufruf ist f�r den Windows Form-Designer erforderlich.
InitializeComponent()
' Initialisierungen nach dem Aufruf InitializeComponent() hinzuf�gen
End Sub
' Die Form �berschreibt den L�schvorgang der Basisklasse, um Komponenten
zu bereinigen.
Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
If disposing Then
If Not (components Is Nothing) Then
components.Dispose()
End If
End If
MyBase.Dispose(disposing)
End Sub
' F�r Windows Form-Designer erforderlich
Private components As System.ComponentModel.IContainer
'HINWEIS: Die folgende Prozedur ist f�r den Windows Form-Designer
erforderlich
'Sie kann mit dem Windows Form-Designer modifiziert werden.
'Verwenden Sie nicht den Code-Editor zur Bearbeitung.
Friend WithEvents AxPLServer1 As AxPLSERVERLib.AxPLServer
Friend WithEvents Verbinden As System.Windows.Forms.Button
Friend WithEvents Trennen As System.Windows.Forms.Button
Friend WithEvents TextBox1 As System.Windows.Forms.TextBox
Friend WithEvents Label1 As System.Windows.Forms.Label
Friend WithEvents TextBox2 As System.Windows.Forms.TextBox
Friend WithEvents Label2 As System.Windows.Forms.Label
Friend WithEvents TextBox3 As System.Windows.Forms.TextBox
Friend WithEvents Label3 As System.Windows.Forms.Label
<System.Diagnostics.DebuggerStepThrough()> Private Sub
InitializeComponent()
Dim resources As System.Resources.ResourceManager = New
System.Resources.ResourceManager(GetType(Form1))
Me.AxPLServer1 = New AxPLSERVERLib.AxPLServer
Me.Verbinden = New System.Windows.Forms.Button
Me.Trennen = New System.Windows.Forms.Button
Me.TextBox1 = New System.Windows.Forms.TextBox
Me.Label1 = New System.Windows.Forms.Label
Me.TextBox2 = New System.Windows.Forms.TextBox
Me.Label2 = New System.Windows.Forms.Label
Me.TextBox3 = New System.Windows.Forms.TextBox
Me.Label3 = New System.Windows.Forms.Label
CType(Me.AxPLServer1,
System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'AxPLServer1
'
Me.AxPLServer1.Enabled = True
Me.AxPLServer1.Location = New System.Drawing.Point(16, 16)
Me.AxPLServer1.Name = "AxPLServer1"
Me.AxPLServer1.OcxState =
CType(resources.GetObject("AxPLServer1.OcxState"),
System.Windows.Forms.AxHost.State)
Me.AxPLServer1.Size = New System.Drawing.Size(200, 72)
Me.AxPLServer1.TabIndex = 0
'
'Verbinden
'
Me.Verbinden.Location = New System.Drawing.Point(16, 96)
Me.Verbinden.Name = "Verbinden"
Me.Verbinden.Size = New System.Drawing.Size(96, 24)
Me.Verbinden.TabIndex = 1
Me.Verbinden.Text = "Verbinden"
'
'Trennen
'
Me.Trennen.Location = New System.Drawing.Point(120, 96)
Me.Trennen.Name = "Trennen"
Me.Trennen.Size = New System.Drawing.Size(96, 24)
Me.Trennen.TabIndex = 2
Me.Trennen.Text = "Trennen"
'
'TextBox1
'
Me.TextBox1.Location = New System.Drawing.Point(120, 192)
Me.TextBox1.Name = "TextBox1"
Me.TextBox1.Size = New System.Drawing.Size(96, 20)
Me.TextBox1.TabIndex = 3
Me.TextBox1.Text = ""
'
'Label1
'
Me.Label1.Location = New System.Drawing.Point(16, 192)
Me.Label1.Name = "Label1"
Me.Label1.Size = New System.Drawing.Size(88, 16)
Me.Label1.TabIndex = 4
Me.Label1.Text = "curFormID"
'
'TextBox2
'
Me.TextBox2.Location = New System.Drawing.Point(16, 160)
Me.TextBox2.Name = "TextBox2"
Me.TextBox2.Size = New System.Drawing.Size(51, 20)
Me.TextBox2.TabIndex = 5
Me.TextBox2.Text = ""
'
'Label2
'
Me.Label2.Location = New System.Drawing.Point(16, 136)
Me.Label2.Name = "Label2"
Me.Label2.Size = New System.Drawing.Size(43, 16)
Me.Label2.TabIndex = 6
Me.Label2.Text = "PLDevice1"
'
'TextBox3
'
Me.TextBox3.Location = New System.Drawing.Point(80, 160)
Me.TextBox3.Name = "TextBox3"
Me.TextBox3.Size = New System.Drawing.Size(51, 20)
Me.TextBox3.TabIndex = 7
Me.TextBox3.Text = ""
'
'Label3
'
Me.Label3.Location = New System.Drawing.Point(80, 136)
Me.Label3.Name = "Label3"
Me.Label3.Size = New System.Drawing.Size(51, 16)
Me.Label3.TabIndex = 8
Me.Label3.Text = "PLDevice2"
'
'Form1
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.ClientSize = New System.Drawing.Size(232, 222)
Me.Controls.Add(Me.Label3)
Me.Controls.Add(Me.TextBox3)
Me.Controls.Add(Me.Label2)
Me.Controls.Add(Me.TextBox2)
Me.Controls.Add(Me.Label1)
Me.Controls.Add(Me.TextBox1)
Me.Controls.Add(Me.Trennen)
Me.Controls.Add(Me.Verbinden)
Me.Controls.Add(Me.AxPLServer1)
Me.Name = "Form1"
Me.Text = "Form1"
CType(Me.AxPLServer1,
System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
Private Sub AxPLServer1_DataArrived(ByVal sender As System.Object, ByVal
e As AxPLSERVERLib._DPLServerEvents_DataArrivedEvent) Handles
AxPLServer1.DataArrived
Dim retval As Boolean
Dim curFormID As Integer
Dim datastr As String
Dim PLDevice As Byte
PLDevice = Me.AxPLServer1.GetExtraID(e.id)
If PLDevice = 1 Then
Me.TextBox2.Text = PLDevice
ElseIf PLDevice = 2 Then
Me.TextBox3.Text = PLDevice
Else
Exit Sub
End If
datastr = Me.AxPLServer1.GetData(e.id, 0)
curFormID = Me.AxPLServer1.GetFormID(e.id)
If e.frameid = -1 And curFormID <= 0 Then
F_Hauptmen�(e.id)
Exit Sub
End If
Me.TextBox1.Text = curFormID
If curFormID = 210 Then
If Me.AxPLServer1.IsData(e.id, TERM_BUT) Then
retval = Me.AxPLServer1.ClearCmd(e.id, 1, 140, 150)
retval = Me.AxPLServer1.FieldCmd(e.id, 47, 128)
retval = Me.AxPLServer1.PopMessage(e.id, 82, "Anzahl
Artikel: " & anz_artikel)
retval = Me.AxPLServer1.Send(e.id, -1)
anz_artikel = 0
ElseIf Me.AxPLServer1.IsData(e.id, BACK_BUT) Then
F_Warenausgang(e.id)
Else
DatenKasse(e.id)
End If
Exit Sub
End If
If (datastr = "F1" And curFormID = MAIN_MENU) Or
(Me.AxPLServer1.IsData(e.id, 45) And curFormID = MAIN_MENU) Then
F_Warenausgang(e.id)
Exit Sub
ElseIf (datastr = "F2" And curFormID = MAIN_MENU) Or
(Me.AxPLServer1.IsData(e.id, 65) And curFormID = MAIN_MENU) Then
F_Wareneingang(e.id)
Exit Sub
ElseIf (datastr = "F3" And curFormID = MAIN_MENU) Or
(Me.AxPLServer1.IsData(e.id, 85) And curFormID = MAIN_MENU) Then
F_Inventar(e.id)
Exit Sub
ElseIf (datastr = "F4" And curFormID = MAIN_MENU) Or
(Me.AxPLServer1.IsData(e.id, 105) And curFormID = MAIN_MENU) Then
F_Abfragen(e.id)
Exit Sub
ElseIf (datastr = "F1" And curFormID = M_WARENAUSGANG) Or
(Me.AxPLServer1.IsData(e.id, 45) And curFormID = M_WARENAUSGANG) Then
anz_artikel = 0
F_Kasse(e.id)
Exit Sub
ElseIf (datastr = "F2" And curFormID = M_WARENAUSGANG) Or
(Me.AxPLServer1.IsData(e.id, 65) And curFormID = M_WARENAUSGANG) Then
F_Lieferschein(e.id)
Exit Sub
End If
If Me.AxPLServer1.IsData(e.id, 18) And curFormID = M_WARENAUSGANG
Then
F_Hauptmen�(e.id)
Exit Sub
ElseIf Me.AxPLServer1.IsData(e.id, 18) And curFormID = M_KASSE Then
F_Warenausgang(e.id)
End If
End Sub
Private Sub F_Hauptmen�(ByVal id As Long)
Dim retval As Boolean
retval = Me.AxPLServer1.ClearForm(id) 'PiccoLink-Display wird
gel�scht
retval = Me.AxPLServer1.CtlText(id, 3, "** HAUPTMEN� **")
retval = Me.AxPLServer1.CtlText(id, 40, "(F1)")
retval = Me.AxPLServer1.Button(id, 45, "Warenausgang")
retval = Me.AxPLServer1.CtlText(id, 60, "(F2)")
'retval = Me.AxPLServer1.Button(id, 65, "Wareneingang")
retval = Me.AxPLServer1.CtlText(id, 65, "Wareneingang")
retval = Me.AxPLServer1.CtlText(id, 80, "(F3)")
'retval = Me.AxPLServer1.Button(id, 85, "Inventar")
retval = Me.AxPLServer1.CtlText(id, 85, "Inventar")
retval = Me.AxPLServer1.CtlText(id, 100, "(F4)")
'retval = Me.AxPLServer1.Button(id, 105, "Abfragen")
retval = Me.AxPLServer1.CtlText(id, 105, "Abfragen")
retval = Me.AxPLServer1.SetFormID(id, MAIN_MENU)
retval = Me.AxPLServer1.Send(id, MAIN_MENU)
End Sub
Private Sub F_Warenausgang(ByVal id As Long)
Dim retval As Boolean
retval = Me.AxPLServer1.ClearForm(id)
retval = Me.AxPLServer1.CtlText(id, 0, "** Warenausgang **")
retval = Me.AxPLServer1.CtlText(id, 40, "(F1)")
retval = Me.AxPLServer1.Button(id, 45, "Kasse")
retval = Me.AxPLServer1.CtlText(id, 60, "(F2)")
retval = Me.AxPLServer1.Button(id, 65, "Lieferschein")
retval = Me.AxPLServer1.Button(id, BACK_BUT, Chr(164) + Chr(165))
retval = Me.AxPLServer1.SetFormID(id, M_WARENAUSGANG)
retval = Me.AxPLServer1.Send(id, M_WARENAUSGANG)
End Sub
Private Sub F_Wareneingang(ByVal id As Long)
Dim retval As Boolean
retval = Me.AxPLServer1.PopMessage(id, 65, "Im Aufbau!")
retval = Me.AxPLServer1.Send(id, -1)
End Sub
Private Sub F_Inventar(ByVal id As Long)
Dim retval As Boolean
retval = Me.AxPLServer1.PopMessage(id, 65, "Im Aufbau!")
retval = Me.AxPLServer1.Send(id, -1)
End Sub
Private Sub F_Abfragen(ByVal id As Long)
Dim retval As Boolean
retval = Me.AxPLServer1.PopMessage(id, 65, "Im Aufbau!")
retval = Me.AxPLServer1.Send(id, -1)
End Sub
Private Sub F_Kasse(ByVal id As Long)
Dim retval As Boolean
retval = Me.AxPLServer1.ClearForm(id)
retval = Me.AxPLServer1.CtlText(id, 0, "** Kasse **")
retval = Me.AxPLServer1.CtlText(id, 40, "Menge:")
'retval = Me.AxPLServer1.NewFieldEx(id, 87, 8, SND_ENTER_EX +
SND_ALL_EX + OVR_EX)
retval = Me.AxPLServer1.NewField(id, 47, 8, FLD_LINE + FLD_CLR +
FLD_ACTIVE)
retval = Me.AxPLServer1.CtlText(id, 60, "Artikel:")
'retval = Me.AxPLServer1.NewFieldEx(id, 60, 13, OVR_EX +
FLD_READER_EX + READER_DEFAULT_EX + FLD_ACTIVE_EX)
retval = Me.AxPLServer1.NewField(id, 80, 13, SND_ENTER + SND_ALL +
FLD_LINE + FLD_READER + FLD_CLR)
retval = Me.AxPLServer1.Button(id, TERM_BUT, "ENDE")
retval = Me.AxPLServer1.Button(id, BACK_BUT, Chr(164) + Chr(165))
retval = Me.AxPLServer1.SetFormID(id, M_KASSE)
retval = Me.AxPLServer1.Send(id, M_KASSE)
End Sub
Private Sub F_Lieferschein(ByVal id As Long)
Dim retval As Boolean
retval = Me.AxPLServer1.PopMessage(id, 65, "Im Aufbau!")
retval = Me.AxPLServer1.Send(id, -1)
End Sub
Private Sub DatenKasse(ByVal id As Long)
Dim retval As Boolean
Dim Artikel As String
Dim Menge As Single
Dim fs As Object
Dim f, ts
Try
Artikel = Me.AxPLServer1.GetData(id, 80)
Menge = Convert.ToSingle(Me.AxPLServer1.GetData(id, 47))
Catch Ausnahme As FormatException
Menge = 0
Catch Ausnahme As ArgumentException
Menge = 0
End Try
If Artikel <> "" And Menge <> 0 Then
anz_artikel = anz_artikel + 1
fs = CreateObject("Scripting.FileSystemObject")
'On Error GoTo ErrorHandler
If fs.FileExists("C:\test.dat") = False Then
fs.CreateTextFile("C:\test.dat") 'Create a file if not
exists
End If
f = fs.GetFile("C:\test.dat") 'Get file object
ts = f.OpenAsTextStream(8, 0)
ts.Write(id & " " & Artikel & " " & Menge & " " &
System.DateTime.Now & vbCrLf) 'Write to file and add linefeed
ts.Close()
End If
'retval = Me.AxPLServer1.ClearCmd(id, 4, 46, 49)
'retval = Me.AxPLServer1.ClearCmd(id, 4, 68, 78)
retval = Me.AxPLServer1.CtlText(id, 140, anz_artikel)
retval = Me.AxPLServer1.FieldCmd(id, 47, 128)
retval = Me.AxPLServer1.Ack(id)
retval = Me.AxPLServer1.Send(id, 1)
End Sub
Private Sub Verbinden_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Verbinden.Click
Dim retval As Short
retval = Me.AxPLServer1.ConnectToSerialServer("192.168.1.40", 4660)
If (retval = -1) Then
MsgBox("Verbindung zum Ethernet-Adapter konnte nicht hergestellt
werden")
Else
ss_id = retval
End If
End Sub
Private Sub Trennen_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Trennen.Click
Me.AxPLServer1.DisconnectSerialServer(ss_id)
End Sub
End Class
-----------------------------------------
_______________________________________________
Vb.net mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/vb.net
_______________________________________________
Vb.net mailing list
[EMAIL PROTECTED]
http://www.glengamoi.com/mailman/listinfo/vb.net