Hallo, danke f�r den Tipp. Das muss wird ich mal testen.
Gr��e Oskar -----Urspr�ngliche Nachricht----- Von: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Gesendet: Dienstag, 5. August 2003 21:29 An: [EMAIL PROTECTED] Betreff: [Vb.net] AW: [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, 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 _______________________________________________ Vb.net mailing list [EMAIL PROTECTED] http://www.glengamoi.com/mailman/listinfo/vb.net
