Menüeinträge zur Laufzeit erstellen und markieren

  • VB.NET
  • .NET (FX) 3.0–3.5

Es gibt 69 Antworten in diesem Thema. Der letzte Beitrag () ist von tron25.

    Hm, keine Ahnung. Aber Scanner.Items(1).Transfer() scheint etwas vom Typ Object zurückzugeben, obwohl Du es in eine Variable vom Typ ImageFile stecken willst. Wenn Du 100%ig weißt, dass bei Scanner.Items(1).Transfer() eine ImageFile rauskommt, kannst Du in den Zieltyp casten:

    VB.NET-Quellcode

    1. Dim Scannergebnis As WIA.ImageFile = DirectCast(Scanner.Items(1).Transfer(), WIA.ImageFile)
    Wenn bei Transfer allerdings was anderes rauskommt, wird das zurecht scheitern.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wegen meines neuen Blindenhundes hatte ich die letzte Woche nicht so viel Zeit, mich um mein Scanproblem zu kümmern.
    Ab und zu konnte ich doch im Internet nach Lösungen oder Beispielen suchen. So, wie es aussieht, stehe ich mit meinem Problem ziemlich alleine dar. Ich habe eine Lösung gefunden, die Eigenschaften im Scandialog auszublenden. Trotzdem muß der Benutzer noch die "Start"-Schaltfläche anklicken.
    Wie schon geschrieben, hatte es funktioniert, als ich die "Option Strict" auf "Off" gesetzt hatte. Das bedeutet, dass der Compile einen Weg hat, ohne ein Dialogfenster scannen zu können. Kann man irgendwie herausfinden, wie der Compiler das macht? Wenn nicht, bleibt mir vorerst nichts anderes übrig, als diesen Teil der Funktion auszublenden und nur das Scanen über das Dialogfenster anzubieten.
    Für weitere Ideen wäre ich sehr dankbar.
    Option Strict Off funktioniert in erster Linie mit impliziter Typumwandlung.
    Wenn Du schreibst Dim Scannergebnis As WIA.ImageFile = Scanner.Items(1).Transfer() und das klappt, dann wandelt der Compiler das Transferergebnis von Object nach WIA.ImageFile um. Bei Option Strict On musst Du das eben selber machen. Das ist das m.E. einzige, was Du machen musst.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das Problem ist, das diese Datei das Hauptformular des Projektes ist. Ich werde natürlich "Option Strict" auf "On" lassen.
    Die Zeile von Vaporized gibt keinen Fehler mehr zurück. Allerdings habe ich noch Probleme mit den voreingestellten Eigenschaften für den Scan. Ich werde mich morgen und in den nächsten Tagen darum kümmern und gebe dann Bescheid, wenn ich es hinbekommen habe, oder auch nicht.
    Welche Zeilen sind es denn konkret, welche noch Fehler in Option Strict On erzeugen? Und welche Fehler sind es konkret (bitte konkreten Wortlaut)?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Das Problem habe ich selbst lösen können. Hier die fertige Funktion:

    VB.NET-Quellcode

    1. Dim GescanntesBild As Bitmap
    2. Dim Scannerdialog As Integer 'Soll das Dialogfenster angezeigt werden?
    3. dim ScannerQualitaet As Integer
    4. Dim ScannerDPI As Integer
    5. Private Sub Scannen()
    6. Dim ScanDialog As New WIA.CommonDialog
    7. Try
    8. 'Aufruf der Windows GUI zur Interaktion mit dem Gerät,
    9. 'rückgabe ist das erfasste Bild
    10. If Scannerdialog = 1 Then
    11. Dim Scannergebnis As WIA.ImageFile = Nothing
    12. Scannergebnis = ScanDialog.ShowAcquireImage(WIA.WiaDeviceType.ScannerDeviceType, WIA.WiaImageIntent.GrayscaleIntent, WIA.WiaImageBias.MaximizeQuality, WIAFormatJPEG, False, False, False)
    13. Application.DoEvents()
    14. If Scannergebnis IsNot Nothing Then
    15. Dim vector As WIA.Vector = Scannergebnis.FileData
    16. GescanntesBild = New Bitmap(Image.FromStream(New MemoryStream(CType(vector.BinaryData(), Byte()))))
    17. End If
    18. Else
    19. Dim Scanner As WIA.Device = ScanDialog.ShowSelectDevice(WIA.WiaDeviceType.ScannerDeviceType, False, False)
    20. Dim DPI As Integer = Convert.ToInt16(ScannerDPI)
    21. '4 = SW, 2 = Graustufe, 1 = Color
    22. Select Case ScannerQualitaet
    23. Case 0
    24. Scanner.Items(1).Properties("Current Intent").Value = 4
    25. Case 1
    26. Scanner.Items(1).Properties("Current Intent").Value = 2
    27. Case Else
    28. Scanner.Items(1).Properties("Current Intent").Value = 1
    29. End Select
    30. Scanner.Items(1).Properties("Horizontal Resolution").Value = DPI ' dots per inch/Horizontal
    31. Scanner.Items(1).Properties("Vertical Resolution").Value = DPI ' dots per inch/Vertikal
    32. Scanner.Items(1).Properties("Horizontal Start Position").Value = 0 ' x links oben
    33. Scanner.Items(1).Properties("Vertical Start Position").Value = 0 ' y links oben
    34. ' Scanner.Items(1).Properties("Horizontal Extent").Value = 8.5 * DPI // Breite = inch * DPI
    35. ' Scanner.Items(1).Properties("Vertical Extent").Value = 11 * dpi // Höhe = inch * dpi
    36. Me.Enabled = False
    37. InfoFormular.Text = My.Resources.Bitte_warten
    38. InfoFormular.Label1.Text = My.Resources.Scanvorgang_laeuft
    39. InfoFormular.OKBefehl.Visible = False
    40. InfoFormular.Show()
    41. 'Dim Scannergebnis As WIA.ImageFile = Scanner.Items(1).Transfer()
    42. Dim Scannergebnis As WIA.ImageFile = DirectCast(Scanner.Items(1).Transfer(), WIA.ImageFile)
    43. Application.DoEvents()
    44. If Scannergebnis IsNot Nothing Then
    45. Dim vector As WIA.Vector = Scannergebnis.FileData
    46. GescanntesBild = New Bitmap(Image.FromStream(New MemoryStream(CType(vector.BinaryData(), Byte()))))
    47. End If
    48. InfoFormular.Close()
    49. Me.Enabled = True
    50. End If
    51. Catch Fehler As Exception
    52. InfoFormular.Text = My.Resources.Fehler
    53. InfoFormular.Label1.Text = My.Resources.Fehler_Scanner_ueberpruefen
    54. InfoFormular.ShowDialog(Me)
    55. InfoFormular.Close()
    56. End Try
    57. End Sub


    Nochmal vielen Dank für eure Hilfen
    off topic:

    tron25 schrieb:

    ... Hier die fertige Funktion:

    Es handelt sich um eine Sub nicht eine Function.
    Subs als auch Functions sind beides Methoden bzw. Prozeduren.
    Functions geben einen Wert zurück, Subs nicht.