Home
Leseprobe - Carl Hanser Verlag
Contents
1. HINWEIS Kompilieren Sie abschlie end die Klassenbibliothek um die gew nschte Assembly zu erstellen Anwendungsprogramm Damit endet auch schon unser kurzer Ausflug in die Library Programmierung und wir kehren wie der zu unserer vertrauten Programmiersprache zur ck Einbinden der Assembly W hlen Sie in der Solution das Windows Forms Projekt und f gen Sie eine Referenz auf die oben erstellte Klassenbibliothek hinzu Verweis hinzuf gen Projekte R196 OpenOffice org Writer per OLE steuern 629 b Assemblys Suchen Projektmappe CtrI P 4 Projektmappe M OOWLIb C Users Thomas Des Projekte b COM b Durchsuchen Nachfolgend kommen wir schon in den Genuss der vollen Funktionalit t unserer Assembly wir m ssen den Namespace nur noch importieren Oberfl che Die Oberfl che beschr nkt sich auf einen Button und einen FileSaveDialog Quelltext Um das Beispiel nicht auf ein simples Hello World zu beschr nken wollen wir den Inhalt einer XML Datei formatiert ausgeben HINWEIS Die dazu n tige XML Datei finden Sie in den Beispieldaten zum Buch Import der beiden ben tigten Namespaces Imports OOWLib Imports System Xml Linq Public Class Forml Eine Instanz f r die Elemente der XML Datei Private Artikelliste As XElement Public Sub New InitializeComponent Hier laden wir die XML Beispieldaten Artikelliste XElement Load Artikel xml End Sub 630 8 Schnittstellen Mit d
2. eben Sie die 3 Zahl ein i as Maximum ist 6 as Minimum ist i er Durchschnitt ist 1 67 ollen Sie das Programm beenden j n j_ m w Bemerkungen In unserem Quellcode wurden Variablen auf globaler Ebene g ltig innerhalb des gesamten Programms und auf lokaler Ebene g ltig innerhalb der Methode berechne benutzt Eine lokale Variable hat immer Vorrang vor einer gleichnamigen globalen Variablen Die ToString 0 00 Methode besitzt hier einen so genannten Formatierungsstring als Argu ment damit der Durchschnitt eine Gleitkommazahl so in eine Zeichenkette umgeformt wird dass immer zwei Nachkommastellen angezeigt werden Die Length Eigenschaft der arr Variablen liefert die Anzahl der Array Elemente Da die Indi zierung eines dynamischen Arrays stets mit null beginnt ist der h chste Index immer um Eins niedriger Ein Unterprogramm hier die benutzerdefinierte Methode berechne ist immer dann zweckm Big wenn die bersichtlichkeit des Programms erh ht werden soll oder aber wenn gleiche Co deabschnitte mehrfach ausgef hrt werden sollen Au erdem wird ein Wiederverwendbarkeit des Quellcodes erleichtert Nicht nur der trostlose Textbildschirm auch die m hselige Bedienung bei der der Rechner die Reihenfolge der Benutzereingaben zwangsweise vorgibt wird Ihnen missfallen haben Dies sollte ein weiterer wichtiger Grund daf r sein von der Konsolen zur Windows Anwendung berzugehen siehe folge
3. Durch Klick auf die Schaltfl che NEU f llt sich die linke ListBox mit Zufallszahlen Nachdem Sie aber auf die Schaltfl che SORTIER klicken wird Ihr Tatendrang h chstwahrscheinlich durch die Meldung Loader Lock wurde erkannt gestoppt Wie Sie diese Meldung die in der Regel nicht auf einen echten Fehler hinweist sondern eine reine Vorsichtsma nahme der IDE ist umgehen k nnen erl utern wir unter den Bemerkungen am Schluss F r unser einfaches Beispiel kommen Sie aber wahrscheinlich viel eher zum Erfolg wenn Sie Visual Studio verlassen und die Datei Test DLL exe direkt durch Doppelklick ffnen Nach dem F llen der linken ListBox und Klick auf die Schaltfl che SORTIER d rfte zun chst die folgende Meldung erscheinen Fe DLL wurde geladen 666 8 Schnittstellen Der Inhalt der rechten ListBox berzeugt Sie nun hoffentlich vom korrekten Funktionieren Ihrer DLL Dlfst Tolle 42 0 z 29 7 0 E T IE 36 2 2 2 38 2 88 3 31 4 83 6 71 9 9 my9 NEU SORTIER Ein erneuter Klick auf SORTIER f hrt nicht zu einer erneuten Anzeige obiger Informations meldung da die DLL noch geladen ist Erst nach dem Beenden der Anwendung taucht uner wartet ein weiterer Dialog auf Bemerkungen Damit Sie Ihren Programmcode unter Visual Studio debuggen k nnen gibt es die M glichkeit das Anhalten des Debuggers beim Ereignis LoaderLock zu deaktivieren Gehen Sie dazu ber das Men D
4. img proc Appiy img img SaveFile c test tiff End If End Sub BEISPIEL Verf gbare Filter anzeigen Private Sub Button7_Click sender As Object e As EventArgs _ Handles Button7 Click Dim proc As New WIA ImageProcess For Each fil As WIA FilterInfo In proc FilterInfos ListBox1 Items Add fil Name Next fil End Sub BEISPIEL Namen der verf gbaren Filter RotateRlip Crop Scale Stamp Exif Frame ARGB Convert Nat rlich k nnen Sie mit den WIA Objekten noch weit mehr anfangen aber f r einen ersten Ein stieg d rften die bisherigen Ausf hrungen sicherlich gen gen R193 Auf eine Webcam zugreifen Haben Sie schon einmal daran gedacht Bilder Ihrer Webcam per VB Programm abzurufen und gegebenenfalls auf einem Server abzulegen Wenn ja finden Sie mit Hilfe der Microsoft WIA Library eine recht einfache L sung Zu den Grundlagen der WIA siehe Rezept gt R192 Die WIA Library kennenlernen 614 8 Schnittstellen Oberfl che Ein einfaches Windows Form mit einer PictureBox und einem Timer den Sie bitte auf einen nicht zu kleinen Wert einstellen z B 10000 f r 10 Sekunden HINWEIS Binden Sie zus tzlich die Microsoft Windows Image Acquisition Library v2 0 in Ihr VB Projekt ein Projekt Verweis hinzuf gen COM Quelltext Binden Sie f r die Stream Unterst tzung den folgenden Namespace ein Imports System I0 Public Class Forml Die Konstante f r die Aufnahme von Bildern Priva
5. C Users Doberenz B U E C H E R HANSER VISUAL STUDIO 2011 CS KB Neue Rezepte SoundPlay Beispiele Wildlife wmw Bemerkungen In einer Windows Forms Anwendung k nnten Sie MCI auch durch die DirectX Bibliothek ersetzen Letztere m sste dann aber in vielen F llen separat installiert werden w hrend hinge gen jeder Computer von Haus aus auch ber die erforderlichen MCI Treiber verf gt MCI bietet eine enorme Vielfalt von Befehlen f r unterschiedlichste Dateiformate und Ger te ber die Sie sich am besten bei LINK http msdn microsoft com en us library windows desktop dd743572 v vs 85 aspx 1 Beispieldateien finden sich im Windows Zubeh r oder auch in den Buchdaten R203 Eine C DLL in VB einbinden 661 informieren So k nnen Sie zum Beispiel mit dem folgenden Aufruf die Position und die Abmessungen des Fensters f r die Video Wiedergabe individuell festlegen mciSendString put amp _alias window at x y widh height Nothing 0 IntPtr Zero Auf fehlerhafte MCI Kommandos werden Sie durch aussagekr ftige Fehlermeldungen hinge wiesen zum Beispiel MCI Fehler beim Pause Befehl amp Ger t ist nicht ge ffnet oder wird vom MCI nicht erkannt R203 Eine C DLL in VB einbinden Aus verschiedensten Gr nden kann es mitunter notwendig sein dass Sie von Ihrer VB Anwendung aus auch auf unverwalteten unmanaged Code zugreifen m ssen Sei es dass Sie eine aus Altbe st nden noch vorha
6. Event Procedure _form OnClose Event Procedure Wir f llen eine Access ComboBox _combol RowSourceType Wertliste _combol AddItem Zeile 1 _combol AddItem Zeile 2 _combol AddItem Zeile 3 _combol AddItem Zeile 4 _combol AddItem Zeile 5 _combol AddItem Zeile 6 Noch die Schaltfl che beschriften _form Befehl9 Caption Klick mich Nicht sch n aber m glich End Sub R198 Ein Managed Add In programmieren und einbinden 641 Die Ereignisbehandlung f r den Burton Private Sub _buttonl_click Handles _buttonl Click Dim s As String Eine einfache Meldung anzeigen nur zur Kontrolle MessageBox Show Button_C1ick Wir instanziieren ein WinForm und f llen es mit Daten aus einem Access Formular Dim f As New Forml f TextBox1 Text _combol RowSource Replace Chr 13 amp Chr 10 Anzeige des Dialogs f ShowDialog Auswerten und Anpassen der ComboBox in Access _combo1 RowSource s f TextBoxl Text Replace Chr 13 amp Chr 18 _combol RowSource s End Sub Hier k nnten wir auf das Schlie en des Access Formulars reagieren Private Sub _form_Close Handles _form Close MessageBox Show Und jetzt ist das Formular zu End Sub DER End Class HINWEIS Wir h tten obige Aufgabenstellung sicher auch mit Webservices oder Remoting bzw den Zugriff auf den SQL Server bereichern k nnen aber das Beispiel wird dadurch sicher nicht bersichtlicher Oberfl c
7. dbPath Application Startupfath amp Test mdb Datenbank ffnen im Shared Mode oAccess OpenCurrentDatabase filepath dbPath Exclusive False Eventuell ge ffnete Formulare schlie en For Each oFormWithinLoop As ACC Form In oAccess Forms oForm oFormWithinLoop oAccess DoCmd Close ObjectType ACC AcObjectType acform ObjectName oFormWithinLoop Name Save ACC AcCloseSave acSaveNo Next oFormWithinLoop If oForm IsNot Nothing Then Marshal ReleaseComObject oForm oForm Nothing Das Formular im Datenbankfenster ausw hlen und den Fokus erteilen oAccess DoCmd SelectObject ObjectType ACC AcObjectType ackorm ObjectName Bericht aufrufen InDatabaseWindow True 634 8 Schnittstellen Das Formular anzeigen und seine Beschriftung editieren oAccess DoCmd OpenForm FormName Bericht aufrufen View ACC AcFormView acNormal oForm oAccess Forms Bericht aufrufen oForm Caption Access Automation mit NET Die Controls Auflistung verwenden um die Beschriftung der Schaltfl che Befehl zu editieren Dim oCt As Object oForm Controls Befehl1 oCtl Caption Report aufrufen Marshal ReleaseComObject oCt oCt Nothing oForm SetFocus Das Objekt freigeben Marshal ReleaseComObject oForm oForm Nothing Das Application Objekt freigeben und erlauben dass Access durch den Anwender geschlossen wird If Not oAccess UserControl Then oAccess UserControl True Marshal ReleaseComObject oAccess oAccess N
8. e festlegen Eingabe arr i 1 7 i 1 oder arr i gt max ja i max arr i a F i gt N nein Ausgabe max Eingabe c L c y nein Ende a 36 1 Kleiner VB Anf ngerkurs Programmierung ffnen Sie den Code Editor und erg nzen Sie das Programm Der Programmablauf weist viele Analogien zum Vorg ngerbeispiel auf deshalb wird nur auf die Neuigkeiten per Kommentar hin gewiesen Module Modulel Sub Main Console WriteLine Maximum einer Zahlenfolge berschrift Console WriteLine Leerzeile Dim arr As Integer Dim n max As Integer Dim c As String Do Console Write Geben Sie die gew nschte Anzahl von Werten ein n Convert ToInt32 Console ReadLine Eingabe n ReDim arr n For i As Integer 1 Ton Console Write Geben Sie die amp i ToString amp Zahl ein arr i 1 Convert ToInt32 Console ReadLine Eingabe i te Zahl If i 10r arr i 1 gt max Then max arr i 1 Next i Console WriteLine Console WriteLine Das Maximum ist amp max ToString amp Ergebnis arr Nothing Console WriteLine Console Write Wollen Sie das Programm beenden j n c Console ReadLine Loop While c j End Sub End Module Test Sie k nnen den Berechnungszyklus jetzt beliebig oft wiederholen und dabei die L nge der einzuge benden Zahlenreihe neu festlegen siehe folgende Abbildung HINWEIS Nach Ein
9. wissen sondern ist lediglich als Erg nzung zu verstehen R1 Das EVA Prinzip anwenden Jeder Weg und ist er noch so weit beginnt mit dem ersten Schritt F r den Anfang soll uns deshalb ein ganz einfaches Beispiel gen gen Aufgabenstellung Nacheinander sind drei positive ganze Zahlen einzugeben Das Programm soll die gr te der drei Zahlen ermitteln und das Ergebnis anzeigen 30 1 Kleiner VB Anf ngerkurs L sungsvorschlag Einen Vorschlag Algorithmus f r den Programmablauf zeigt der nachfolgende Plan max a Eingabe b max b max c Sie erkennen daran das altbekannte EVA Prinzip eines Programms wobei die Anweisungen in der Reihenfolge Eingabe Verarbeitung Ausgabe ausgef hrt werden Ein Programmablaufplan PAP wie ihn die obige Abbildung zeigt ist zwar heute etwas aus der Mode gekommen f r den Anf nger kann er aber ganz n tzlich sein um die Logik eines VB Programms besser zu verstehen R1 Das EVA Prinzip anwenden 31 Programmierung W hlen Sie auf der Startseite von Visual Studio den Link Neu Projekt Es ffnet sich das Dialog fenster Neues Projekt W hlen Sie den Projekttyp Visual Basic und die Vorlage Konsolenanwen dung Name und Projektmappenname k nnen auf den Standardeinstellungen ConsoleApplication verbleiben Nachdem Sie den Speicherort das Verzeichnis in welchem Ihr Projekt abgespeichert werden soll festgelegt haben erscheint das Fe
10. MB_SYSTEMMODAL break ase DLL_PROCESS_DETACH essageBoxA GetFocus DLL wurde entladen Info MB_OK MB_SYSTEMMODAL break OD return TRUE Nun endlich kommen wir zu unserer Sortierroutine Dabei ist zu beachten dass alle Funktionen die wir aus der DLL exportieren m chten eine bestimmte Aufrufkonvention einhalten m ssen Diese beeinflusst die Ausrichtung der bergebenen Argumente auf dem Stack von rechts nach links ver ndert den internen Namen und erweitert die bergebenen Argumente auf ein Viel faches von 4 Byte Gleichzeitig ist damit bestimmt wer f r das Aufr umen des Stacks zust ndig ist DLL oder aufrufendes Programm F r unsere Zwecke ist die _stdcall Syntax geeignet void _stdcall Sortiere int al int n ME Ra Io die int h k n 2 while k2 for i 0 i lt n k i Ji while j gt 0 amp amp a jI gt a j k alj aljl aljtk a j k h j j k k k 2 DEF Datei W hlen Sie Projekt Neues Element hinzuf gen und dann DEF Datei def und speichern Sie diese unter ihrem Standardnamen Source def im Projektverzeichnis ab Der Code verweist auf die zu exportierende Routine LIBRARY Sortier EXPORTS Sortiere 1 664 8 Schnittstellen Erstellen der DLL ffnen Sie das Ausgabefenster Men Ansicht Ausgabe und klicken Sie anschlie end auf den Men punkt Erstellen Projektmappe erstellen Am unteren Bildrand k nnen Sie jetzt C Compiler und Linke
11. Messdaten sind eingetroffen Private Sub SerialPorti_DataReceived sender As Object e As SerialDataReceivedEventArgs _ Handles SerialPort1 DataReceived Try Dim count As Integer SerialPort1 BytesToRead Anzahl Bytes im Empfangspuffer Um den Inhalt des Empfangspuffers komplett als Zeichenkette auszulesen k nnte man die Read Existing Methode verwenden F r die bertragung von Zahlenwerten Messdaten etc ist es aber zweckdienlicher wenn wir von der Text auf die Byte Ebene hinabsteigen Die im Folgenden vorgestellte Variante benutzt die Read Methode der SerialPort Komponente um eine bestimmte Anzahl von Bytes aus dem Empfangspuffer in ein Byte Array zur weiteren Verarbeitung einzule sen Dim ba As Byte ReDim ba count 1 SerialPortl Read ba 0 count Es folgt das Aufsplitten des bergebenen Byte Arrays in zwei Strings Messwert und Messbe reich In unserem Beispiel entsteht ein String aus acht ASCII Zeichen Dabei bilden die ersten f nf Zeichen den Messwert Dim datal As String System Text Encoding Default GetString ba 0 5 Danach folgt ein Leerzeichen Die letzten beiden Zeichen verweisen auf den Messbereich Dim data2 As String System Text Encoding Default GetString ba 6 2 Zwecks Anzeige muss auf den UI Thread umgeschaltet werden Labell Invoke displayDataPtr datal data2 Warum so umst ndlich Die Komponenten der Benutzerschnittstelle UI User Interface k n nen nur von dem Thread aus ver nder
12. 11D3 9D7B 0000F81EF32E Mit dem Laden des Formulars wird zun chst der DeviceMananger instanziiert nachfolgend k n nen zwei wichtige Ereignisse angemeldet werden Private Sub Forml_Load sender As Object e As EventArgs Handles MyBase Load dm New WIA DeviceManager dm RegisterEvent wiaEventDeviceConnected dm RegisterEvent wiaEventDeviceDisconnected AddHandler dm OnEvent AddressOf dm_OnEvent anzeige End Sub HINWEIS Die Verwendung von RegisterEvent ist unbedingt erforderlich andernfalls wird das betreffende Ereignis nicht an die Ereignismethode weitergeleitet Reagieren auf das Verbinden Trennen von Ger ten Nutzen Sie die folgende Ereignisbehandlung um mit Ihrer Anwendung auf das Hinzuf gen bzw Entfernen von WIA Ger ten zu reagieren Private Sub dm_OnEvent EventID As String DevicelD As String ItemID As String If EventID wiaEventDeviceDisconnected Then ListBox1 Items Add Ger t getrennt End If If EventID wiaEventDeviceConnected Then ListBox1 Items Add Ger t angeschlossen End If anzeige End Sub HINWEIS Nur angemeldete Ereignisse werden ausgel st Ermitteln der verf gbaren Ger te Die folgende Routine aktualisiert die Anzeige der vorhandenen Ger te Dazu werden alle vom DeviceManager in der Collection Devicelnfos aufgelisteten Ger te abgefragt und mit Connect instanziiert Private Sub anzeige Dim dev As WIA Device ListBox2 Items Clear For Each di As WIA DeviceInf
13. Boolean Get Return _isOpen End Get End Property Alles beginnt mit dem Befehl zum ffnen einer Multimedia Datei Public Sub Open filename As String Vorher schlie en wir eine eventuell zuvor noch ge ffnete Datei If _isOpen Then Me Close Nun wird berpr ft ob die bergebene Multimedia Datei tats chlich existiert If Not File Exists filename Then MessageBox Show Die Datei amp filename amp ist nicht vorhanden Fehler MessageBoxButtons OK MessageBoxIcon Error End If Jetzt kommen wir zum wohl wichtigsten Parameter dem MCI Befehlsstring Dieser besteht aus einzelnen Kommandos die durch Leerzeichen voneinander getrennt sind Der komplette MCI Befehlsstring zum ffnen einer Datei besteht aus dem Open Kommando dem Dateinamen dem Medientyp und dem Alias Dim meiStr As String open amp Chr 34 amp filename amp Chr 34 amp type mpegvideo alias amp _alias Notwendige Erkl rung zu obiger Zeile Da auch der Dateipfad Leerzeichen enthalten kann f hrt das h ufig zu unergr ndbaren Fehlern Wir m ssen deshalb den Dateinamen in doppelte Anf h rungszeichen einschlie en also gewisserma en String im String realisieren am einfachsten geht das unter VB mit Chr 34 Nun kann das MCI Ger t ge ffnet werden Dim res As Integer mciSendString mciStr Nothing 0 IntPtr Zero Zur Fehleranzeige verwenden wir hier einfachheitshalber ein Meldungsfenster k nnten aber stattdessen auch eine eige
14. Enabled True End Sub Test Nach dem Start m ssen Sie sich einige Sekunden gedulden dann sollte auch bei Ihnen ein Bild im Fenster erscheinen 616 8 Schnittstellen R194 Auf den Scanner zugreifen Nachdem wir uns im vorhergehenden Rezept schon etwas mit der WIA besch ftigt haben wollen wir uns im Rahmen dieses Beispiels noch einmal intensiver mit dem Zugriff auf Scanner befassen Zwei grunds tzliche Varianten sind bei Verwendung der WIA m glich Anzeige des Scanner Assistenten und bernahme des Bildes mit den dort getroffenen Ein stellungen Setzen der Scanner Parameter mit eigenen Dialogen Komponenten und direktem Abruf des Bildes Wie Sie es sich vermutlich denken k nnen ist die zweite Variante mit wesentlich mehr Program mieraufwand verbunden m ssen Sie sich doch recht intensiv mit den einzelnen Scanner Parame tern auseinandersetzen Im Weiteren wollen wir Ihnen beide Versionen vorstellen zus tzlich besch ftigen wir uns noch mit dem Abruf der Standardeinstellungen Oberfl che Wir beschr nken uns auf eine PictureBox zur Anzeige eine ListBox f r die Scanner Eigenschaften sowie zwei ComboBoxen f r die Auswahl der Farbeinstellungen und der DPI Zahl Last but not least sind auch noch drei Schaltfl chen n tig 32 Scannen _ ee Scan mit Dialog Scan ohne Dialog Scannereigenschaften en er er En p Aufl sung x im 0 im im im Weisen Sie der F
15. R200 Mikrofonpegel anzeigen Bei Soundaufnahmen w nscht man sich meist auch eine Anzeige des Mikrofonpegels z B in Form eines Aussteuerungsbalkens Im Folgenden wollen wir das Vorg ngerrezept R199 mit einer einfachen Pegelanzeige erg nzen Oberfl che Zum Formular des Vorg ngerbeispiels f gen Sie eine ProgressBar Maximum 128 und einen Timer Interval 10 hinzu Quellcode Erg nzen Sie zun chst den Zoad Eventhandler des Formulars wie folgt Private Sub Formi_Load sender As Object e As EventArgs Handles MyBase Load Leider kann ein ge ffnetes Audioger t nicht gleichzeitig eine Sound Datei aufnehmen und den Pegel anzeigen Wir ffnen deshalb eine zweite Sound Aufnahme mit unterschiedlichem Alias namen Dim meiString As String open new type waveaudio alias myAlias Dim res As Integer mciSendString mciString Nothing 0 IntPtr Zero If res lt gt 0 Then MessageBox Show getMciError res MCI Fehler beim ffnen des Ger ts Open New Befehl MessageBoxButtons OK MessageBoxIcon Error End If Auf eine Parameterzuweisung k nnen wir in unserem Fall verzichten da mit den Standardwerten gearbeitet wird Timerl Start End Sub In der zweiten Programmerg nzung wird im 10ms Takt der Pegel abgerufen Private Sub Timerl_Tick sender As Object e As EventArgs Handles Timerl Tick Der aktuelle Pegel kann mittels status Befehl ber das evel Flag abgefragt werden Dim mciString As String status myAlias2 leve
16. START Schaltfl che ndert sich deren Beschriftung in STOPP und die Auf nahme beginnt Jetzt k nnen Sie zum Beispiel eine Probe Ihrer Gesangsk nste abliefern Nach Aufnahmestopp findet sich die Sounddatei Test wav im aktuellen Projektverzeichnis bzw im bin Debug Unterverzeichnis Ihres Projektordners Nach Doppelklick auf die Sounddatei d rfte sich normalerweise der Windows Media Player ffnen und Sie k nnen sich das Ergebnis Ihrer gesanglichen Darbietungen anh ren oder aber Sie verwen den zur Wiedergabe das Rezept gt R202 Sound und Video Dateien per MCI abspielen Bemerkungen ber die Systemsteuerung oder auch die Taskbar haben Sie Zugriff auf die Dialoge f r Mikrofonauswahl und Pegeleinstellungen W hlen Sie ein Aufnahmeger t aus um die Einstellungen zu ndern Mikrofon 2 USB Audioger t Standardger t Mikrofon Realtek High Definition Audio Deaktiviert nicht angeschlossen Eingang Realtek Higr DF Deaktiviert ns Stereomix Realtek Higr gt Deaktiviert Mikrofon OK bernehmen Bei schlechter Soundqualit t sollten Sie vergleichsweise zun chst mit dem im Windows Zu beh r enthaltenen Sound Recorder einige Probeaufnahmen machen Die ausf hrlichen MCI Meldungstexte helfen Ihnen bei der Fehlersuche zum Beispiel wenn ein falscher oder doppelt vergebener Alias verwendet wurde 648 8 Schnittstellen
17. c As String Do Console Write Geben Sie die gew nschte Anzahl von Werten ein n Convert Tolnt32 Console ReadLine Eingabe n ReDim arr n 1 For i As Integer 1 Ton Console Write Geben Sie die amp i ToString amp Zahl ein arr i 1 Convert Tolnt32 Console ReadLine Eingabe i te Zahl Next i Console WriteLine berechne Zahlenfolge auswerten Methodenaufruf Globale Variablen anzeigen Console WriteLine Das Maximum ist amp max ToString amp Console WriteLine Das Minimum ist amp min ToString amp Console WriteLine Der Durchschnitt ist amp av amp arr Nothing Console WriteLine Console Write Wollen Sie das Programm beenden j n c Console ReadLine Console WriteLine Loop While c j End Sub End Module 40 1 Kleiner VB Anf ngerkurs Test Vergleichen Sie die Leistungsf higkeit dieses Programms mit der ersten Version so ist doch bereits ein deutlicher Unterschied festzustellen F E file C Users Doberenz B U EC H E R HANSER VISUAL STUDIO 11 uswerten einer Zahlenfolge mi gt eben Sie die gew nschte Anzahl von Werten ein 2 eben Sie die 1 Zahl ein 5 eben Sie die 2 Zahl ein 2 as Maximum ist 2 as Minimum ist 5 er Durchschnitt ist 1 58 ollen Sie das Programm beenden j n n eben Sie die gew nschte Anzahl von Werten ein 3 eben Sie die 1 Zahl ein 6 eben Sie die 2 Zahl ein
18. f r die Access Programmierung ben tigen F gen Sie also noch einen Verweis auf die Microsoft Access 12 0 Object Library hinzu Klicken Sie dazu im Projektmappen Explorer auf den Add In Knoten Kontextmen Verweis hin zuf gen und w hlen Sie im folgenden Dialogfenster in der Rubrik COM die oben genannte Library aus Nachfolgend sollten die erforderlichen Verweise in Ihrem Projekt auftauchen Einen weiteren Verweis m ssen Sie in der Rubrik NET ausw hlen es handelt sich um die Assembly System Windows Forms Quellcode Add In Damit k nnen wir uns dem Quellcode des Add Ins zuwenden Das im Folgenden abgedruckte Lis ting ist um die fett hervorgehobenen Zeilen erg nzt bzw erweitert worden Imports Extensibility Imports System Runtime InteropServices Die Unterst tzung f r den Access Namespace Imports Access Microsoft Office Interop Access Imports System Windows Forms lt GuidAttribute 93EDS4AA C1AQ 463B B293 921QE26BAACB ProgIdAttribute DokoAddIn Connect Public Class Connect Implements Extensibility IDTExtensibility2 In der folgenden Variablen speichern wir eine Referenz auf die aufrufende Access Anwendung Dim AccessApp As Access Application Dim addInInstance As Microsoft Office Core COMAddIn Hier werden einige Verweise auf Access Objekte gespeichert Private WithEvents _Buttonl As Access CommandButton Private WithEvents _combol As Access ComboBox Private WithEvents _form As Access Form Die erste Kon
19. kein Unterschied zwischen Gro und Kleinschreibung Jede VB Anweisung wird mit einem Zeilenumbruch abgeschlossen eine Zeile ist also eine kompletter VB Befehl Die mit einem Apostroph eingeleiteten Anweisungen sind lediglich Kommentare und f r den Programmablauf bedeutungslos Vor Beginn eines Programms bzw eines in sich abgeschlossenen Programmteils sind alle ben tigten Variablen zu deklarieren d h ihr Name und ihr Datentyp m ssen festgelegt werden Unter Initialisierung einer Variablen versteht man das Zuweisen eines Anfangswertes ReadLine und WriteLine sind die einfachsten Ein Ausgabeanweisungen wie Sie sie allerdings nur bei einer Konsolenanwendung verwenden sollten Die Endung Line der Befehlsw rter bewirkt einen Zeilenvorschub Die f Then Anweisung wenn dann ist ein Verzweigungsbefehl gewisserma en eine Programm Weiche und f hrt eine Anweisung in Abh ngigkeit von einer Bedingung aus R2 Ein Array definieren und initialisieren 33 R2 Ein Array definieren und initialisieren Aufgabenstellung Erweitern Sie das Programm so dass es die Eingabe einer flexiblen Anzahl von Werten erm glicht L sungsvorschlag Der im nachfolgenden PAP dargestellte Algorithmus geht davon aus dass die Zahlenwerte nicht mehr in Einzelvariablen a b c sondern in einem Array gespeichert werden Stellen Sie sich ein solches Array wie ein Regal mit einzelnen F chern vor in denen beliebig gro
20. mit MS Access einige Funktionen realisieren die mit dem boardeigenen VBA nicht realisierbar sind Spontan fallen uns da vor allem Webdienste Remoting Windows Forms WPF etc ein Einen direkten Weg f r den Zugriff auf obige Funktionen gibt es nicht aber eine kleine und recht effiziente Hintert r haben die Microsoft Entwickler offen gelassen Die Rede ist von der M glich keit Managed Add Ins in Microsoft Access zu integrieren die Sie zum Beispiel in C oder VB programmieren k nnen HINWEIS Diese Add Ins k nnen Sie nur mit Visual Studio 2010 erstellen In Visual Studio 2012 ist die entsprechende Unterst tzung nicht mehr vorhanden Visual Studio 2010 bietet zu diesem Zweck den Projekttyp Gemeinsames Add In an Sie m ssen nur noch eine geeignete Schnittstelle zwischen der Access Anwendung und dem Add In schaf fen Wer jetzt bef rchtet sich mit Unmengen an Deklarationen etc herumschlagen zu m ssen der sei beruhigt diese Arbeit wird von einem Assistenten weitestgehend erledigt es bleibt wirklich nur die reine Schnittstelle brig Doch welche Form der Interaktion zwischen Access Anwendung und Add In ist berhaupt m g lich Eigentlich gibt es da kaum Einschr nkungen nach der bergabe einer Referenz k nnen Sie zum Beispiel auf die Anwendung per Application Objekt ge ffnete Formulare und Berichte per Me Referenz Steuerelemente Eigenschaften Methoden Ereignisse zugreifen Ein kleines Beispielprogramm s
21. nicht erst sp ter beim eigentlichen Funktionsaufruf los int _stdcall version void return 4711 W hrend der Testphase ist es empfehlenswert sich die Versionsnummer der DLL anzeigen zu lassen Erweitern Sie dazu die Eintrittsprozedur wie folgt BOOL WINAPI DI1Main HINSTANCE hDLL DWORD dwReason LPVOID IpReserved switch dwReason case DLL_PROCESS_ATTACH MessageBoxA GetFocus LPCSTR Build 1 241 LPCTSTR Info MB_OK MB_SYSTEMMODAL Obiges Rezept will nicht mehr als nur einen kleinen Einblick in die Programmierung von C DLLs und deren Einbindung in ein VB Programm vermitteln wobei viele heikle Aspekte ausgeklammert wurden 1 Die Autoren sind sich durchaus im Klaren dar ber dass sie damit die B chse der Pandora ffnen
22. physischen Ger t zugeordnet dev dm Devicelnfos ListBox2 SelectedIndex 1 Connect d1g ShowDeviceProperties dev End Sub Alternativ k nnen Sie auch einzelne Eigenschaften ber die Properties Auflistung abrufen BEISPIEL Ausgabe der Properties in einer ListBox dev dm Devicelnfos ListBox2 SelectedIndex 1 Connect For Each prop As WIA Property In dev Properties ListBox1 Items Add prop Name amp amp prop Value Next prop Die Ausgabe item Name Root Full tem Name 0018 Root item Flags 76 Unique Device ID EEC5AD98 8080 42 922A DABF3L Manufacturer MATSHITA Description E Type 131072 Remote Device ID UI Class ID 00000000 0000 0000 0000 000000000000 Ein Bild einlesen Das eigentliche Ziel unserer Bem hungen war und ist immer noch das Einlesen eines Bildes was wir jetzt in Angriff nehmen Wie schon beim vorhergehenden Anzeigen von Eigenschaften k nnen wir auch hier auf einen inte grierten Dialog zugreifen mit dem der Anwender das eigentliche Bild ausw hlt bzw die Eigen schaften einstellt siehe folgende Abbildung 608 8 Schnittstellen L Bilder von E bertragen Welches Bild soll kopiert werden W hlen Sie ein Bid aus und klicken Sie auf Bild bertragen 2m Detail X L schen Bildinformationen anzei Private Sub Button2_Click sender As Object e As EventArgs Handles Button2 Click Dim dlg As New WIA CommonDialog Dim img As
23. 10ms und 6000 Durchl ufen ist die Endzeit in der Regel deutlich l nger als die erwarteten 60 Sekunden Wollen Sie eine exakte Anzeige der seit Start abgelaufe nen Sekunden hinzuf gen so kommen Sie um ein TimeSpan Objekt nicht herum Der Aufbau der Grafik erfolgt synchron mit der Pegelabfrage Der vorhandene Tick Eventhandler des Timers ist deshalb wie folgt zu erg nzen Private Sub Timerl_Tick sender As Object e As EventArgs Handles Timer1 Tick Die folgende Zeile ist kein Fehler denn w hrend die Soundaufnahme l uft hat der Button die Beschriftung STOPP If Buttonl Text STOPP Then Dim ts As New TimeSpan DateTime Now Ticks dStart Ticks Dim sec As Integer Convert Tolnt32 ts TotalSeconds Anzeige der abgelaufenen Zeit Sekunden Labell Text sec ToString Abbruchkriterium bei 60sek If sec tmax 1000 Then 1 Windows ist kein Echtzeit Betriebssystem und Prozesse mit h herer Priorit t k nnen solche mit niedrigerer Priorit t aus bremsen 652 8 Schnittstellen Speichern am Schluss saveFile Button1 Text START Return End If Um die x Koordinate exakt berechnen zu k nnen muss die Aufl sung zumindest im Millisekun denbereich liegen msec Convert Tolnt32 ts TotalMilliseconds Dim x As Single msec xmax tmax Pegel in Diagramm eintragen g DrawLine New Pen Color Red 0 1F x yO level v x y0 level v Abspeichern des Pegels im Puffer Array BA i level i l End If End Sub D
24. 7 Durchschnitt 3 28 eeomen taschen 48 1 Kleiner VB Anf ngerkurs Bemerkungen Vergleichen Sie den Quellcode dieses Programms mit dem der Konsolenanwendungen aus den Vorg ngerbeispielen Nach einiger Praxis d rfte es Ihnen nicht schwer fallen weitere alte Konsolenprogramme auf hnliche Weise unter Visual Studio aufzum beln Dabei wird das Zusammenschieben der Benutzerschnittstelle nicht das Problem sein da die Vorgehensweise starke hnlichkeiten mit einem Zeichenprogramm hat Dreh und Angelpunkt ist vielmehr das Aufbrechen des linearen Programmablaufs PAP und seine zweckm ige Verteilung auf ver schiedene Event Handler In einer Windows Forms Anwendung hat der klassische Programmablaufplan PAP zumin dest au erhalb von Methoden bzw Event Handlern seine Bedeutung weitestgehend verloren da es keine festgelegte Reihenfolge der Benutzereingaben mehr gibt Wenn Sie auch dieses letzte Beispiel ohne gr ere Schwierigkeiten gemeistert haben sind Sie auf dem besten Weg zu einem hoffnungsvollen Visual Basic Programmierer denn Sie haben bereits ein Gef hl f r die wichtigsten sprachlichen Grundlagen entwickelt Die Zeit ist also reif um die sprachlichen Grundlagen zu vertiefen und sich an anspruchsvollere Projekte zu wagen Kapitel Schnittstellen R189 Eine einfache E Mail versenden Mit Hilfe der Anweisung mailto ist es problemlos m glich eine E Mail mit Adressangabe Betreffzeile und E Mail T
25. Args Handles Button2 Click If TextBox1 SelectedText lt gt String Empty Then Clipboard SetText TextBox1 SelectedText Else MessageBox Show Kein Text selektiert End If End Sub Text aus der Zwischenablage einf gen Private Sub Buttond_Click sender As Object e As EventArgs Handles Buttond Click If Clipboard ContainsText Then TextBox1 Text Clipboard GetText Else MessageBox Show Keine geeigneten Daten im Clipboard End If End Sub Grafik in die Zwischenablage kopieren Private Sub Buttoni_Click sender As Object e As EventArgs Handles Buttonl Click If PictureBox1 Image IsNot Nothing Then Clipboard SetImage PictureBox1 Image Else MessageBox Show Keine Grafik enthalten End If End Sub R192 Die WIA Library kennenlernen 601 Grafik aus der Zwischenablage einf gen Private Sub Button3_Click sender As Object e As EventArgs Handles Button3 Click If Clipboard ContainsImage Then Dim pic As System Drawing Image Clipboard GetImage PictureBox1 Image pic Else MessageBox Show Keine Bitmap im Clipboard End If End Sub End Class Test Kopieren Sie mit einem Zeichenprogramm z B Paint eine Grafik in die Zwischenablage und ver suchen Sie diese in das Programm einzuf gen HINWEIS Testen Sie auch was passiert wenn keine Grafik kein Text vorhanden ist Im Gegensatz zur recht k rglichen Ausstattung in den NET 1x Versionen sa Paste hatte sich das Clipboard Objekt m
26. Beschriftung ersichtlich sein Abschlie end f gen Sie noch eine OpenFileDialog Komponente ein mit der wir Bilddateien aus w hlen wollen l a9 WiA Experim nte A e listBox2 Bild scannen listBox1 Bild konvertieren in TIFF Riter anzeigen Quellcode Ein wichtiger Hinweis vorweg HINWEIS Erzeugen Sie so wenig globale Objekte wie m glich es besteht immer die M glich keit dass der Anwender die externen Ger te vom PC trennt bzw diese ausschaltet In diesem Fall ist die Referenz auf das entsprechende Objekt futsch Imports System 10 Imports System Diagnostics Imports System Drawing Imaging Das zentrale Objekt f r den Zugriff auf alle Ger te ist der DeviceManager Public Class Forml Dim dm As WIA DeviceManager Um die PIA Klassen einbinden zu k nnen definieren wir einige wichtige Konstanten direkt andernfalls m ssten wir die externe PIA mitgeben Const wiaEventDeviceConnected As String A28BBADE 64B6 11D2 A231 00CO4FA31809 Const wiaEventDeviceDisconnected As String 143E4E83 6497 11D2 A231 00C04FA31809 R192 Die WIA Library kennenlernen 605 Const wiaFormatBMP As String B96B3CAB 0728 11D3 9D7B QONAFBLEF32E Const wiaFormatPNG As String B96B3CAF 0728 11D3 9D7B 0000F81EF32E Const wiaFormatGIF As String B96B3CBQ 0728 11D3 9D7B QONAFBLEF32E Const wiaFormatJPEG As String B96B3CAE 0728 11D3 9D7B 0000F81EF32E Const wiaFormatTIFF As String B96B3CB1 0728
27. Button2 Click If Button2 Text PLAY Then myMCI Play Timer1 Enabled True Button2 Text STOPP Else myMC1 Stop_ Timer1 Enabled False TrackBarl Value 0 Labell Text 00 00 Button2 Text PLAY End If End Sub Die Schaltfl che PAUSE WEITER Private Sub Button3_Click sender As Object e As EventArgs Handles Button3 Click If Button3 Text PAUSE Then myMCI Pause Button3 Text WEITER R202 Sound und Video Dateien per MCI abspielen 659 Else Button3 Text PAUSE myMCI Resume_ End If End Sub Es folgt eine Hilfsfunktion f r die Bereitstellung der laufenden Zeitanzeige in Minuten und Sekunden Anhand der Reglerposition von TrackBar werden zun chst die Sekunden ermittelt Mittels Integer und Modulo Division werden dann die Minuten und restlichen Sekunden berech net und durch einen Doppelpunkt getrennt Private Function getMinutes As String Dim sekunden As Integer Convert Tolnt32 TrackBarl Value kf 1000 Return sekunden 60 ToString 00 amp amp sekunden Mod 60 ToString 00 End Function Im Tick Event des Timers werden der Regler der Trackbar vorw rts bewegt und die Zeitanzeige aktualisiert Private Sub Timerl_Tick sender As Object e As EventArgs Handles Timer1 Tick Dim val As Integer Convert Tolnt32 myMCI Position kf If val lt TrackBarl Maximum Then TrackBar1 Value val Labell Text getMinutes Das Ende unserer MM Datei ist erreicht Else myMC1 Stop
28. Button3 Click Dim dlg As New WIA CommonDialog Wird ein Bild per OpenFileDialog ausgew hlt If OpenFileDialogl ShowDialog System Windows Forms DialogResult OK Then R192 Die WIA Library kennenlernen 611 zeigen wir den Windows Druckassistenten an dIg ShowPhotoPrintingWizard OpenFileDialogl FileName Else MessageBox Show Kein Bild gew hlt End If End Sub Den Scanner Assistent aufrufen Nicht genug der Assistenten auch f r das Scannen in eine Datei steht ein entsprechender Assistent bereit Private Sub Buttond_Click sender As Object e As EventArgs Handles Button4 Click Dim dev As WIA Device Dim dlg As New WIA CommonDialog dev dm Devicelnfos ListBox2 SelectedIndex 1 Connect Nur wenn es sich um einen Scanner handelt wird der Dialog angezeigt If dev Type WIA WiaDeviceType ScannerDeviceType Then dig ShowAcquisitionWizard dev Else MessageBox Show Kein Scanner vorhanden End If End Sub Wie Sie sehen k nnen Sie per Device Type Eigenschaft den Ger tetyp in Erfahrung bringen Konstante Bedeutung ScannerDeviceType Scanner nur diese k nnen Sie auch mit dem Scanner Assistenten ver wenden CameraDeviceType Digitale Kameras die per WIA eingebunden sind Achtung hier haben Sie es meist mit Verzeichnisstrukturen zu tun VideoDeviceType WebCam etc UnspecifiedDeviceType Unbekannt wird meist bei der Auswahl von Ger ten angegeben um alle Ger te abzufragen Der Scandialog unterscheidet sic
29. Dim args 1 As Object args 0 MakePropertyValue FilterName writer_pdf_Export oDoc storeToURL ConvertToUrl filename args End Sub Dokument schlie en Public Sub CloseDocument oDoc Close True End Sub Die folgenden internen Funktionen stammen aus dem Internet und erleichtern den Zugriff auf die OpenOffice Objekte U http Awww kalitech fr clients doc VB_APIOOo_en html 628 8 Schnittstellen Eine Objekt Eigenschaft erzeugen Private Function MakePropertyValue cName uValue As Object Dim oPropertyValue As Object oPropertyValue oStarOffice Bridge_GetStruct com sun star beans PropertyValue oPropertyValue Name cName oPropertyValue value uValue MakePropertyValue oPropertyValue End Function Pfadangaben in Urls umwandeln Private Function ConvertToUrl strfile As String As String strFile Replace strFile strfile Replace strfile strFile Replace strFile 20 strFile file strFile ConvertToUrl strFile End Function Ein spezielles Service Objekt erzeugen Private Function CreateUnoService strServiceName As Object Dim oServiceManager As Object oServiceManager Create bject com sun star ServiceManager CreateUnoService oServiceManager createlnstance strServiceName End Function Im Konstruktor erstellen wir das zentrale ServiceManager Objekt Public Sub New oStarOffice Create bject com sun star ServiceManager End Sub End Class Kompilieren
30. HANSER VISUAL BASIC 20lZ KOCHBUCH Leseprobe Walter Doberenz Thomas Gewinnus Visual Basic 2012 Kochbuch ISBN Buch 978 3 446 43430 1 ISBN E Book 978 3 446 43563 6 Weitere Informationen oder Bestellungen unter http www hanser fachbuch de 978 3 446 43430 1 sowie im Buchhandel Carl Hanser Verlag M nchen Kapitel Kleiner VB Anf ngerkurs Vor Beginn des Windows Zeitalters wurden Programme geschrieben die f r jede Ein und Aus gabe von Daten eine neue Textzeile in einem Bildschirmfenster Konsole erzeugten Dieses Ver halten war ein Erbe aus jener Zeit als lediglich Fernschreiber f r die Ein und Ausgabefunktionen von Computern zur Verf gung standen Aber auch heute noch kann es f r den Newcomer durchaus sinnvoll sein wenn er f r seine ersten Schritte die gute alte Konsolentechnik verwendet So kann er sich doch auf das zun chst Wesent liche n mlich die Logik von VB Befehlen konzentrieren ohne von der erdr ckenden Vielfalt der Windows Oberfl che abgelenkt zu werden Die folgende Serie von sechs absoluten Anf ngerbeispielen benutzt zun chst Konsolenanwendun gen um einige grundlegende VB Sprachelemente zu demonstrieren Die letzten beiden Beispiele zeigen dann den bergang zur zeitgem en Windows Programmierung HINWEIS Der Kleine VB Crashkurs kann keinesfalls das Studium einf hrender Visual Basic Literatur ersetzen siehe z B unser Buch Visual Basic 2012 Grundlagen und Profi
31. Library Erstellt Typbibliotheken Legacy MtxGrp 1 0 Type Library en Legacy Transaction Context Type Library Version b Durchsuchen LicLualib i 9 0 LocationApi 1 0 Type Library ER EN MeetingJoinAx 1 0 Type Library eye micaut 1 0 Type Libra Microsoft Access Wizard Control Library 8 2 Microsoft Actions 2 0 Type Library Microsoft ActiveMovie Control H Et Aethant Nata Nine AA i A Durchsuchen R197 Mit OLE Automation auf MS Access zugreifen 633 Quelltext Um unliebsamen Problemen mit dem Namespace Microsoft Office Interop Access aus dem Weg zu gehen berschneidung bei Bezeichnern vergeben wir einen Alias Namen Imports ACC Microsoft Office Interop Access Imports System Runtime InteropServices Public Class Forml Die Schaltfl che Access aufrufen Private Sub Buttoni_Click sender As Object e As EventArgs Handles Buttonl Click Unsere Hauptroutine hat die Aufgabe die Datenbank Test mdb aufzurufen und dort das Formular Bericht aufrufen anzuzeigen Demonstriert wird au erdem die Manipulation von Steuerelemen ten Dim oAccess As ACG Application Nothing Dim oForm As ACC Form Nothing Dim dbPath As String Datenbankpfad zu Test mdb Eine neue Access Instanz f r die Automation starten oAccess New ACC Application Daf r sorgen dass Access sichtbar ist oAccess Visible True Datenbankpfad ermitteln die Datenbank befindet sich hier der Einfachheit wegen im Anwen dungsverzeichnis
32. M Port Hier lassen sich mit Hilfe handels blicher USB zu SUB D9 Adapter wei tere serielle Ports realisieren R196 OpenOffice org Writer per OLE steuern Angesichts der reichlich vorhandenen L sungen zur MS Word Automatisierung entsteht f r man chen Programmierer sicher auch die Frage wie sich OpenOffice org Writer der Freeware Pendant von Word automatisieren l sst Das vorliegende Beispiel soll einen ersten Ansatz aufzeigen Leider ist die Programmierung von OpenOffice Anwendungen per C Visual Basic nicht gerade trivial eine fast schon chaotisch wirkende Programmierschnittstelle macht es dem eingefleischten MS Programmierer nicht gerade leicht 1 Das Kind im Mann freut sich R196 OpenOffice org Writer per OLE steuern 625 Wir wollen Ihnen etwas Arbeit abnehmen und kapseln deshalb einige der wichtigsten Grundfunk tionen in einer eigenen Klasse OOWriter Mit dieser lassen sich dann die Standardaufgaben relativ leicht l sen HINWEIS Um die Wiederverwendbarkeit zu verbessern haben wir die Funktionalit t in eine eigene Library ausgelagert Sie k nnen die enthaltene Klasse cOOWriter aber auch genausogut in Ihr Projekt kopieren VB Library DOOWLib Library erstellen Erstellen Sie zun chst ein Windows Forms Projekt und f gen Sie in die bergeordnete Solution eine Klassenbibliothek mit dem Namen OOWLib ein Kontextmen Hinzuf gen neues Projekt L schen Sie den schon vorhandenen Klassenrumpf und erstellen Si
33. Then Dim vector As WIA Vector img FileData pictureBox1 Image Image FromStream New MemoryStream CType vector BinaryData Byte End If End Sub Die etwas flexiblere Variante f r den Zugriff auf den Scanner nutzt die WIA Dialoge lediglich zur Auswahl eines Ger tes nachfolgend wird das Ger t konfiguriert und es wird das gew nschte Bild abgerufen Doch der Reihe nach Private Sub Button2_Click sender As Object e As EventArgs _ Handles Button2 Click Ein Ger t abrufen Dim dlg As New WIA CommonDialog Dim Scanner As WIA Device dig ShowSelectDevice WIA WiaDeviceType ScannerDeviceType False False 618 8 Schnittstellen Der angezeigte Dialog gt Ger t ausw hlen Welches Ger t m chten Sie verwenden gt EPSON GT 8700 Hersteller EPSON Eigenschaften Beschreibung EPSON GT 8700 Aus der zweiten ComboBox lesen wir die DPI Zahl ab Dim dpi As Integer Convert Tolnt16 comboBox2 SelectedItem Je nach Auswahl in der ersten ComboBox weisen wir die Farbauswahl zu Select Case comboBox1 Selectedindex Case 0 Scanner Items 1 Properties Current Intent Value 4 4 SW 2 Graustufe 1 Color Case 1 Scanner Items 1 Properties Current Intent Value 2 Case Else Scanner Items 1 Properties Current Intent Value 1 End Select bergeben wird diese Information ber die Properties Collection des ersten Items Gleiches trifft auch auf die anderen Scan Optionen zu Do
34. WIA ImageFile img dig ShowAcquirelmage Der R ckgabewert ist ein mageFile Objekt dessen Dateiformat Sie ber die FileExtension Eigenschaft in Erfahrung bringen k nnen F r die weitere Vorgehensweise bieten sich zwei Varianten an Sie speichern das Bild als Datei und laden diese gegebenenfalls sp ter Sie bertragen direkt die bin ren Bilddaten an Ihre Anwendung und nutzen diese beispiels weise f r eine PictureBox An dieser Stelle beschr nken wir uns zun chst auf die erste Variante Dim TempFileName As String Path Combine Path GetTempPath Path GetRandomFileName amp amp img FileExtension img SaveFile TempFileName Using fs As New FileStream TempFileName FileMode Open FileAccess Read pictureBox1 Image Image FromStream fs fs Close End Using File Delete TempFileName End Sub R192 Die WIA Library kennenlernen 609 HINWEIS Die Verwendung der mage FromFile Methode w re zwar mit weniger Schreibauf wand verbunden allerdings haben Sie nachfolgend keinen Zugriff auf die Datei und somit k nnen Sie diese tempor re Datei auch nicht l schen Alternativ hier der Weg ber einen MemoryStream Dim dlg As New WIA CommonDialog Dim img As WIA ImageFile img dig ShowAcquirelmage Hier ermitteln wir die Bilddaten im v As WIA Vector img FileData kopieren diese in ein Byte Array Dim bytes As Byte CType v BinaryData Byte und wandeln dieses in einen MemoryStr
35. _ Timerl Enabled False TrackBarl Value Labell Text 00 00 Button2 Text PLAY End If End Sub Wenn Sie am Regler der TrackBar ziehen k nnen Sie die Abspielposition ver ndern Private Sub TrackBari_Scroll sender As Object e As EventArgs Handles TrackBar1 Scroll Try Me myMCI Position Convert ToInt32 TrackBarl Value kf Catch ex As Exception MessageBox Show ex Message Application ProductName MessageBoxButtons OK MessageBoxIcon Error End Try End Sub Die Lautst rke l sst sich mit der kleinen TrackBar steuern Private Sub TrackBar2_Scroll sender As Object e As EventArgs Handles TrackBar2 Scrol myMCI volume TrackBar2 Value End Sub 660 8 Schnittstellen Die Schaltfl che zum Beenden Private Sub Buttond_Click sender As Object e As EventArgs Handles Button4 Click Me Close End Sub MCI Player schlie en Private Sub Forml_FormClosing sender As Object e As FormClosingEventArgs _ Handles MyBase FormClosing myMCI Close End Sub End Class Test Ring frei f r Ihre Experimente Starten Sie das Programm und laden Sie ber die ffnen Schaltfl che eine beliebige Sound oder Video Datei wav wma mp3 midi avi wmv Spulen Sie mit dem oberen Regler vor und zur ck und testen Sie die brigen Bedienfunktionen Die Abbildung zeigt eine Momentaufnahme beim Abspielen der zu Windows mitgelieferten Video datei Wilalife wmv Ofinen STOPP 00 14 g PAUSE
36. abspielen Public Sub Play Play Me Length End Sub Die folgende Eigenschaft liest schreibt die aktuelle Abspielposition Millisekunden Public Property Position As Integer Get Dim buffer As New StringBuilder 261 Dim res As Integer meiSendString status amp _alias amp position buffer buffer Capacity IntPtr Zero Return Convert ToInt32 buffer ToString End Ge Set value As Integer Dim res As Integer mciSendString seek amp _alias amp to amp value Nothing 0 IntPtr Zero R202 Sound und Video Dateien per MCI abspielen 657 res mciSendString play amp _alias Nothing 0 IntPtr Zero End Set End Property Eine Pause Den Abspielvorgang unterbrechen Public Sub Pause Dim res As Integer mciSendString Pause amp _alias Nothing 0 IntPtr Zero End Sub Den Abspielvorgang fortsetzen Public Sub Resume_ Dim res As Integer mciSendString Resume amp _alias Nothing 0 IntPtr Zero End Sub Die Lautst rke festlegen Public Sub volume wert As Integer Dim res As Integer mciSendString setaudio amp _alias amp volume to amp wert Nothing IntPtr Zero End Sub Den Abspielvorgang stoppen und auf den Anfang zur cksetzen Public Sub Stop_ Dim res As Integer mciSendString Stop amp _alias Nothing 0 IntPtr Zero End Sub Ein ge ffnetes MCI Ger t schlie en Public Sub Close If _isOpen Then Dim res As Integer mciSendString C
37. alogResult OK Then oow SaveAsPDF SaveFileDialogl FileName End If oow Nothing End Sub End Class Test Nach dem Klick auf die Schaltfl che sollten Sie folgende Ausgabe erhalten vorausgesetzt Sie haben OpenOffice org installiert Format Tabelle Eiras Fenster H te 5 nal sE gD Ov taena Lagerdaten Artikelnr 1 Artikelname Chai Lagerbestand 18 Artikelnr 2 Artikelname Chang Lagerbestand 17 Artikelnr 3 Artikelname Aniseed Syrup Lagerbestand 13 Artikelnr 4 Artikelname Chef Anton s Cajun Seasoning m alit N Seite177 Standard Deutsch Deutschland EINFG STD Kapiteinummerierung Ebene1 5 DG E Auch der Export ins PDF Format d rfte problemlos realisiert werden Sie k nnen sich mit dem Acrobat Reader vom Erfolg berzeugen Bemerkung Auch wenn Sie mit obigem Beispiel recht schnell zu brauchbaren Ergebnissen kommen viele Ope nOffice Funktionen sind nur umst ndlich erreichbar z B Zwischenablage Hilfe finden Sie in diesem Fall unter LINK http forum openoffice org en forum 632 8 Schnittstellen R197 Mit OLE Automation auf MS Access zugreifen Da VBA nach wie vor auch f r Microsoft Access als Programmiersprache eingesetzt wird muss man leider auch in Kauf nehmen dass die VBA F higkeiten im Vergleich zu den M glichkeiten der modernen NET Programmiersprachen wie Visual Basic oder Visual C ziemlich einge sc
38. amilyID a332a77a 01b8 4de6 91c2 b7ea32537e29 Entpacken Sie die ZIP Datei und kopieren Sie enthaltene Datei wiaaut dll in das Windows Sys tem32 Verzeichnis HINWEIS Ganz nebenbei finden Sie in dieser Datei auch einige VB6 Beispiele und eine um fangreiche Hilfedatei Die neue Library registrieren Sie ber Start Ausf hren Ausf hren US 1 z Geben Sie den Namen eines Programms Ordners Dokuments oder einer Internetressource an ffnen EEEN Abbrechen Durchsuchen Binden Sie anschlie end die Library bzw eine Referenz auf diese siehe vorhergehender Ab schnitt in Ihr Projekt ein Einstieg mit kleiner Beispielanwendung Auf Grund der umfangreichen M glichkeiten dieser Library m chten wir Ihnen anhand einer klei nen Beispielanwendung einige wesentliche Features die f r das Einlesen und Weiterverarbeiten von Bildern unabdingbar sind vorstellen Erkennen der angeschlossenen Ger te Ger tetypen Auswerten von Ereignissen Anschlie en Trennen Anzeige der Ger teeigenschaften Mil Einlesen von Bildern Verwendung des Scan Assistenten Einsatz des Druckassistenten 604 8 Schnittstellen Oberfl che Entwerfen Sie zun chst eine Oberfl che entsprechend der folgenden Abbildung F gen Sie dazu zwei ListBoxen Anzeige von Statusmeldungen Anzeige der aktiven Ger te sowie ein PictureBox Steuerelement in das Formular ein Die Bedeutung der Schaltfl chen d rfte aus der
39. amit nach einem Verdecken des Formulars durch andere Fenster das Diagramm nicht auf Nim merwiedersehen verschwindet muss es im Paint Eventhandler der PaintBox komplett neu ge zeichnet werden Private Sub PictureBox1_Paint sender As Object e As PaintEventArgs _ Handles PictureBox1 Paint Dim g As Graphics e Graphics Abstand zwischen zwei gespeicherten Werten auf Position i Dim dx As Single xmax tmax msec i Der Pufferspeicher wird bis zur Position i ausgelesen und angezeigt For j As Integer 0 Toi 1 g DrawLine New Pen Color Red 1F j dx y0 BA j v j dx y BA j v Next j End Sub End Class Test Jetzt k nnen Sie unmittelbar w hrend der Sound Aufnahme den kontinuierlichen Pegelverlauf live beobachten siehe folgende Abbildung Bei STOPP bzw nach Ablauf von 60 Sekunden wird die Datei Test wav automatisch im Projekt verzeichnis abgelegt R202 Sound und Video Dateien per MCI abspielen 653 R202 Sound und Video Dateien per MCI abspielen F r die Wiedergabe von Sound und Videos in Windows Forms Anwendungen gibt es bereits einige vorgefertigte NET oder auch ActiveX Steuerelemente SoundPlayer WindowsMediaplayer Wollen Sie aber individuelle W nsche realisieren wie zum Beispiel eine eigene Benutzerober fl che oder einfach nur mit verschiedenen Befehlen experimentieren so k nnen Sie die MCI Schnittstelle direkt ansprechen Diese al
40. arb ComboBox die Werte Schwarz Weiss Graustufe und Farbe zu die ComboBox f r die DPI Zahl konfigurieren Sie mit 75 100 150 200 300 600 HINWEIS Binden Sie zus tzlich die Microsoft Windows Image Acquisition Library v2 0 in Ihr VB Projekt ein Projekt Verweis hinzuf gen COM R194 Auf den Scanner zugreifen 617 Quellcode Imports System I0 Public Class Forml Einige Konstanten f r die Auswahl des Bildformats Const wiaFormatBMP As String B96B3CAB 0728 11D3 9D7B 0000F81EF32E Const wiaformatPNG As String B96B3CAF 0728 11D3 9D7B 0000F81EF32E Const wiaFormatGIF As String B96B3CB0 0728 11D3 9D7B 0000F81EF32E Const wiaFormatJPEG As String B96B3CAE 0728 11D3 9D7B 0000F81EF32E Const wiaFormatTIFF As String B96B3CB1 0728 11D3 9D7B 0000F81EF32E Zun chst besch ftigen wir uns mit der Anzeige des Scannerdialogs Private Sub Buttonl_Click sender As Object e As EventArgs _ Handles Button1 Click Dim dlg As New WIA CommonDialog Dim img As WIA ImageFile Nothing img dig ShowAcquirelmage WIA WiaDeviceType ScannerDeviceType WIA WialmageIntent GrayscaleIntent WIA WialmageBias MaximizeQuality wiaFormatJPEG False False False HINWEIS Machen Sie sich keine Illusionen es ist fast egal was Sie dem Dialog bergeben es wird immer die Standardansicht angezeigt Wurde ein Bild zur ckgegeben m ssen wir dieses an unsere Anwendung weiterreichen If img IsNot Nothing
41. c max As Integer Variablendeklaration Console WriteLine Geben Sie die erste Zahl ein a CInt Console ReadLine Eingabe a max a Initialisieren von max Console WriteLine Geben Sie die zweite Zahl ein b CInt Console ReadLine Eingabe b If b gt max Then max b Bedingung Console WriteLine Geben Sie die dritte Zahl ein c CInt Console ReadLine Eingabe c If c gt max Then max c Bedingung Console WriteLine Das Maximum ist max ToString Ergebnisausgabe Console ReadLine Programm wartet auf lt Enter gt um zu beenden End Sub 32 1 Kleiner VB Anf ngerkurs Test Kompilieren Sie das Programm F 5 Taste und berzeugen Sie sich von seiner Funktionsf higkeit 8 gt ei Hs en m we A ee El T file IC Users Doberenz B U E C HER HANSER VISUAL STUDIO 11 aximum von drei Zahlen eben Sie die erste Zahl ein Shen Sie die zweite Zahl ein 18 gren Sie die dritte Zahl ein as Maximum ist 19 HINWEIS Durch Dr cken der Enter Taste beenden Sie Ihre erste VB Anwendung Bemerkungen Im Vorgriff auf die weiteren Kapitel erfolgt f r den Anf nger hier die Zusammenstellung einiger wichtiger Visual Basic Grundlagen wie sie in diesem Beispiel zur Anwendung gekommen sind Unser VB Programm beginnt mit der Main Methode die gewisserma en den Einstiegspunkt in das Programm darstellt Jedes VB Programm besteht aus einer Folge von Anweisungen Es besteht
42. d Class R5 Konsolenprogramm nach Windows portieren 43 F llen Sie den K rper des obigen Eventhandlers mit den erforderlichen Anweisungen aus sodass der komplette Eventhandler schlie lich folgenderma en aussieht Private Sub Buttoni_Click sender As Object e As EventArgs Handles Button1 Click Try Dim a As Integer Convert Tolnt32 TextBox1 Text Eingabe a Dim max As Integer a Initialisieren von max Dim b As Integer Convert ToInt32 TextBox2 Text Eingabe b If b gt max Then max b Bedingung Dim c As Integer Convert Tolnt32 TextBox3 Text Eingabe c If c gt max Then max c Bedingung Labell Text Das Maximum ist amp max ToString amp Ergebnisausgabe Catch ex As Exception essageBox Show ex Message Fehler Fehlermeldung End Try End Sub HINWEIS Beim Vergleich mit der Konsolenanwendung erkennen Sie dass Ein und Ausgabe deutlich einfacher und bersichtlicher geworden sind Test Nachdem Sie das Projekt abgespeichert haben kompilieren und starten Sie das Programm mit der F5 Taste oder durch Klick auf die entsprechende kleine Schaltfl che mit dem gr nen Dreieck auf der Symbolleiste von Visual Studio a9 Maximum von drei Zahlen Fee a b c Das Maximum ist 25 HINWEIS Sie k nnen mit der Tab Taste den Eingabefokus zwischen den einzelnen Kompo nenten der Bedienoberfl che verschieben In unserem Beispiel darf man nur Ganzzahlen eingeben Dank Fehle
43. dere DVM mit serieller Schnittstelle geeignet sein Die Abbildung zeigt das DVM beim Messen einer Batteriespannung oben sieht man das Kabel welches zum seriellen COM Port des PC f hrt Oberfl che Auf das Startformular Form setzen Sie ein mittels BorderStyle Font und Color Eigenschaften stattlich herausgeputztes Label welches als Anzeigeelement dienen soll Weiterhin ben tigen Sie als Herzst ck nat rlich das SerialPort Control sowie einen simplen Button zum Beenden Beim SerialPort Control k nnen Sie es meist bei den im Eigenschaftenfenster vorgegebenen Stan dardeigenschaften belassen DataBits 8 Parity None StopBits One belassen Lediglich die Eigenschaften PortName und BaudRate m ssen Sie individuell anpassen Letzteren Wert k n nen Sie in der Regel dem Datenblatt des DVM entnehmen z B Baudrate 2400 f r das verwendete DT9602R Und noch etwas sollten Sie nicht vergessen 1 Sogar der Hometrainer des Autors verf gt ber einen seriellen RS232 Port Preisg nstige Digitalvoltmeter mit RS232 Schnittstelle gibt es schon f r ca 30 Euro bei fast jedem Elektronikversand 622 8 Schnittstellen HINWEIS In unserem Fall ist die DirEnable Eigenschaft des SerialPort Controls auf True zu setzen Quellcode Imports System I0 Ports Public Class Forml Beim Laden des Formulars wird der Port ge ffnet Private Sub Forml_Load sender As Object e As EventArgs Handles MyBase Load SerialPortl Open End Sub
44. e Zahlenwerte abge legt werden Die F cher sind beschriftet mit 1 2 3 Die Anzahl der Regalf cher betr gt Nmax Diese Konstante ist ausreichend gro zu w hlen damit gen gend Reserven f r die maximale Anzahl N von Zahlenwerten vorhanden sind Start Deklaration Array arr 1 Nmax Y Eingabe N N gt Nmax Ausgabe Nmax berschritten oo Eingabe arrli L i 1 oder arr i gt max ja M max arrli a 1 it1 T i gt N nein Y q 34 1 Kleiner VB Anf ngerkurs Programmierung Die Umsetzung des PAP in ein VB Programm wird Ihnen umso leichter fallen je besser Sie das Vorg ngerbeispiel verstanden haben Module Modulel Sub Main Const Nmax As Integer 10 maximale Anzahl von Werten Console WriteLine Maximumbestimmung einer Zahlenfolge berschrift Console WriteLine Leerzeile Dim arr 10 As Integer Array dimensionieren Dim n max As Integer zwei Variablen deklarieren Console Write Geben Sie die gew nschte Anzahl von Werten ein n Convert ToInt32 Console ReadLine Eingabe n If n gt Nmax Then Bedingung trifft zu Console WriteLine Es d rfen maximal nur amp Nmax ToString amp Werte eingegeben werden Else Bedingung trifft nicht zu For i As Integer 1 Ton Beginn der Schleife Console Write Geben Sie die amp i ToString amp Zahl ein arr i 1 Convert ToInt32 Console ReadLine E
45. e bei diesem Rezept erst den kompletten Code von den Buchdaten in die Entwicklungsum gebung zu laden und dann mit der Lekt re fortzufahren 650 8 Schnittstellen Imports System Drawing f r die Grafikoperationen Zun chst sind einige globale Variablen hinzuzuf gen Private g As Graphics Nothing Graphics Objekt f r PaintBox Private BA As Byte Nothing Puffer Array f r die Pegelwerte Private xmax As Single Breite des Diagramms Pixel Private y0 As Single y Koordinate der Diagramm Mittellinie Pixel Private v As Single Streckungsfaktor der Amplitude Private i As Integer Z hler f r Timer Ticks ab Start Private dStart As DateTime Startzeit der Aufnahme Private msec As Integer seit Start abgelaufene Zeit in Millisekunden Private iv As Integer Timer Intervall ms Private Const tmax As Integer 60000 L nge der Zeitachse ms Zwecks Initialisierung der globalen Variablen wird der Zoad Eventhandler erg nzt Private Sub Forml_Load sender As Object e As EventArgs Handles MyBase Load g PictureBoxl CreateGraphics iv Timer1 Interval Voreinstellung 1Qms Die erforderliche Gr e des Puffer Arrays ergibt sich aus obigen Konstanten ReDim BA tmax iv 6000 gespeicherte Werte ca 60sek Abmessungen des Diagramms xmax PictureBox1 Width y PictureBox1 Height 2 Der vom MCI gelieferte Maximalpegel betr gt 127 Da bei Vollaussteuerung der obere bzw untere Rand der PictureBox nicht
46. e eine neue Klasse cOO Writer auf deren Details wir im Folgenden eingehen wollen Quelltext Klasse c00Writer Unsere neue Klasse Public Class cO0Writer Einige interne Objekte Private oStarOffice As Object Private oDesk As Object Private oDoc As Object Private oVC As Object Wir erstellen ein neues leeres Dokument Public Sub NewDocument Dim args 1 As Object oDesk oStarOffice createlnstance com sun star frame Desktop Das aktuelle Dokument oDoc oDesk LoadComponentFromURL private factory swriter _blank 0 args 1 Sollte ein Leser den Elan aufbringen die Klasse wesentlich zu erweitern sind die Autoren f r jede Art von Feedback dankbar Ganz nebenbei profitiert von dieser Library auch unsere C Leserschaft da sich VB beim Zugriff auf COM Objekte nach wie vor als berlegen erweist 626 8 Schnittstellen Der sichtbare Cursor oVC oDoc CurrentController ViewCursor End Sub Alternativ greifen wir auf eine vorhandene Datei zu Public Sub OpenDocument doc As String Optional ro As Boolean False Optional Passwort As String Dim args 2 As Object args 0 MakePropertyValue ReadOnly ro args 1 MakePropertyValue Password Passwort args 2 MakePropertyValue Hidden False oDesk oStarOffice createlnstance com sun star frame Desktop oDoc oDesk LoadComponentFromURL ConvertToUrl doc _blank 0 args oVC oDoc CurrentController ViewCursor End Sub HINWEIS Sie m
47. eam um im ms As New MemoryStream bytes Letzter Schritt ist die Anzeige des Bildes pictureBox1 Image Image FromStream ms Haben Sie statt einer Digitalkamera einen Scanner angeschlossen erscheint der bekannte Scan Dialog von Windows Was soll gescannt werden W hlen Sie den Bildtyp aus der gescannt werden soll Sie k nnen auch ualit t des gescannten Bildes verbessem 1 Unsere treuen Stammleser werden sich vermutlich noch an unser allererstes Buch siehe Abbildung von 1995 erinnern 610 8 Schnittstellen In diesem Dialog k nnen Sie auch spezielle Einstellungen Gr e DPI Farbe vornehmen Doch Vorsicht HINWEIS Gerade hier sollten Sie auf den Datentransfer per Arbeitsspeicher verzichten k nnen doch die Bilder sehr gro werden Bild er drucken per Assistent Neben der reinen Anzeige k nnen Sie per WIA auch gleich die Ausgabe realisieren ohne sich gro e Gedanken um ein ansprechendes Interface machen zu m ssen Ein entsprechender Assistent steht bereits ab Werk zur Verf gung Bilder drucken Wie sollen die Bilder gedruckt werden Drucker Papiergr e OKI C8600 44210x297 Ey og Ganzseitiges Foto LAS 13 x18 cm 2 u 20 x25 cm 1 1 von 1 Seite ui Kopien pro Bild ET V Bild an Rahmen anpassen Optionen Abbrechen Private Sub Button3_Click sender As Object e As EventArgs Handles
48. ebuggen Ausnahmen zum Knoten Managed Debugging Assistants Im Dialog Ausnahmen entfernen Sie das H kchen bei ZoaderLock in der Spalte Ausgel st Unterbrechen bei folgendem Ausnahmezustand Ausgel st Vom Benutzercode unbehandelt InvalidiMemberDeclarstion wi vi i InvalidOverlappedToPinvoke InvalidVariant LoadFromContext PT Weitersuchen MarshalCleanupError LomVj BaseClas R203 Eine C DLL in VB einbinden 667 Achten Sie bei der DLL Einbindung immer auf die korrekten Datentypen und sichern Sie Ihr Projekt Auf m gliche Probleme bei der bergabe diverser Datentypen k nnen wir hier aus Platzgr nden leider nicht n her eingehen Ein DLL Name sollte eindeutig kennzeichnen ob es sich um eine 32 Bit oder eine 64 Bit Variante handelt H ngen Sie dazu an den Namen 32 oder 64 an Dem Namen sollte wei terhin eine Beziehung zu Ihrem Produkt oder Ihrer Firmenbezeichnung zu entnehmen sein mstool32 d11 vb40032 d11 M glichen Konflikten mit verschiedenen DLL Versionen sollten Sie mit einer einfachen Ver sionskontrolle vorbeugen Ihr VB Programm muss als Erstes pr fen ob die DLL Version kor rekt ist Dies k nnte zum Beispiel im Zoad Event des Startformulars geschehen Damit l sst sich zum einen immer kontrollieren ob auch die aktuelle Version der DLL verwendet wird zum anderen wird mit diesem Aufruf die DLL in den Speicher geladen die Platte rasselt also
49. ed Add In programmieren und einbinden 643 Nach dem Start mit F5 sollte unsere NET MessageBox erscheinen Das Access Formular Erstellen Sie ein einfaches Access Formular nach folgender Vorlage Befehl2 Kombinationsfeld3 Ungebunden z Abbruch OK Mit dem Laden des Access Formulars wird folgender Code ausgef hrt Private Sub Form_Load With COMAddIns DOKOAddIn Connect Connect True Object ControlsAnbinden Befehl2 Kombinationsfeldi Me Referenzen bergeben End With End Sub Test Nach dem Starten des Formulars und dem Klick auf die obere Schaltfl che beachten Sie die ge n derte Beschriftung wird unser halbtransparentes NET Formular angezeigt EJ Beispielformular x Hier geht die Post ab 644 8 Schnittstellen Auch beim Schlie en des Formulars erscheint die Meldung aus dem Add In 5 m Ex Und jetzt ist das Formular zu Tr Bemerkungen Wie Sie gesehen haben ist eine nahtlose Integration in die Access Umgebung m glich HINWEIS Verwenden Sie im Add In ADO Objekte d rfte auch der Datenzugriff auf die gerade ge ffnete Datenbank kein Problem sein Sicher konnten wir hier zu dieser komplexen Materie nur einen ersten Einblick gew hren das rela tiv einfach umsetzbare Grundprinzip d rfte jedoch erkennbar geworden sein Mit der kostenpflichtigen Software Add in ExpressTM k nnen Sie auch in Visual Studio 2012 Add Ins f r ltere Off
50. eiter so Quelltext Imports System Net Public CI Priva ass Forml te Sub Buttonl_Click sender As Object e As EventArgs Handles Buttonl Click Instanz eines E Mail Clients erzeugen D im mail As New System Net Mail SmtpClient Die eigentliche Message D m m m m im msg As New System Net Mail MailMessage leser deutschland de TextBox1 Text sg Subject TextBox2 Text sg Body TextBox3 Text ail Credentials New NetworkCredential Hans Wurst ail Host server E Mail versenden m End S End Class Test ail Send msg ub Nach dem Klick sollte die Mail schon unterwegs sein 600 8 Schnittstellen R191 Die Zwischenablage verwenden Das Clipboard Objekt kann mit einer ganzen Reihe von Methoden aufwarten zu jedem der Daten typen Data Text Audio Image FileDropList gibt es eine Contains eine Get und eine Set Methode z B ContainsText GetText und SetText Eine Contains Methode True False berpr ft ob in der Zwischenablage eine Information im gew nschten Format vorliegt Die Get und Set Methoden bernehmen das Kopieren bzw Einf gen Ein kleines Beispiel zeigt wie es funktioniert Oberfl che In ein Windows Form f gen Sie bitte eine PictureBox eine TextBox MultiLine True sowie vier Schaltfl chen ein siehe Laufzeitansicht Quelltext Public Class Forml Text in die Zwischenablage kopieren Private Sub Button2_Click sender As Object e As Event
51. em Klick auf die Schaltfl che beginnen die hektischen Aktivit ten Private Sub Buttonl_Click sender As Object e As EventArgs Handles Buttonl Click Eine Instanz des Writers erstellen Dim oow As New cOOWriter Ein neues Dokument anlegen oow NewDocument Formatvorlage berschrift ausw hlen oow SetStyle berschrift 1 Textausgabe oow InsertString Lagerdaten Neuer Absatz und Formatvorlage Standard oow NewParagraph oow SetStyle Standard Zeilenvorschub oow NewLine Hier folgt die Schleife f r alle Artikel Elemente in den XML Daten For Each Artikel As XElement In ArtikelListe Elements Fettschrift und Textausgabe oow Bold True oow InsertString Artikelnr oow Bold False oow InsertString Artikel Element ArtikelNr Value oow NewLine oow Bold True r oow InsertString Artikelname oow Bold False oow InsertString Artikel Element Artikelname Value oow Bold True oow InsertString Lagerbestand oow Bold False oow InsertString Artikel Element Lagerbestand Value oow NewLine oow NewLine Next Artikel r oow NewLine r f 1 Im Gegensatz zu Word Excel etc wird der Writer standardm ig eingeblendet Sie m ssen diesen also nicht erst sichtbar machen R196 OpenOffice org Writer per OLE steuern 631 Last but not least wollen wir das erzeugte Writer Dokument als PDF Datei speichern If SaveFileDialogl ShowDialog System Windows Forms Di
52. en der Schaltfl che Report aufrufen erscheint zun chst die Vorschau von welcher aus Sie dann den Druck starten k nnen EHE m einen Bericht aufrufen Access A SEITENANSICHT Acrobat Thomas Gewinnus ou D H Seiterir nder arizeigeri a Q El 5 x j B0 Bei Drucken Format Seiten N r Daten drucken Hochformat Zoom a Daten Seitenansicht r nder X e ai schlie en Drucken Seitengr e Seitenlayout Zoom Vorschau schlie en A Bericht vom 27 11 2011 bis 26 11 2012 Alle Access Obj Tabellen a a E Bea Abfragen Personalplan Lfd Nr Ger t Rechnungsdatum Netto Telefonverzeichnis 1 Laserdrucker Formulare A 3 rn Bericht aufrufen mm Berichte A 3 TransceiverFT 890 E Reporti 4 PC Verbindungskabel Module 2 m 1 J h AET K NUM Bereit 636 8 Schnittstellen Bemerkungen Nat rlich w re es auch m glich den Druckvorgang bzw die Druckvorschau direkt aus VB her aus zu starten Wir haben uns jedoch f r das Dazwischenschalten eines Access Formulars entschieden um den Quellcode berschaubarer zu halten Auf die gleiche Weise wie hier f r ein Access Formular demonstriert lassen sich auch alle anderen Access Objekte Tabellen Berichte Abfragen Module von einer beliebigen NET Anwendung aus ber Automation quasi fernsteuern R198 Ein Managed Add In programmieren und einbinden Sie m chten
53. en zum Spei cherort der WAV Datei ermitteln da ansonsten z B wegen Leerzeichen im Dateinamen etc die WAV Datei von mciSendString nicht gespeichert werden kann lt DI1 Import kerne132 d11 CharSet CharSet Auto gt Private Shared Function GetShortPathName IpszLongPath As String IpszShortPath As StringBuilder cchBuffer As Integer As Integer End Function e Function shortPathName As String m shortPath As String String Empty m len As Long im buffer As New StringBuilder 256 im s As String Directory GetCurrentDirectory len GetShortPathName s buffer 256 shortPath buffer ToString Return shortPath End Function Priv O a a w Nach all diesen Vorbereitungen kann es nun endlich losgehen Bereits beim Laden des Formulars wird die MCI Schnittstelle angesprochen Private Sub Forml_Load sender As Object e As EventArgs Handles MyBase Load Eine neue leere Sound Aufnahme er ffnen Dim mciString As String open new type waveaudio alias myAlias Dim res As Integer mciSendString mciString Nothing 0 IntPtr Zero If res lt gt 0 Then MessageBox Show getMciError res MCI Fehler beim ffnen des Ger ts Open New Befehl 646 8 Schnittstellen MessageBoxButtons OK MessageBoxIcon Error End If Parameter einstellen 8000 Abtastungen pro Sekunde mit je 1 Byte da es sich um die Standard werte handelt k nnte dieser MCI Aufruf auch weggelassen werden meiString set myAlias time f
54. ext Schleife erledigen Nach Aufruf der Methode berechne erfolgt dann die Ergeb nisanzeige Private Sub Buttoni_Click sender As Object e As EventArgs Handles Button1 Click Dim n As Integer ListBox1 Items Count Anzahl der ListBox Eintr ge If n gt 0 Then ListBox hat mindestens einen Eintrag ReDim arr n 1 Array dimensionieren For i As Integer 0 Ton 1 R6 Werte in einer ListBox anzeigen 47 Try arr i Convert ToDouble ListBox1 Items i ListBox gt Array Catch ex As Exception Fehlerbehandlung MessageBox Show ex Message Fehler End Try Next i berechne Methodenaufruf Label1 Text max ToString Ergebnisanzeige Label2 Text min ToString Label3 Text av G leitkommazahl formatieren End If End Sub Der letzte Event Handler erm glicht das L schen der gesamten Zahlenreihe um wieder von vorn beginnen zu k nnen Private Sub Button2_Click sender As Object e As EventArgs Handles Button2 Click ListBox1 Items Clear arr Nothing Array freigeben TextBox1 Text String Empty Labell Text String Empty Label2 Text String Empty Label3 Text String Empty End Sub End Class Test Geben Sie eine beliebig lange Zahlenkolonne ein jede Zahl mit Enter Taste abschlie en und las sen Sie sich dann das Ergebnis der Auswertung anzeigen a9 Auswerten von Zahlenreihen E Es Eingabe mit ENTER abschlie en 10 5 Maximum 20 3 20 3 5 8 26 12 03 14 7 Minimum 2 55 14
55. ext zu generieren lediglich auf Dateianh nge m ssen Sie verzichten Aufgerufen wird die Anweisung mit Hilfe der Start Methode eines Process Objekts siehe dazu gt R240 Ein externes Programm starten HINWEIS Das in R241 vorgestellte Programm k nnen Sie f r die folgenden Beispiele verwen den Sie m ssen jedoch die Zeile proc WaitForExit auskommentieren Folgende Varianten bieten sich an BEISPIEL Eine einfache E Mail ohne Betreffzeile oder Body Text mailto xyz abc com BEISPIEL Eine E Mail mit einer Betreffzeile Preisanfrage mailto xyz abc com subject Preisanfrage BEISPIEL Eine E Mail mit Adresse Betreffzeile und zus tzlicher Kopie an die Adresse hans glueck com mailto xyz abc com subject Preisanfrage amp CC hans glueck com BEISPIEL Eine E Mail mit Adresse Betreffzeile sowie einem E Mail Text mailto abc xyz de subject Anfrage Preisliste amp Body Bitte senden Sie mir 0A die aktuellen Preislisten zu Wie Sie sehen ist die Verwendung recht einfach Es sind lediglich einige Grundregeln zu beachten Die Betreffzeile subject ist mit einem Fragezeichen von der Adressangabe zu trennen Alle weiteren Optionen sind mit einem amp voneinander zu trennen 598 8 Schnittstellen Zeilenumbr che in der Textangabe k nnen Sie mit der Kombination 0A realisieren Leerzeichen in der Adressangabe k nnen Sie mit 20 einf gen Test Tragen Sie obige Anweisungen in das Programm ein und k
56. gabe von j bzw n m ssen Sie die Enter Taste dr cken R4 Berechnungen in eine Methode auslagern 37 E file C Users Doberenz B U E C H E R HANSER VISUAL STUDIO 11 mE aximum einer Zahlenfolge eben Sie die gew nschte Anzahl von Werten ein 2 eben Sie die 1 Zahl ein 3 eben Sie die 2 Zahl ein 4 as Maximum ist 4 ollen Sie das Programm beenden j n n eben Sie die gew nschte Anzahl von Werten ein 3 eben Sie die 1 Zahl ein 6 eben Sie die 2 Zahl ein 8 eben Sie die 3 Zahl ein 7 as Maximum ist 7 ollen Sie das Programm beenden j n j 4 m b Bemerkungen Mit Nothing eine Zeigervariable auf nichts wird der vom Array belegte Speicherplatz wie der freigegeben Die Do Loop While Schleifenanweisung verlangt am Ende eine Abbruchbedingung In unserem Beispiel dient die String Variable c der Entgegennahme einer Benutzereingabe j bzw n R4 Berechnungen in eine Methode auslagern Es gibt kein Programm das man nicht noch weiter verbessern k nnte Da sich von einer Zahlen reihe weitaus mehr Informationen gewinnen lassen als nur der Maximalwert sollen Sie noch ein weiteres Problem l sen Aufgabenstellung Erg nzen Sie das Programm damit auch Minimum und Durchschnitt ausgegeben werden L sungsvorschlag Trotz der erweiterten Funktionalit t erscheint der nachfolgend abgebildete PAP keinesfalls kompli zierter als sein Vorg nger zu sein Dies wurde vor a
57. ganz erreicht werden soll bauen wir in den Streckungsfaktor eine kleine Reserve ein v y0 149 End Sub Der Click Eventhandler des Buttons wird modifiziert Private Sub Buttonl_Click sender As Object e As EventArgs Handles Buttonl Click If Buttonl Text START Then auf START geklickt Dim mciString As String record myAlias Dim res As Integer mciSendString mciString Nothing 0 IntPtr Zero If res lt gt Then MessageBox Show getMciError res MCI Fehler beim Starten der Aufnahme Record Befehl MessageBoxButtons OK MessageBoxIcon Error End If Buttonl Text STOPP R201 Pegeldiagramm aufzeichnen 651 Nach dem Klick auf START beginnt eine neue Aufnahme d h die Startzeit wird zugewiesen der Z hler zur ckgesetzt und das alte Diagramm gel scht dStart DateTime Now i 0 PictureBox1 Refresh Else auf STOPP geklickt Das Abspeichern der Sound Datei wird in eine separate Prozedur siehe unten verlagert savefile Buttonl Text START End If End Sub Die Prozedur zum Abspeichern der Sound Datei im aktuellen Verzeichnis Private Sub saveFile Dim mciStr As String save myAlias amp shortPathName amp Test wav Dim res As Integer mciSendString mciStr Nothing 0 IntPtr Zero If res lt gt 0 Then MessageBox Show getMciError res MCI Fehler beim Speichern der Datei Save Befehl MessageBoxButtons OK MessageBoxIcon Error End If End Sub Bei einem Timerintervall von
58. h in diesem Fall etwas vom ShowAcquirelmage Dialog siehe folgende Abbildung 612 8 Schnittstellen gt Ze Neuer Scan EA Profil Foto Standard z Quelle Flachbett 2 Farbformat Farbe 2 Dateiformat JPG Ulead Photolmpact Image Aufl sung DPI 300 Helligkeit B 0 Kontrast l l DO ASS Separate Dateien f r Bildvorschau oder Bildscan as Mehr dazu im Rezept gt R194 Auf den Scanner zugreifen Grafikbearbeitung mit WIA Neben dem reinen Import bietet sich WIA auch f r die Bearbeitung von Bildern an Nachdem diese in einem mageFile Objekt vorliegen k nnen diese mit dem mageProcess Objekt verarbeitet wer den Dazu erstellen Sie zun chst eine Instanz des ImageProcess Objekts und weisen per Filters Add Methode spezielle Verarbeitungsfilter zu Anschlie end k nnen Sie diese noch konfigurieren BEISPIEL Konvertieren einer eingescannten Grafik ins TIFF Format Dim dlg As New WIA CommonDialog Dim img As New WIA ImageFile Dim proc As WIA ImageProcess If OpenFileDialogl ShowDialog System Windows Forms DialogResult OK Then Bild einlesen img LoadFile OpenFileDialogl FileName R193 Auf eine Webcam zugreifen 613 Konverter erzeugen proc New WIA ImageProcess Filter zuweisen proc Filters Add proc FilterInfos Convert FilterID Filter konfigurieren proc Filters 1 Properties FormatID Value wiaFormatTIFF Filter anwenden
59. halling ent sprechend des jeweiligen Zielbetriebssystems lt D11Import winmm d11 CharSet CharSet Auto gt Die Funktion mciSendString ist das Herzst ck des Programms sie sendet unsere Befehle an die MCI Schnittstelle Private Shared Function mciSendString IpstrCommand As String IpstrReturnString As StringBuilder uReturnLength As Integer hwndCallback As IntPtr As Integer End Function Die MCI Funktion mciGetErrorString gibt uns Fehlertexte f r einen bestimmten Fehlercode zur ck was insbesondere beim Experimentieren sehr hilfreich ist lt D11 Import winmm d11 CharSet CharSet Auto gt Private Shared Function mciGetError tring dwError As Integer IpstrBuffer As StringBuilder uLength As Integer As Integer End Function Mit der Funktion getMciError kapseln wir den Aufruf obiger API Funktion Private Function getMciError errCode As Integer As String Dim errMsg As New StringBuilder 255 If mciGetError tring errCode errMsg errMsg Capacity Then Return MCI Fehler amp errCode Else Return errMsg ToString End If End Function Ein bestimmtes MCI Ger t wird innerhalb der Befehlszeichenkette ber einen frei definierbaren Alias identifiziert Private _alias As String meiAlias R202 Sound und Video Dateien per MCI abspielen 655 Eine private Zustandsvariable zeigt an ob das angesprochene MCI Ger t ge ffnet ist Private _isOpen As Boolean False Der Lesezugriff Public ReadOnly Property IsOpen As
60. he Add In Wie Sie dem obigen Listing entnehmen konnten rufen wir auch ein NET Formular auf Dieses m ssen wir zun chst erstellen Men Projekt Windows Form hinzuf gen F gen Sie eine TextBox und einen Button ein und legen Sie die Multiline Eigenschaft der TextBox mit True fest Damit wir das Formular auch deutlich von einem Access Formular unterscheiden k nnen setzen wir die Opacity Eigenschaft Transparenz auf 50 a 8 Schnittstellen Erstellen der Access Anwendung Kompilieren und Einbinden Nach dem Kompilieren des Add Ins in Visual Studio Men Erstellen k nnen Sie sich bereits in Microsoft Access Optionen von der Anwesenheit des neuen Add Ins berzeugen Access Optionen 22 marene VRR en Aktuelle Datenbank Datenblatt Add Ins Objekt Designer Name Ort Typ Dokumentpr fung Aktive Amwendlungs Add Ans amp Test Addin C crosoft AddIns bookwizz mda Access Add In Erweitert DOKO Test Addin mscoree dil COM Add In Anpassen Inaktive Anwendungs Add Ins Microsoft Office 2007 Access Datenbankmodul Konfliktl ser C t shared OFFICEL2 ACECNF DLL COM Add In Doch wie k nnen wir auf das Add In zugreifen Eine kurze VBA Routine ffnen Sie dazu den VBA Editor zeigt die Vorgehensweise bevor wir uns an ein eigenes Formular wagen Sub test With COMAddIns DOKOAddIn Connect Connect True Hier rufen wir unsere Methode auf Object info End With End Sub R198 Ein Manag
61. hr nkt sind Insbesondere trifft dies auf verteilte Umgebungen zu d h Intranet und Internet Applikationen lassen sich mit VBA wenn berhaupt nur sehr umst ndlich entwickeln Um von VB aus auf Access Datenbanken zugreifen zu k nnen gibt es haupts chlich zwei Alterna tiven Automation und ADO NET Automation erlaubt bekanntlich die quasi Fernsteuerung einer Anwendung von einer anderen Anwendung aus Sie sollten Automation dann verwenden wenn Sie an Access spezifischen Featu res interessiert sind wie z B die Druck oder Vorschau Funktionen f r Access Reports das Anzei gen und Manipulieren eines Access Formulars oder der Aufruf eines Makros Im vorliegenden Beispiel werden wir zeigen wie Sie auf einen Access Report per OLE Automa tion zugreifen k nnen Um es nicht ganz so einfach zu machen rufen wird den Report allerdings ber ein Access Formular auf in welches Bereichsgrenzen einzugeben sind Oberfl che Erstellen Sie eine eine neue Windows Forms Anwendung Auf dem Hauptformular platzieren Sie eine Schaltfl che ber das Men Projekt Verweis hinzuf gen ffnen Sie den entsprechenden Dialog wo Sie auf der COM Seite einen Verweis auf die Microsoft Access xx x Object Library einrichten b Assemblys Suchen COM Ctri E Pr b Projektmappe Name Name Journal Reader 1 0 Type Library Mi RA 15 0 Object 4 COM Legacy Microsoft Transaction Server Type Library brary Se J Legacy MTSEvents 1 0 Type
62. ice Versionen erstellen http www add in express com add in net index php R199 Sound per MCI aufnehmen Im vorliegenden Rezept wollen wir uns der Aufnahme von WAV Dateien widmen wobei mittels unverwaltetem Code auf Windows Bordmittel d h auf die gute alte MCI Schnittstelle zur ck gegriffen wird Oberfl che Ein Formular mit einer Schaltfl che die Sie mit START beschriften gen gt Quellcode Imports System I0 Imports System Runtime InteropServices Public Class Forml Die folgenden zwei API Deklarationen greifen auf die MCI Schnittstelle Ihres PCs zu lt DI1 Import winmm d11 CharSet CharSet Auto gt R199 Sound per MCI aufnehmen 645 Private Shared Function mciSendString IpstrCommand As String IpstrReturnString As StringBuilder uReturnLength As Integer hwndCallback As IntPtr As Integer End Function lt DI1 Import winmm d11 CharSet CharSet Auto gt Private Shared Function mciGetErrorString dwError As Integer IpstrBuffer As StringBuilder ulength As Integer As Integer End Function MCI Fehlermeldung dekodieren wir erhalten ausf hrliche Fehlerbeschreibungen Private Function getMciError errCode As Integer As String Dim errMsg As New StringBuilder 255 If mciGetErrorString errCode errMsg errMsg Capacity Then Return MCI Fehler amp errCode Else Return errMsg ToString End If End Function Mit Hilfe der API Funktion GetShortPathName k nnen wir den kurzen Pfadnam
63. ingabe i te Zahl in Array If i 1 Or arr i 1 gt max Then max arr i 1 Next i Ende der Schleife Console WriteLine Console WriteLine Das Maximum ist amp max ToString amp Ergebnis End If Console ReadLine End Sub End Module Test Gleich nach Programmstart werden Sie zur Eingabe der Anzahl von Werten aufgefordert die belie big gro sein kann Bemerkungen Die Kommentare im Quelltext beschr nken sich nur auf die Neuigkeiten gegen ber dem Vor g ngerbeispiel vor allem auf das Array arr 10 und die For To Next Schleifenanweisung die genau n mal durchlaufen wird Ein Array Index steht immer in runden Klammern hinter der Arrayvariablen Der untere Index eines Arrays beginnt mit null deshalb wird im Feld arr 0 die erste Zahl gespeichert Die ToString Funktion ber die jedes NET Objekt verf gt verwandelt den Array Index i Datentyp Integer in eine Zeichenkette Datentyp String damit eine Ausgabe ber Write erm glicht wird R3 Die Arraygr e zur Laufzeit ndern 35 R3 Die Arraygr e zur Laufzeit ndern Im Vorg ngerbeispiel wurde das Programm nach einem einzigen Durchlauf beendet danach war ein Neustart erforderlich Aufgabenstellung Erg nzen Sie das Programm so dass es nach Ermittlung des Maximums entweder wieder von vorn beginnt oder aber beendet werden kann L sungsvorschlag Start Deklaration dyn Array arr j Eingabe N Arraygr
64. istungsf higer Controls Aufgabenstellung Verwandeln Sie das Konsolenprogramm aus R4 Berechnungen in eine Methode auslagern in eine Windows Forms Applikation und zeigen Sie die Zahlenreihe in einer ListBox an F r die Eingabe sollen nicht nur ganze Zahlen sondern auch Gleitkommazahlen zul ssig sein R6 Werte in einer ListBox anzeigen 45 L sungsvorschlag Da Sie die allgemeine Vorgehensweise bereits am Vorg ngerbeispiel ge bt haben werden sich die folgenden Erl uterungen nur auf das Spezifische beschr nken Die folgende Abbildung zur Gestaltung der Benutzerschnittstelle ist lediglich als Anregung zu ver stehen Eine TextBox dient zur Eingabe der Zahlen die per Enter Taste in eine ListBox bernom men werden sollen F r die bequeme Bedienung und Anzeige sind weiterhin zwei Button und drei Label Steuerelemente vorgesehen aD Auswerten von Zahlenreihen o E E Eingabe mit ENTER abschlie en a Programmierung In die Klasse Form tragen Sie zun chst folgenden Code ein wie er Ihnen bereits in hnlicher Gestalt aus der entsprechenden Konsolenanwendung bekannt ist Public Class Forml Private arr As Double globale Variable deklarieren Private max min As Double Private av As String Private Sub berechne Dim sum As Double arr 0 lokale Variable min arr 0 max arr 0 globale Variable initialisieren Dim n As Integer arr Length 1 n For i As Integer 1 To n If a
65. it dem Paste Wechsel zu NET 2x kr ftig gemausert Zu jedem der Datentypen Data Text Audio Image File DropList gibt es eine Contains eine Get und eine Set Methode z B ContainsText GetText und SetText R192 Die WIA Library kennenlernen Geht es um den Zugriff auf externe Ger te wie Scanner Digitalkameras Webcams etc bietet sich dem Programmierer mit der Microsoft WIA Library Windows Image Acquisition Automation Layer eine recht komfortable Variante an deren Vorteil unter anderem darin besteht ohne viel VBCode auszukommen Doch worum geht es eigentlich Bei WIA handelt es sich um eine komplexe Windows COM API die das Auslesen statischer Bilder von Scannern digitalen Kameras WebCams das Nachbearbeiten Gr e Farbe Drehen 602 8 Schnittstellen das Kommentieren Exif Informationen und das Konvertieren in diverse Dateiformate PNG JPG GIF BMP TIFF erm glicht HINWEIS WIA steht dem Programmierer als COM Komponente in der Datei wiaaut dll zur Verf gung Installation Vorbereitung Die Unterst tzung beschr nkt sich auf die Windows Version XP ab SP1 und alle sp ter erschie nenen Windows Versionen Vista 7 8 Server Windows Vista Windows 7 Windows 8 Die komplette und aktuelle WIA Libary ist bereits auf Ihrem System installiert Sie k nnen sofort loslegen indem Sie die Microsoft Windows Image Acquisition Library v2 0 in Ihr VB Projekt ein binde
66. l Dim buffer As New StringBuilder 20 Dim res As Integer mciSendString mciString buffer buffer Capacity IntPtr Zero If res lt gt 0 Then MessageBox Show getMciError res MCI Fehler bei der Status Abfrage status level Befehl MessageBoxButtons OK MessageBoxIcon Error End If R201 Pegeldiagramm aufzeichnen 649 Der Input Level ist ein vorzeichenloser Wert F r die von uns gew hlte 8 Bit Abtastgenauigkeit liegt er zwischen 0 und 127 0x7F bei 16 Bit Abtastung zwischen 0 und 32 767 0x7FFF Dim level As Byte Byte Parse buffer ToString N og MA ProgressBarl Value level End Sub End Class Test Die Aussteuerungsanzeige funktioniert sowohl vor als auch w hrend der Aufnahme a3 Sound Recorder Arna START R201 Pegeldiagramm aufzeichnen So richtig professionell wirkt ein Sound Recorder erst dann wenn man den Pegelverlauf in Echt zeit auf einem Diagramm verfolgen kann Diese u a auch bei medizinischen berwachungsge r ten bliche Darstellung wollen wir anhand einer Programmerweiterung des Vorg ngerrezepts R200 Mikrofonpegel anzeigen demonstrieren Oberfl che Erg nzen Sie das vorhandene Formular durch eine PictureBox und ein repr sentatives Label Gestalten Sie die Oberfl che entsprechend der Laufzeitabbildung am Schluss dieses Rezepts Quellcode Erg nzungen Um wegen der zahlreichen Erg nzungen die bersicht nicht zu verlieren empfiehlt es sich insbe sonder
67. lass Das m gliche Ergebnis ger teabh ngig 4101 Item Flags 67 4120 Color Profile Name C Windows syster 6147 Horizontal Resolution 100 6148 Vertical Resolution 100 6151 Horizontal Extent 850 6152 Vertical Etent 1170 6149 Horizontal Start Position 0 6150 Vertical Start Position 0 4103 Data Type 3 4104 Bits Per Pixel 24 6154 Brightness 0 6155 Contrast 0 6146 Curent Intent 0 4112 Pixels Per Line 850 4114 Number of Lines 1170 4105 Preferred Format B96B3CAA 0728 11 Test Nach dem Start k nnen Sie beide Scan Varianten ausprobieren Experimentieren Sie ruhig auch einmal mit den Properties des tem Objekts um andere Aufl sungen oder Scanbereiche zu be stimmen 620 8 Schnittstellen Bemerkung i Scan mit Dialog Scan ohne Dialog 4098 tem Name Top 4099 Full tem Name 0001 Root Top 4101 ltem Flags 67 4120 Color Profile Name C AWindowe system 6147 Horizontal Resolution 100 6148 Vertical Resolution 100 6151 Horizontal Extent 850 6152 Vertical Extent 1170 6149 Horizontal Start Position 0 6150 Vertical Start Position 0 4103 Data Type 3 4104 Bits Per Pixel 24 6154 Brightness 0 6155 Contrast 0 6146 Curent Intent D Die Parameter f r ShowAcquirelmage SYNTAX Die Bedeutung Parameter DeviceType Intent Bias FormatID AlwaysSelectDevice UseCommonUI CancelError ImageFile Sho
68. legen von Name und Beschreibung des Add Ins f Assistent f r gemeinsames Add In Seite 3 von 5 PAIE Geben Sie einen Namen und eine Beschreibung ein T F r ein Add In sind ein Name und eine Beschreibung erforderlich damit es sich den gt m Benutzern besser erschlie t Geben Sie unten Entsprechendes ein ca Geben Sie einen Namen f r das Add In ein DOKO Test Addin Geben Sie eine Beschreibung f r das Add In ein Wir spielen etwas lt Zur ck Weiter gt Abbrechen Die beiden folgenden Optionen lassen wir f r die Entwurfszeit markiert auf diese Weise wird das Add In automatisch beim Start von Access geladen und steht jederzeit zur Verf gung er f r gemeinsames Add In Seite 4 von 5 el w hlen Sie die Add In Optionen aus yo Add In Optionen a e E V Das Add In laden wenn die Hostanwendung geladen wird V Das Add In soll f r alle Benutzer des Computers verf gbar sein auf dem es installiert ist nicht nur f r den Benutzer der das Add In installiert lt Zur ck Weiter gt R198 Ein Managed Add In programmieren und einbinden 639 Nach einigem Festplattenklappern sollte ein neues Projekt in Visual Studio erscheinen das aus dem eigentlichen Add In und einem Setup Projekt besteht mehr dazu sp ter Verweise einrichten So wie das Projekt derzeit konfiguriert ist ist die Programmierung sicher nicht komfortabel fehlen doch alle Datentypen Objekte und Konstanten die wir
69. lerdings ist nicht Teil von NET sondern geh rt zum Uralt Bestand von Windows seit 3 1 d h die Fremdbibliothek winmm dll muss importiert werden Mittels einfacher Kommandos Open Play k nnen Sie dann auf alle verf gbaren Multimedia Ger te zugreifen f r die ein MCI Treiber existiert Das vorliegende Rezept demonstriert dies anhand eines einfachen selbstgestrickten Players f r Sound und Videodateien unterschiedlichster Formate Wave MP3 Midi AVI WMV MPEG etc Oberfl che ffnen Sie eine neue Windows Forms Anwendung und gestalten Sie die Oberfl che von Form1 mit vier Buttons zwei TrackBars und je einem Label OpenFileDialog Timer und StatusStrip Setzen Sie die TopMost Eigenschaft von Form auf True i ToolStripStatusLabell BI OpenFileDialog1 Timerl Ex StatusStripl 654 8 Schnittstellen Klasse C_MCI Den Zugriff auf die MCI Schnittstelle kapseln wir zwecks sp terer Wiederverwendbarkeit in einer separaten Klasse C_MCI deren Ger st wir ber das Men Projekt Klasse hinzuf gen erzeugen Imports System I0 Imports System Text Vergessen Sie keinesfalls f r den unmanaged Zugriff auf die Windows API den folgenden Namespace einzubinden Imports System Runtime InteropServices Public class C_MCI Die beiden erforderlichen MCI Funktionen sind Teil der Datei winmm dil Dabei definiert der optionale CharSet Parameter die automatische bergabe von Zeichenfolgen Mars
70. licken Sie auf den Start Button e a kaa haitto abc xyz de subject Anfrage Preisliste amp Body Bitte senden Sie mir 0A die aktuellen es A Put z Anfrage Preisliste Nachricht HTML ex m x Nachricht Einf gen Optionen Text formatieren Adobe PDF B A Caibi 12 Aa 0 amp y i F Gerd E g DIESE E A Be Er en inf gen rg men Namen achver echtschreibung e A 32x A e z r Br folgung Zwischenabta Eu Basistext E d Einschlie gt Optionen Ta Dokumentpr fung An abc xyz de Co Betreff Anfrage Preisliste amp Bitte senden Sie mir a die aktuellen Preislisten zu w R190 E Mails mit dem integrierten Mail Client versenden Der Ablauf f r das Senden einer E Mail in Windows Forms Anwendungen entspricht der Vor gehensweise bei ASP NET Anwendungen wie es in Rezept gt R458 EMail Versand in ASP NET realisieren ausf hrlich erl utert wurde An dieser Stelle wollen wir deshalb die theoretischen Grundlagen nicht erneut auswalzen sondern mit einem kleinen Beispielprogramm die Umsetzung f r Windows Forms Anwendungen demons trieren Oberfl che Ein Windows Form drei TextBoxen Empf nger Betreff Nachricht einige Labels f r die Be schriftung sowie ein Button gen gen R190 E Mails mit dem integrierten Mail Client versenden 599 Empf nger ran Betreff Fehler im Buch gefunden Nachricht Das Buch ist ja voller Fehler Macht nur w
71. llem durch Auslagern der Berechnungsfunktio nen f r Maximum Minimum und Durchschnitt in ein Unterprogramm eine Methode erreicht 38 1 Kleiner VB Anf ngerkurs Start Deklaration dyn Array arr gt y Eingabe N Arraygr e Eingabe arr i 1 i 1 oder arr i gt max ja h max arr i i i 1 T i gt N nein y Berechne Max Min Unterprogramm Durchschnitt Ausgabe Max Min Durchschnitt Eingabe c BB ER c y nein y Programmierung Aufgrund der vielen Analogien zum Vorg ngerbeispiel wird auch hier nur auf die Besonderheiten per Kommentar hingewiesen Module Modulel globale Variablen deklarieren Private arr As Integer Private max min As Integer Private av As String R4 Berechnungen in eine Methode auslagern 39 Private Dim min max Dim Sub berechne hier beginnt die Methode sum As Double arr 0 lokale Variable arr 0 arr 0 globale Variablen initialisieren n As Integer arr Length 1 For i As Integer 1 Ton If arr i gt max Then max arr i Else If arr i lt min Then min arr i End If sum arr i Next i Dim d As Double sum n 1 Durchschnitt berechnen av d ToString 0 00 globale Variable zuweisen End Sub hier endet die Methode Sub Main Console WriteLine Auswerten einer Zahlenfolge berschrift Console WriteLine Leerzeile Dim n As Integer Dim
72. lose amp _alias Nothing 0 IntPtr Zero is0pen False End If End Sub End Class Form1 Nun steht der Realisierung unseres Multimedia Players nichts mehr im Weg und wir k nnen die eingangs entworfene Bedienoberfl che beispielsweise mit folgendem Code hinterlegen Public Class Forml Die beim Laden des Formulars zugewiesenen Anfangswerte k nnten Sie stattdessen auch direkt im Eigenschaftenfenster zuweisen Private Sub Forml_Load sender As Object e As EventArgs Handles MyBase Load 658 8 Schnittstellen TrackBarl Maximum 10000 TrackBarl LargeChange 1 TrackBar2 Maximum 1000 TrackBar2 Value 1000 TrackBar2 LargeChange 100 Timerl Interval 100 End Sub Eine Instanz unseres Multimedia Players erzeugen rivate myMCI As New C_MCI Korrekturfaktor f r TrackBar Anzeige Private kf As Single 1 Eine Multimedia Datei ffnen OPEN Schaltfl che rivate Sub Buttonl_Click sender As Object e As EventArgs Handles Buttonl Click If OpenFileDialogl ShowDialog DialogResult OK Then myMCI Open openFileDialogl FileName ze arl Bei der Berechnung des Korrekturfaktors ist eine Typkonvertierung erforderlich da sonst die Nachkommastellen abgeschnitten werden kf Convert ToSingle myMCI Length TrackBarl Maximum ToolStripStatusLabell Text OpenFileDialogl FileName Button2 Text PLAY End If End Sub Die Schaltfl che PLAY STOPP Private Sub Button2_Click sender As Object e As EventArgs Handles
73. n Erstellen Sie dazu ein neues Projekt und f gen Sie die o g Library ber Projekt Verweis hinzuf gen hinzu siehe folgende Abbildung HINWEIS Ab Visual Studio 2010 wird die PIA bzw die n tigen Datentypen automatisch in die Anwendung eingebunden eine Weitergabe der extra Assembly ist also nicht mehr n tig b Assemblys Suchen COM Ctri E Pr b Projektmappe 4 COM Typbibliotheken Aktuell b Durchsuchen 1 Primary Interop Assembly Name Microsoft Windows Defender COM Utili Microsoft Windows Microsoft Windows Installer Object Library Microsoft Windows Media Player Network Sharin Microsoft WinHTTP Services version 5 1 Microsoft WMI Scripting V1 2 Library Microsoft Word 15 0 Object Library Microsoft WSMAN Automation V1 0 Library Microsoft XML v3 0 Microsoft XML v6 0 Microsoft Office PowerPivot ExcelAddIn Microsoft TeamFoundation Officelntegration Co Microsoft VisualStudio ProductKeyDialog dil E Wiera din Melia Tante l asdATarsErn gt Name Microsoft Windows Image Acquisition Library v2 0 Erstellt von Microsoft Corporation Version 1 0 Dateiversion 6 2 9200 16384 win amp _rtm 120725 1247 R192 Die WIA Library kennenlernen 603 Windows XP Hier ist noch etwas Nacharbeit angesagt da sich auf Ihrem System derzeit nur die Version 1 x befindet Laden Sie zun chst die aktuelle Version der WIA von der Microsoft Webseite LINK http www microsoft com downloads details aspx F
74. nde Beispiele R5 Konsolenprogramm nach Windows portieren 41 R5 Konsolenprogramm nach Windows portieren Wir wollen die langweiligen Konsolenanwendungen endlich hinter uns lassen und ab jetzt zeitge m e Windows Applikationen verwenden Auch hier geht es mit einer ganz einfachen Aufgabe los Aufgabenstellung L sen Sie mit einer Windows Forms Anwendung das gleiche Problem Maximumbestimmung von drei Integer Zahlen wie im Beispiel gt RI Das EVA Prinzip anwenden Oberfl chenentwurf Starten Sie Visual Studio und ffnen Sie ein neues Projekt Projekttyp Visual Basic Vorlage Win dows Forms Anwendung b Aktuell NET Framework 4 5 Sortieren nach Standard er Suchen Inst P 4 Installiert 2 Windows Forms Anwendung Visual Basic Typ Visual Basic Ein Projekt zum Erstellen einer Anwendung mit einer Windows Benutzeroberfl che 4 Vorlagen sine WPF Anwendung Visual Basic Konsolenanwendung Visual Basic Windows Internet ASP NET Web Forms Anwen Visual Basic Ei m Windows Store EE Ei b Office Cloud Any Klassenbibliothek Visual Basic ae un b Online PL Portable Klassenbibliothek Visual Basic v Name Maxim um Ort C Temp Durchsuchen L sung Neue Projektmappe erstellen Projektmappenname Maximum Projektmappenverzeichnis erstellen Zur Quellcodeverwaltung hinzuf gen Abbrechen ndern Sie den standardm igen Namen WindowsApplica
75. ndene und in C geschriebene DLL nutzen oder aber einen Teil der Pro grammlogik auslagern wollen um eine Offenlegung Ihres wertvollen VB Quellcodes zu verhin dern oder zumindest zu erschweren Die Mehrzweckwaffe Visual Studio 2012 erlaubt Ihnen unter anderem auch das Erstellen von C H DLLs was wir am Beispiel einer einfachen Sortierroutine die wir in ein VB Projekt einbin den werden demonstrieren wollen HINWEIS Das vorliegende Rezept befasst sich mit dem Programmieren einer echten DLL also nicht mit ActiveX DLLs bzw COM Komponenten DLL Projekt erstellen Starten Sie die Entwicklungsumgebung Visual Studio 2012 und klicken Sie auf Neues Projekt W hlen Sie links unter der Vorlage Andere Sprachen die Sprache Visual C und in der mittleren Spalte Win32 Projekt Vergeben Sie den Namen Sortier f r das Projekt und klicken Sie auf Ok 1 Das Decompilieren einer NET Assembly ist leider sehr leicht m glich was einen Schutz Ihres geistigen Eigentums schwierig und teuer macht 662 8 Schnittstellen HINWEIS Die Variante MFC DLL bringt nur unn tigen Overhead mit sich den wir nicht be n tigen In weiteren Verlauf ffnet sich ein neuer Assistent in welchem wir den Projekttyp spezifizieren Markieren Sie die Optionen DLL und Leeres Projekt und klicken Sie auf Fertig stellen bersicht Allgemeine Headerdateien hinzuf gen Windows Anwendung f r Konsolenanwendung DUL Statische Bibliothek Zus
76. ne Fehlerklasse definieren und eine Ausnahme werfen Throw MCI Exception If res lt gt 0 Then MessageBox Show getMciError res MCI Fehler beim ffnen des Ger ts Open Befehl MessageBoxButtons OK MessageBoxIcon Error Exit Sub End If 656 8 Schnittstellen HINWEIS Eine Fehlerbehandlung wie die obige haben wir bei allen MCI Aufrufen implemen tiert im Folgenden aber aus Platz und bersichtlichkeitsgr nden darauf verzichtet siehe Buch Beispieldaten Das Zeitformat f r Positionsangaben auf Millisekunden festlegen mciStr set amp Me _alias amp time format ms res mciSendString mciStr Nothing 0 IntPtr Zero Unsere Multimedia Datei ist nun ge ffnet _isOpen True End Sub Was nun ist die Kapselung anderer wichtiger MCI Kommandos als Eigenschaften oder Metho den Die folgende Eigenschaft liefert die Abspiell nge der Multimedia Datei in Millisekunden Public ReadOnly Property Length As Integer Get Dim buffer As New StringBuilder 255 Dim res As Integer mciSend tring status amp _alias amp length buffer buffer Capacity IntPtr Zero Return Convert ToInt32 buffer ToString End Get End Property Die Multimedia Datei zwischen zwei Positionen abspielen Public Sub Play von As Integer bis As Integer Dim res As Integer mciSendString Play amp _alias amp From amp von amp To amp bis Nothing 0 IntPtr Zero End Sub Die Multimedia Datei in voller L nge
77. nster des Quellcode Editors in welchem bereits ein Codeger st vorgefertigt ist Ihren eigenen Code f gen Sie innerhalb der Main Methode hinzu gt ConsoleApplication1 Microsoft Visual Studio Schnellstart Strg Q f 0 x DATEI BEARBEITEN ANSICHT PROJEKT ERSTELLEN DEBUGGEN TEAM SQL TOOLS TEST ARCHITEKTUR ANALYSIEREN FENSTER HILFE B gue 9 P Starten Debug AL hE yo MU P Werkzeugkasten ax Projektmappen Explorer ax Suche in Werkzeugkasten Pr 5 Module1 Main A o a Q0 os i Module Module1 4 Allgemein O SEa Projektmappen Explorer Strg durchsuch P In dieser Gruppe sind keine Sub Main i R Projektmappe ConsoleApplicationi 1 Pr verwendbaren Steuerelemente en ae 4 E ConsoleApplication vorhanden Ziehen Sie ein My Project Element auf diesen Text um es A App config v dem Werkzeugkasten End Sub 4 gt hinzuzuf gen End Module i Projektmappen Team Explorer Klassenansicht Eigenschaften ax FE SQL Serv Server E Werkzeu 100 4 gt Fehlerliste Ausgabe Bereit Z6 s9 Zeig EINFG Erg nzen Sie ohne l nger dar ber nachzudenken den Code entsprechend folgendem VB Listing Dabei k nnen Sie die mit Apostroph eingeleiteten Kommentare bedenkenlos weglassen da sie eh vom Compiler berlesen werden Module Modulel Sub Main Console WriteLine Maximum von drei Zahlen berschrift Console WriteLine Leerzeile Dim a b
78. o In dm Devicelnfos 606 8 Schnittstellen dev di Connect Konnte eine Instanz gebildet werden wird der Name des Ger ts in die Liste eingetragen If dev IsNot Nothing Then ListBox2 Items Add di Properties Name Value Next di Die Schaltfl chen unserer Anwendung werden nur freigegeben wenn mindestens ein Ger t installiert ist Buttonl Enabled ListBox2 Items Count gt 0 Button2 Enabled ListBox2 Items Count gt 0 Button4 Enabled ListBox2 Items Count gt 0 Button5 Enabled ListBox2 Items Count gt 0 If ListBox2 Items Count gt Then ListBox2 SelectedIndex 0 End Sub Anzeige der Ger teeigenschaften Erfreulicherweise stellt die WIA Library bereits einen gro en Fundus an Dialogen bereit Unter anderem befindet sich darunter auch ein Dialog zur Anzeige der Ger teeigenschaften den Sie mit einem CommonDialog Objekt nicht mit den entsprechenden Dateidialogen verwechseln und der Methode ShowDeviceProperties anzeigen k nnen Allgemein Farbverwaltung Nexus 7 Hersteller Kamerastatus Bilder 0 Anschluss AUTO Blitz nicht verf gbar Akkustand nicht verf gbar Uhrzeit nicht verf gbar Bildgr e Die Bildgr e ist nicht vorhanden R192 Die WIA Library kennenlernen 607 Private Sub Buttoni_Click sender As Object e As EventArgs Handles Button1 Click Dim dev As WIA Device Dim dlg As New WIA CommonDialog Zun chst wird eine Device Instanz erzeugt ist dem
79. oll das Zusammenspiel demonstrieren Dazu werden wir per Add In zwei Methoden bereitstellen eine Access Schaltfl che konfigurieren und ein NET Formular zur Konfiguration eines Access Kombinationsfeldes anzeigen Doch der Reihe nach R198 Ein Managed Add In programmieren und einbinden 637 Entwurf des Add Ins Starten Sie Visual Studio und w hlen Sie DateilNeu Projekt Andere Projekttypen Erweiterungen Gemeinsames Add In NET Framework 4 x installed Templates I Be Visual Studio Add in Extensibility Visual Basic Visual C Visual C er Shared Add in Visual F ar 4 Other Project Types Setup and Deployment Bixtensibility q Visual Studio Solutions Database Test Projects Type Extensibility Create an Add in loadable in many hosts Extensibility Nachfolgend erscheint ein Assistent w hlen Sie hier als Programmiersprache Visual Basic Als Anwendungshost Schritt 2 gen gt uns Microsoft Access Assistent f r gemeinsames Add In Seite 2 von 5 W hlen Sie einen Anwendungshost aus IJ Ein Add In kann zum Laden in mehreren Anwendungen oder Hosts erstellt werden gt no Welche Anwendung soll unterst tzt werden GI Microsoft Word Microsoft Visio Microsoft Publisher Microsoft Project Microsoft PowerPoint Microsoft Outlook Microsoft FrontPage Microsoft Excel Microsoft Access SIoaaaaaa 638 8 Schnittstellen Dritter Schritt ist das Fest
80. ormat ms bitspersample amp 8 channels 1 samplespersec 8000 bytespersec 8000 res mciSendString mciString Nothing 0 IntPtr Zero If res lt gt 0 Then MessageBox Show getMciError res MCI Fehler beim Zuweisen der Parameter Set Befehl MessageBoxButtons OK MessageBoxIcon Error End If End Sub Und schlie lich der START STOPP Button Private Sub Buttonl_Click sender As Object e As EventArgs Handles Buttonl Click If Buttonl Text START Then auf START geklickt Die Aufnahme beginnt Dim mciString As String record myAlias Dim res As Integer mciSendString mciString Nothing 0 IntPtr Zero If res lt gt Then MessageBox Show getMciError res MCI Fehler beim Starten der Aufnahme Record Befehl MessageBoxButtons OK MessageBoxIcon Error End If Button1 Text STOPP Else auf STOPP geklickt Die Sound Datei wird im aktuellen Verzeichnis abgespeichert Dim mciStr As String save myAlias amp shortPathName amp Test wav Dim res As Integer mciSendString mciStr Nothing 0 IntPtr Zero If res lt gt Then MessageBox Show getMciError res MCI Fehler beim Speichern der Datei Save Befehl MessageBoxButtons OK MessageBoxIcon Error Buttonl Text START End If End If End Sub End Class Test Vergewissern Sie sich dass an Ihren PC ein Mikrofon angeschlossen ist und dass es korrekt funk tioniert siehe Bemerkungen R199 Sound per MCI aufnehmen 647 Nach Klick auf die
81. othing End Sub End Class Test Die Datenbank Test mdb siehe Buchbeispiel bietet keine Besonderheiten sie besteht lediglich aus der Tabelle BGA und einem Formular von welchem aus ber eine Schaltfl che der Bericht Report aufgerufen wird Nach dem Kompilieren des VB Projekts und Bet tigen der Schaltfl che Access aufrufen wird wie von Geisterhand Microsoft Access gestartet und es erscheint das gew nschte Formular von welchem aus Sie dann die in Access implementierten Druck und Vorschaufunktionen aufrufen R197 Mit OLE Automation auf MS Access zugreifen 635 E H S5 e s Access E a E START ERSTELLEN EXTERNE DATEN DATENBANKTOOLS Acrobat Thomas Gewinnus YA 2 A 2 H aic go A Dr A Ea aj T B KA z _ Ansicht Einf gen y Filtern Alle Suchen An Fenster Fenster Textformatierung X na aktualisieren X E k anpassen wechseln ad Ansichten Zwischenabla Sortieren und Filtern Datens tze Suchen Fenster A hd i Ok r Alle Access Obj tt Access Automation mit NET O0 X Tabellen x jaj iz A Datum von Eeo Report aufrufen Abfragen A Personalplan Datum bis n 2012 Telefonverzeichnis Formulare A prenit Bericht aufrufen Beenden Berichte amp S Report Module A Formularansicht NUM a A amp amp Auch an den ge nderten Beschriftungen von Formular und Schaltfl che sehen Sie dass die Auto mation funktioniert hat Nach Bet tig
82. r in Aktion erleben AUSGABE ax Ausgabe anzeigen von Erstellen z x za 1 gt Erstellen gestartet Projekt Sortier Konfiguration Debug Win32 1 gt Quelle cpp 1 gt Creating library C Users Doberenz B U E C H E R HANSER VISUAL STUDIO 11 CS KB Neue Rezepte F E R T I G DLL Sortier Debug Sortier lib _ 1 gt LINK padding exhausted performing full link F 1 gt Creating library C Users Doberenz B U E C H E R HANSER VISUAL STUDIO 11 CS KB Neue Rezepte F E R T I G DLL Sortier Debug Sortier lib 1 gt Sortier vcxproj gt C Users Doberenz B U E C H E R HANSER VISUAL STUDIO 11 CS KB Neue Rezepte F E R T I G DLL Sortier Debug Sortier d1ll Erstellen 1 erfolgreich Fehler bei aktuell bersprungen q m FEHLERLISTE AUSGABE SUCHERGEBNISSE 1 Bereit z8 s Zeil EINFG Die eben erzeugte Dynamic Link Library Sortier dl belassen wir vorl ufig im Debug bzw Release Unterverzeichnis des Projektordners Sp ter k nnen wir sie in das Windows System32 Verzeichnis oder wie in unserem Fall in dasselbe Verzeichnis wie die noch zu erstellende VB Anwendung kopieren Einbinden der DLL in VB Schlie en Sie Visual Studio und ffnen Sie es erneut Erstellen Sie eine neue Windows Forms Anwendung mit dem Namen Test_DLL und platzieren Sie auf dem Startformular Form je zwei ListBoxen und zwei Buttons siehe sp tere Laufzeitansicht Unbedingt erforderlich ist das Einbinden des folgenden Namespace Impor
83. rbehandlung mittels Try Catch Block st rzt das Programm aber bei falschen Eingaben nicht ab sondern liefert eine h f liche Meldung 44 1 Kleiner VB Anf ngerkurs Fehler Die Eingabezeichenfolge hat das falsche Format Bemerkungen Wenn Sie die Programmbedienung mit der bei einer Konsolenanwendung vergleichen so sto Ben Sie auf ein Hauptmerkmal der Windows Programmierung Eine fest vorgeschriebene Rei henfolge f r die Benutzereingaben gibt es nicht mehr Genauso wie im Konsolen Beispiel haben wir es auch auch hier mit VB Anweisungen zu tun die sich jetzt allerdings innerhalb einer Ereignisbehandlungsmethode Event Handler befin den Im Unterschied zur Konsolenanwendung ReadLine WriteLine ist die Programmierung der Ein Ausgabe der Zahlen etwas umst ndlicher Deren Werte sind zun chst in der Text Eigen schaft der drei Textboxen enthalten und m ssen mit Hilfe der Convert Klasse vom Datentyp String in den Integer Datentyp umgewandelt werden Die Ergebnisausgabe erfolgt umgekehrt mittels der bereits bekannten ToString Methode deren Ergebnis der Text Eigenschaft von Labell zugewiesen wird R6 Werte in einer ListBox anzeigen Mittlerweile sind Sie auf den Geschmack gekommen und wollen sich an eine etwas anspruchs vollere Windows Anwendung heranwagen Schlie lich verf gt Visual Studio nicht nur ber solch einfache Steuerelemente wie Label TextBox und Button sondern ber ein ganzes Arsenal attrakti ver und le
84. rr i gt max Then max arr i Else 46 1 Kleiner VB Anf ngerkurs If arr i lt min Then min arr i End If sum arr i Next i sum sum n 1 Durchschnitt berechnen av sum ToString 0 00 globale Variable zuweisen End Sub Der folgende Event Handler f r das KeyUp Ereignis von TextBox bertr gt dann den Eintrag nach ListBox wenn die Enter Taste gedr ckt wird Anschlie end wird der Eintrag in der Textbox gel scht um f r neue Zahleneingaben bereit zu sein HINWEIS Tippen Sie den Rahmencode dieser Event Handler nicht per Hand ein sondern erzeugen Sie ihn ber die Ereignisse Seite des Eigenschaftenfensters F4 Eigenschaften amp TextBox1 System Windows Forms TextBox ImeModeChanged KeyDown KeyPress T Texo Keyp z Layout Leave KeyUp Tritt ein wenn eine Taste losgelassen wird Private Sub TextBoxi_KeyUp sender As Object e As KeyEventArgs Handles TextBox1 KeyUp If e KeyCode Keys Enter And TextBox1 Text lt gt String Empty Then Enter Taste ListBox1 Items Add TextBox1 Text TextBox gt ListBox TextBox1 Text String Empty TextBox Inhalt l schen End If End Sub Ein weiterer Event Handler wertet das Click Ereignis von Button aus Der Inhalt der ListBox wird ausgelesen und in das Array kopiert Da der erste Eintrag einer ListBox genauso wie das erste Feld des Arrays immer den Index null hat kann man das Kopieren elegant in einer For N
85. s DVM In Abh ngigkeit von der Wandlungsrate des DVM die des DT9602R ist hier mit ca 1 sek nicht sonderlich berauschend sollte das Programm nun kontinuierlich die aktuellen Messwerte anzeigen 1 Mehr zur asynchronen Programmierung und zur SerialPort Komponente erfahren Sie in unserem Buch Visual Basic 2012 Grundlagen und Profiwissen 624 8 Schnittstellen Digitalvoltmeter an RS232 Schnittstelle Digitalvoltmeter an RS232 Schnittstelle Bemerkungen Gefahren f r Mensch und Computer beim Experimentieren sind so gut wie ausgeschlossen da die RS232 Schnittstelle bei Messger ten meist ber Optokoppler herausgef hrt wird Falls keine Unterlagen zum DVM verf gbar sind Um die Codierung der Messwerte und Mess bereiche experimentell herauszufinden kann das in unserem Buch Visual Basic 2012 Grund lagen und Profiwissen beschriebene Terminalprogramm benutzt werden nicht vergessen H kchen bei DTR setzen Durch einige Versuche mit unterschiedlichen Spannungen l sst sich meist leicht feststellen wie die einzelnen ASCIH Zeichen zu interpretieren sind F r eine komplette Steuerung Modelleisenbahn eignet sich z B das preisg nstige PC Mess modul M 232 es verf gt ber 6 Analogeing nge 10 Bit Aufl sung sowie 8 digitale Ein Aus g nge Davon kann ein Eingang als Z hlereingang f r ein 16 Bit Register benutzt werden Neuere PCs verf gen zugunsten zahlreicher USB Ports meist nur noch ber einen einzigen seriellen CO
86. ssen eine der beiden o g Methoden ausf hren bevor Sie das Dokument bear beiten k nnen Ausgabe von Text Public Sub InsertString str As String oDoc Text InsertString oVC str False End Sub Ein Zeilenumbruch Public Sub NewLine oDoc Text InsertControlCharacter oVC 0 False End Sub Ein neuer Absatz Public Sub NewParagraph oDoc Text InsertControlCharacter oVC 5 False End Sub Ein Seitenumbruch Public Sub PageBreak oDoc Text InsertControlCharacter oVC 0 False oVC BreakType 4 End Sub Eine Dokumentvorlage nutzen Public Sub SetStyle StyleName As String oVC ParaStylename StyleName End Sub 1 Writer kennt auch noch Textcursor die unabh ngig vom sichtbaren Cursor agieren k nnen R196 OpenOffice org Writer per OLE steuern 627 Fettschrift Public Property Bold As Boolean Get Return oVC Charkeight 150 End Get Set value As Boolean If value Then oVC CharWeight 150 Else oVC CharWeight 100 End If End Set End Property Eine Schriftart ausw hlen Public Sub SetFont Fontname As String Optional Size As Long 12 oVC CharFontname Fontname If Size gt Then oVC CharHeight Size End Sub An den Anfang des Dokuments springen Public Sub GotoStart oVC JumpToFirstPage End Sub An das Ende des Dokuments springen Public Sub GotoEnd oVC JumpTolastPage oVC jumpToEndOfPage End Sub Datei als PDF sichern Public Sub SaveAsPDF filename As String
87. t werden von dem sie erzeugt wurden Der Empfang der seriellen Daten l uft aber in einem anderen Thread ab Als L sung des Problems bietet sich ein R195 Auf die serielle Schnittstelle zugreifen 623 Methodenzeiger Delegate an der ber die Invoke Methode der entsprechenden Komponente hier Labell aufgerufen wird Private Delegate Sub displayDataDlg datl As String dat2 As String Private displayDataPtr As displayDataDlg Address0f displayData Die Anzeigeroutine auf welche das Delegate Objekt displayDataPtr verweist Private Sub displayData dl As String d2 As String Messwert in Gleitkommazahl parsen Dim f As Single Single Parse dl Messbereichsabh ngige Umrechnung und Anzeige Select Case d2 Case 11 Labell Text f 1000 amp V Case 21 Labell Text f 100 amp V Case 41 Labell Text f 10 amp mV Case Else Labell Text String Empty End Select End Sub Beim Beenden des Programms sollte auch der Port wieder geschlossen werden Private Sub Buttoni_Click sender As Object e As EventArgs Handles Buttonl Click SerialPortl Close Me Close End Sub End Class Test Verbinden Sie Ihr DVM ber das im Zubeh r enthaltene Kabel mit der seriellen COMI Schnitt stelle des PC andernfalls PortName Eigenschaft im Quellcode anpassen Stellen Sie den Messbe reichsschalter des DVM auf Gleichspannung VOLT DC ein und aktivieren Sie die bertragung per RS232 siehe Bedienungsanleitung de
88. taktaufnahme zwischen Add In und Access Public Sub OnConnection application As Object connectMode As Extensibility ext_ConnectMode addInInst As Object ByRef custom As System Array _ Implements Extensibility IDTExtensibility2 OnConnection 640 8 Schnittstellen Wir speichern die Verweise ab Typisierung n tig da nur Object bergeben wird AccessApp CType application Access Application addInInstance CType addInInst Microsoft Office Core COMAddIn Der Add In Instanz wird das aktuelle Objekt Me bergeben addInInstance Object Me End Sub ber obiges addInInstance Object greifen wir auch in Access auf die Member des Add Ins zu Eine erste Methode f r unser Add In Public Sub Info MessageBox Show Hallo VB User End Sub Mit der folgenden Methode verbinden wir die Access Objekte mit unserem Add In Dazu berge ben wir in Access die Referenzen auf die gew nschten Objekte Public Sub ControlsAnbinden btn As Access CommandButton cb As Access ComboBox frm As Access Form Abspeichern der Referenzen _buttoni btn form frm _combol cb Ab hier d rfte sich das Programm kaum von einem VBA Programm unterscheiden wir arbeiten mit den Access Objekten mit dem kleinen Unterschied dass es sich um VB handelt _buttonl Caption Hier geht die Post ab Die folgende Deklaration ist zwar nicht f r VB n tig Access feuert aber nicht das Ereignis wenn die folgende Zuweisung fehlt _buttonl OnClick
89. te Const wiaCommandTakePicture As String AF933CAC ACAD 11D2 A093 QOCQAF72DCIC Eine Referenz f r das WIA Ger t in unserem Fall eine Webcam Private Camera As WIA Device Mit dem Laden des Formulars w hlen wir zun chst das gew nschte Ger t aus Sind mehrere Ger te vorhanden wird ein Auswahldialog angezeigt sonst wird automatisch das erste Ger t gew hlt Private Sub Forml_Load sender As Object e As EventArgs _ Handles MyBase Load Try Camera New WIA CommonDialog ShowSelectDevice Testen auf VideoDevice If Camera Type WIA WiaDeviceType VideoDeviceType Then timerl Enabled True Else MessageBox Show Keine Webcam vorhanden Application Exit End If Catch el As Exception MessageBox Show Keine Webcam vorhanden Application Exit End Try End Sub R193 Auf eine Webcam zugreifen 615 Ist die Zeit abgelaufen wird der Schnappschuss ausgel st Private Sub timerl_Tick sender As Object e As EventArgs Handles timer1 Tick timerl Enabled False Me Text ACHTUNG AUFNAHME Ein Kommando an das Ger t senden Dim item As WIA Item Camera ExecuteCommand wiaCommandTakePicture Das erzeugte Bild abrufen und per Speicher an die PictureBox weiterleiten Dim img As WIA ImageFile item Transfer If img IsNot Nothing Then Dim vector As WIA Vector img FileData pictureBox1 Image Image FromStream New MemoryStream CType vector get_BinaryData Byte End If Me Text timerl
90. tionl beispielsweise in Maximum3 und klicken Sie OK Es erscheint die Entwicklungsumgebung von Visual Studio Mit F4 holen Sie sich das Eigenschaftenfenster in den Vordergrund und stellen damit die Text Eigenschaft das ist die Beschriftung der Titelleiste des Startformulars Form1 neu ein Maximum von drei Zahlen 42 1 Kleiner VB Anf ngerkurs Eigenschaften mx Formi System Windows Forms Form X a s Tag Maximum von drei Zahlen TopMost False TransparencyKey E Text Der dem Steuerelement zugeordnete Text Eigenschaften Projektmappen Explorer Vom Werkzeugkasten Strg Alt X ziehen Sie die Steuerelemente 3 mal TextBox 1 mal Button 4 mal Label gem folgender Abbildung auf Form1 und stellen auch hier bestimmte Text Eigen schaften neu ein a9 Maximum von drei Zahlen Programmierung Durch einen Doppelklick auf Button wird automatisch das Codefenster der Klasse Form mit dem bereits vorbereiteten Rahmencode des Click Eventhandlers ge ffnet In diesem Zusammen hang ist ein f r den Einsteiger wichtiger Hinweis zu beachten der auch f r die Zukunft gilt HINWEIS In der Regel sollten Sie den Rahmencode der Eventhandler nicht selbst eintippen sondern immer auf die oben genannte Weise durch Visual Studio automatisch erzeu gen lassen Public Class Forml Private Sub Buttonl_Click sender As Object e As EventArgs Handles Buttonl Click Hier m ssen Ihre VB Anweisungen eingef gt werden End Sub En
91. ts System Runtime InteropServices Public Class Forml Die Einbindung der externen DLL und die Deklaration der Routine Sortiere lt DI1Import Sortier d11 gt Private Shared Sub Sortiere a As Integer n As Integer End Sub F r unsere Testzwecke verwenden wir ein Integer Array mit 100 Feldern Private Const len As Integer 100 Private intArray As Integer ber die Schaltfl che NEU wird das Array mit Zufallszahlen gef llt Private Sub Buttonl_Click sender As Object e As EventArgs Handles Button1 Click ReDim intArray len ListBox1 Items Clear Dim rnd As New Random For i As Integer 0 To len 1 intArray i rnd Next 0 len 1 R203 Eine C DLL in VB einbinden 665 Next i Anzeige des unsortierten Array Inhalts in der ersten ListBox For i As Integer 0 To len 1 ListBox1 Items Add intArray i ToString Next i End Sub Die Schaltfl che SORTIER Private Sub Button2_Click sender As Object e As EventArgs Handles Button2 Click ListBox2 Items Clear Nun der alles entscheidende DLL Aufruf Sortiere intArray intArray Length Anzeige des sortierten Array Inhalts in der zweiten ListBox For i As Integer To len 1 ListBox2 Items Add intArray i ToString Next i End Sub End Class DLL Test Kompilieren Sie das Projekt Test DLL und kopieren Sie die Datei Sortier dl in das Debug Unterverzeichnis des Projektordners Test_DLL bzw in das gleiche Verzeichnis wie auch die Datei Test_DLL exe
92. ts per inch Horizontal Scanner Items 1 Properties Horizontal Resolution Value dpi Dots per inch Vertikal Scanner Items 1 Properties Vertical Resolution Value dpi Linke obere Ecke f r den Scanbereich Scanner Items 1 Properties Horizontal Start Position Value 0 x links oben Scanner Items 1 Properties Vertical Start Position Value y links oben R194 Auf den Scanner zugreifen 619 Gr e des Scanbereichs Inch dpi Scanner Items 1 Properties Horizontal Extent Value 8 5 dpi Scanner Items 1 Properties Vertical Extent Value 11 dpi bertragen des Bildes in ein mageFile Objekt Dim img As WIA ImageFile Scanner Items 1 Transfer War dies erfolgreich m ssen wir das mageFile Objekt nur noch in unserer PictureBox an zeigen If img IsNot Nothing Then Dim vector As WIA Vector img FileData pictureBox1 Image Image FromStream New MemoryStream CType vector BinaryData Byte End If End Sub Ganz nebenbei zeigen wir in der ListBox noch die m glichen Eigenschaften des Scanners an Private Sub Buttond_Click sender As Object e As EventArgs Handles Button4 Click Dim dlg As New WIA CommonDialog Dim Scanner As WIA Device dlg ShowSelectDevice WIA WiaDeviceType ScannerDeviceType False False For Each p As WIA IProperty In Scanner Items 1 Properties ListBoxl Items Add p PropertyID amp amp p Name amp amp p Value Next p End Sub End C
93. tzliche Optionen V Leeres Projekt Anwendungseinstellungen E Seguity Development Lifecyde SDL Pr fungen lt Zur ck Fertig stellen Abbrechen W hlen Sie das Men Ansicht Projektmappen Explorer Dieser pr sentiert Ihnen ein noch leeres Projekt es sind derzeit keine Dateien vorhanden In ein DLL Projekt m ssen Sie aber zumindest zwei Dateien einbinden eine def Datei und eine Datei in der sich Ihr C Quellcode cpp befindet CPP Datei W hlen Sie Projekt Neues Element hinzuf gen und dann C Datei cpp und speichern Sie diese unter ihrem Standardnamen Ouelle cpp im Projektverzeichnis ab Im noch leeren Code fenster wartet jetzt einige Arbeit als C Programmierer auf uns Binden Sie zun chst die Header Datei windows h zwecks Unterst tzung grundlegender Win dows Deklarationen ein include lt windows h gt Bei der folgenden D IMain handelt es sich um die so genannte DLL Eintrittsprozedur dem Pen dant zum Hauptprogramm einer normalen Anwendung Mit dieser Prozedur reagieren wir auf das Laden Entladen unserer DLL durch externe Anwendungen Dazu ist wie in den meisten anderen F llen auch der Parameter dwReason auszuwerten Im Beispiel zeigen wir zwei Meldungsfenster an R203 Eine C DLL in VB einbinden 663 BOOL WINAPI DI1Main HINSTANCE hDLL DWORD dwReason LPVOID IpReserved switch dwReason case DLL_PROCESS_ATTACH essageBoxA GetFocus DLL wurde geladen Info MB_OK
94. wAcquirelmage DeviceType Intent Bias FormatID AlwaysSelectDevice UseCommonUI CancelError Beschreibung Werte der WiaDeviceType Enumeration Default UnspecifiedDevice Type f r Scanner nutzen Sie bitte ScannerDeviceType Werte der Wialmagelntent Enumeration Wert egal Werte der WialmageBias Enumeration Wert egal Das zur ckgegebene Bildformat wiaFormatBMP B96B3CAB 0728 11D3 9D7B 0000F81EF32E wiaFormatPNG B96B3CAF 0728 11D3 9D7B 0000F81EF32E wiaFormatGIF B96B3CB0 0728 11D3 9D7B 0000F81EF32E wiaFormatJPEG B96B3CAE 0728 11D3 9D7B 0000F81EF32E wiaFormatTIFF B96B3CB1 0728 11D3 9D7B 0000F81EF32E Soll das Ger t jedes Mal ausgew hlt werden Soll der Dialog angezeigt werden das ist immer der Fall Soll ein Fehler ausgel st werden wenn der Nutzer Abbruch w hlt R195 Auf die serielle Schnittstelle zugreifen 621 R195 Auf die serielle Schnittstelle zugreifen Zahlreiche Mess und Elektroger te sind auch heute noch mit der klassischen seriellen Schnitt stelle ausgestattet In Verbindung mit dem zu Visual Studio mitgelieferten SerialPort Steuer element k nnen Sie beliebige Programme schreiben mit denen sich diese Ger te steuern lassen Um eine sinnvolle praktische Anwendung des SerialPort Controls mit geringstem Aufwand zu demonstrieren verwenden wir hier als Peripherieger t ein Digitalvoltmeter z B DT9602R mit serieller Schnittstelle Es d rfte aber auch jedes an
Download Pdf Manuals
Related Search
Related Contents
INSTRUCTIONS Operation / Maintenance scorpION3™ Ionizing Bar CL2XY16-DTP1C5V CC-Link/LT Remote I/O Module User`s Manual 520 Hardware User Manual Muvit MUTPG0016 screen protector Method 5 – Isokinetic Metering Console Part # 0028 User Manual Hercules ePlug™ 200 MINI Duo Pack de 2 adaptateurs Extron electronic 225 Network Card User Manual SwirlPool web Manual Philips 20PFL4122 20" LCD Flat TV 20" Silver Copyright © All rights reserved.
Failed to retrieve file