Übersicht
0001 Drucken im Blocksatz
Ausgeben von längeren Texten auf dem Drucker kann so einfach sein, wenn man die API-Funktion DrawText kennt! Die unten aufgeführte Funktion print_out gibt einen Text mittig zentriert als Blocksatz an der aktuellen Druckposition aus.Private Declare Function DrawText Lib "user32" Alias "DrawTextA" _ (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, _ lpRect As RECT, ByVal wFormat As Long) As Long Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Const DT_LEFT = &H0 Const DT_CENTER = &H1 Const DT_RIGHT = &H2 Const DT_TOP = &H0 Const DT_VCENTER = &H4 Const DT_BOTTOM = &H8 Const DT_WORDBREAK = &H10 Const DT_CALCRECT = &H400 Const DT_EDITCONTROL = &H2000 Const DT_NOCLIP = &H100 ' Funktion: ' Gibt einen längeren Text als Block mit Zeilenumbruch ' auf dem Drucker an der aktuellen Druckposition aus Public Sub print_out(ByVal text As String) Dim Mode As Integer, ret As Integer Dim R As RECT With Printer .FontName = "Arial" .Font.Size = 10 Mode = .ScaleMode .ScaleMode = vbPixels R.Left = .CurrentX R.Top = .CurrentY R.Right = .ScaleWidth - (.CurrentX / 2) R.Bottom = .ScaleHeight ret = DrawText(.hdc, text, Len(text), R, DT_LEFT Or DT_WORDBREAK) .ScaleMode = Mode End With End Sub | |
Autor: ralf schlegel |
0002 Starten von MS-Word
Die folgende Funktion startet eine Instanz von Microsoft Word und lädt die in docFile angegebenen Datei. Je nach Dateiendung wird das Dokument selbst (.doc .rtf .txt) oder eine Instanz der Vorlage (.dot) in die Anwendung geladen. Übergeben Sie keinen Dateinamen, so startet Word mit einem neuen, leeren Dokument. Um die Funktion nutzen zu können, muss auf Ihrem System natürlich MS-Word installiert sein. Ferner müssen Sie in Ihrem Projekt unter Verweise die "Microsoft Word x.x Objekt Context.Scope.Library" einbinden, wobei 'x.x' für die jeweilige Version steht. ' Funktion: Public Function word_open(ByVal docFile As String, ByVal vis As Boolean) As Object Dim typ As String On Local Error GoTo suberror Set word_open = GetObject(, "word.Application") If word_open.Documents.Count = 0 Then word_open.Visible = vis End If typ = LCase(Right(docFile, 3)) Select Case typ Case "dot" ' Vorlage word_open.Documents.Add Template:=docFile Case "doc", "rtf", "txt" ' Text-Dokument word_open.Documents.Open filename:=docFile Case Else ' neues leeres Blatt: word_open.Documents.Add End Select Exit Function suberror: Select Case Err Case 429 ' Word vorhanden, aber nicht offen Set word_open = CreateObject("word.Application") ' dann erstellen Case 5174 MsgBox docFile & " nicht gefunden!" & vbCr & _ "Word wird geschlossen.", vbCritical + vbOKOnly word_open.Application.Quit Case Else MsgBox Err.Description, vbCritical + vbOKOnly, "Fehler: " & Err End Select Resume Next ' weiter geht´s End Function Die folgende Funktion beendet MS-Word, wenn das letzte Dokument geschlossen wurde (Word.Documents.Close). ' Funktion: Public Sub word_close(ByVal Word As Object, ByVal docFile As String) If Word.Documents.Count = 0 Then Word.Application.Quit End Sub | |
Autor: ralf schlegel |
0003 Printer.Objekt vs Systemdrucker - Drucken für Fortgeschrittene
Um in VB-Anwendungen zu drucken benutzen wird standardmäßig das Printer-Objekt. Die Auswahl und Einstellung des Drucker erfolgt hierbei wahlweise über das CommonDialog OCX (ComDlg32.ocx) oder - bei fortgeschrittenen Programmierern - über eine entsprechende Klasse, die die Funktionalität des o.g. OCX bereitstellt! Wie auch immer: hierbei wird nur das VB-interne Printer-Objekt eingestellt und/oder manipuliert. Die im OCX bereitgestellt Eigenschaft 'PrinterDefault' ist nicht zu empfehlen, da jede Einstellungsänderung auch am Standard-Drucker des Systems vorgenommen wird und somit das Druckverhalten anderer Anwendungen beeinflußt. Was aber, wenn wir über eine API-Funktion einen Druck anstoßen? Dann nützt uns die Einstellung des Printer-Objekts überhaupt nichts, da diese ja nicht auf unser Printer-Objekt schaut! In diesem Fall müssen die aktuelle Einstellungen temporär auf den Standarddrucker gesetzt werden. Dies erreichen wir durch zwei relativ unbekannte API-Funktionen 'GetDefaultPrinter' und 'SetDefaultPrinter' Im hier bereitgestellten Beispiel sehen Sie wie das Ganze funktioniert. Es ist nur eine Demo zur Anregung, aber - programmieren wollen Sie ja sicher selber, oder? ... | |
Autor: ralf schlegel |
0004 Collection-Objekt komfortabel löschen
Das Collection-Objekt kann sehr nützlich sein, um Listen zur Laufzeit im Speicher zu verwalten. For i = 1 To myCollection.Count ' Da Auflistungen automatisch neu MyCollection.Remove 1 ' indiziert werden, jeweils das erste ' Element bei jeder Iteration entfernen Next Gut - wenn sie Ihre CPU gerne im Kreis rotieren lassen und Zeit und Leistung für Sie keine Rolle spielen! Set myCollection = New Collection ' alte Collection löschen | |
Autor: ralf schlegel |