von F3K Total » So, 06.04.2014 08:06
Hi,
CADdy hat geschrieben:Die Leute sollen nur sehen, was sie einscannen. Also ist die erste Option sinnvoll.
Das sehe ich etwas anders. Was machst Du, wenn der falsche Code gescant wurde, oder aus Versehen doppelt? Kann ja leicht passieren.
Ich empfehle Version 3, mit einem Tabellenkontrollfeld, das z.B. die letzen 5 gescanten Datensätze anzeigt, und die Möglichkeit bietet, einen fehlerhaften Datensatz zu löschen.
Nun zur Version 1:
Leider hast Du nicht erwähnt, dass meine o.a Version, in der das Makro
split_scancode an das Ereignis
Text modifiziert gebunden ist, nicht funktioniert, da das Makro nach jedem Buchstaben ausgeführt wird.
Darum anbei nun eine Version, die ich mit meinem Scanner geprüft habe.
Das Makro wird nach dem Ereignis
Taste lossgelassen ausgeführt, und prüft tatsächlich auf ENTER.
Standardschaltfläche = Nein, dann reagiert der nun umbenannte Button nicht auf Enter und beendet den Dialog nicht mit jedem Scanvorgang, sondern erst, wenn der Button gedrück wird.
Ich habe mal für 2 Sekunden 'ne Farbwechselaktion eingebaut, als Feedback, siehe Beispiel.
Hier der neue Code
Code: Alles auswählen
dim sScancode as string ' scancode vom Scanner
dim sPalette as string ' Palettennummer
dim sArtikel as string ' Artikelnummer
dim sMenge as string ' Menge auf der Palette
dim iPalette as long ' Palettennummer als Zahl
dim iArtikel as long ' Artikelnummer als Zahl
dim iMenge as long ' Menge als Zahl
dim datum as date ' Datentyp zuweisen
dim zeit as date
Dim readTextField As Object
Dim writeScancode As Object
Dim writePalettennummer as Object
Dim writeArtikelnummer as Object
Dim writeMenge as Object
Dim writeDatum as Object
Dim writeZeit as Object
Dim oDlg_Dateneingabe as Object
REM ##########################################################
sub Dialog1Show
DialogLibraries.loadLibrary("Standard")
oDlg_Dateneingabe = CreateUnoDialog(DialogLibraries.Standard.Dlg_Dateneingabe)
oDlg_Dateneingabe.Execute
End Sub
sub split_scancode(oEvt)
if oEvt.keycode = 1280 then
readTextField = oDlg_Dateneingabe.getControl("TextField1")
writePalettennummer = oDlg_Dateneingabe.getControl("TextField2")
writeArtikelnummer = oDlg_Dateneingabe.getControl("TextField3")
writeMenge = oDlg_Dateneingabe.getControl("TextField4")
writedatum = oDlg_Dateneingabe.getControl("DateField1")
writezeit = oDlg_Dateneingabe.getcontrol("TimeField1")
writePalettennummer.setText("")
writeArtikelnummer.setText("")
writeMenge.setText("")
writedatum.setText("")
writezeit.setText("")
sScancode = readTextField.Model.Text
' zerlegen des Scancodes in die Einzelteile und Umwandlung in Zahlen
sPalette = left(sScancode,8)
sArtikel = mid(sScancode,10,6)
sMenge = mid(sScancode,17,6)
iPalette = sPalette
iArtikel = sArtikel
iMenge = sMenge
sMenge = iMenge
datum = Date()
zeit = Time()
writePalettennummer.setText(sPalette)
writeArtikelnummer.setText(sArtikel)
writeMenge.setText(sMenge)
writedatum.setText(datum)
writezeit.setText(zeit)
'Farbaktion
oDlg_Dateneingabe.model.BackgroundColor = 38400
wait 2000
oDlg_Dateneingabe.model.BackgroundColor = empty
readTextField.Model.Text = ""
endif
end sub
HTH R
- Dateianhänge
-
- Scandialog.odt
- (12.15 KiB) 69-mal heruntergeladen
Hi,[quote="CADdy"]Die Leute sollen nur sehen, was sie einscannen. Also ist die erste Option sinnvoll. [/quote]Das sehe ich etwas anders. Was machst Du, wenn der falsche Code gescant wurde, oder aus Versehen doppelt? Kann ja leicht passieren.
Ich empfehle Version 3, mit einem Tabellenkontrollfeld, das z.B. die letzen 5 gescanten Datensätze anzeigt, und die Möglichkeit bietet, einen fehlerhaften Datensatz zu löschen.
[b]
Nun zur Version 1:[/b]
Leider hast Du nicht erwähnt, dass meine o.a Version, in der das Makro [color=#0040FF]split_scancode[/color] an das Ereignis [color=#0040FF]Text modifiziert[/color] gebunden ist, nicht funktioniert, da das Makro nach jedem Buchstaben ausgeführt wird.
Darum anbei nun eine Version, die ich mit meinem Scanner geprüft habe.
Das Makro wird nach dem Ereignis [color=#0040FF]Taste lossgelassen[/color] ausgeführt, und prüft tatsächlich auf ENTER.
Standardschaltfläche = Nein, dann reagiert der nun umbenannte Button nicht auf Enter und beendet den Dialog nicht mit jedem Scanvorgang, sondern erst, wenn der Button gedrück wird.
Ich habe mal für 2 Sekunden 'ne Farbwechselaktion eingebaut, als Feedback, siehe Beispiel.
Hier der neue Code[code] dim sScancode as string ' scancode vom Scanner
dim sPalette as string ' Palettennummer
dim sArtikel as string ' Artikelnummer
dim sMenge as string ' Menge auf der Palette
dim iPalette as long ' Palettennummer als Zahl
dim iArtikel as long ' Artikelnummer als Zahl
dim iMenge as long ' Menge als Zahl
dim datum as date ' Datentyp zuweisen
dim zeit as date
Dim readTextField As Object
Dim writeScancode As Object
Dim writePalettennummer as Object
Dim writeArtikelnummer as Object
Dim writeMenge as Object
Dim writeDatum as Object
Dim writeZeit as Object
Dim oDlg_Dateneingabe as Object
REM ##########################################################
sub Dialog1Show
DialogLibraries.loadLibrary("Standard")
oDlg_Dateneingabe = CreateUnoDialog(DialogLibraries.Standard.Dlg_Dateneingabe)
oDlg_Dateneingabe.Execute
End Sub
sub split_scancode(oEvt)
if oEvt.keycode = 1280 then
readTextField = oDlg_Dateneingabe.getControl("TextField1")
writePalettennummer = oDlg_Dateneingabe.getControl("TextField2")
writeArtikelnummer = oDlg_Dateneingabe.getControl("TextField3")
writeMenge = oDlg_Dateneingabe.getControl("TextField4")
writedatum = oDlg_Dateneingabe.getControl("DateField1")
writezeit = oDlg_Dateneingabe.getcontrol("TimeField1")
writePalettennummer.setText("")
writeArtikelnummer.setText("")
writeMenge.setText("")
writedatum.setText("")
writezeit.setText("")
sScancode = readTextField.Model.Text
' zerlegen des Scancodes in die Einzelteile und Umwandlung in Zahlen
sPalette = left(sScancode,8)
sArtikel = mid(sScancode,10,6)
sMenge = mid(sScancode,17,6)
iPalette = sPalette
iArtikel = sArtikel
iMenge = sMenge
sMenge = iMenge
datum = Date()
zeit = Time()
writePalettennummer.setText(sPalette)
writeArtikelnummer.setText(sArtikel)
writeMenge.setText(sMenge)
writedatum.setText(datum)
writezeit.setText(zeit)
'Farbaktion
oDlg_Dateneingabe.model.BackgroundColor = 38400
wait 2000
oDlg_Dateneingabe.model.BackgroundColor = empty
readTextField.Model.Text = ""
endif
end sub[/code]
HTH R