Das Schöne an Access ist, dass man in ihm eine extrem flexible Entwicklungsumgebung hat, mit der man auch mal Aufgaben erledigen kann, die gar nichts mit Datenbanken zu tun haben. Wer beispielsweise Bilder auf eine bestimmte Größe bringen möchte, um diese per E-Mail an Freunde zu versenden und dabei keine übergroßen Anhänge produzieren möchte, ist mit der kleinen Anwendung in diesem Beitrag gut bedient: Diese erwartet lediglich die Angabe des Quell- und Zielpfads sowie der gewünschten Kantenlänge und skaliert die im Verzeichnis enthaltenen Bilder dann per Knopfdruck.
Wer gern mal Schnappschüsse mit der Digitalkamera macht und diese an Freunde verteilen oder auch auf seiner Webseite platzieren möchte, kann sicher auf andere Tools als Access zugreifen, um die Größe der betreffenden Bilder anzupassen. Aber ob das damit so einfach geht wie mit Access Wir bauen in diesem Beitrag eine kleine Lösung, die lediglich aus einem Formular sowie dem Modul mdlGDIPlus von Sascha Trowitzsch besteht und das Anpassen der Bildgröße auf einfachste Weise erlaubt. Diese soll zwei Textfelder zur Eingabe der Verzeichnisse für die Originalbilder und die skalierten Exemplare, ein Textfeld für die Länge der längsten Kante sowie eine Schaltfläche zum Start des Skaliervorgangs bieten (siehe Bild 1).
Bild 1: Mit dieser Access-Anwendung skalieren Sie Bilder.
Formularbau
Das Formular erfordert auch ohne die GDI-Funktionen schon ein wenig Arbeit: Sie benötigen zwei Textfelder zur Eingabe der beiden Verzeichnisse sowie zwei Schaltflächen, die jeweils den Verzeichnisauswahl-Dialog öffnen. Ein weiteres Textfeld nimmt die Länge der längsten Kante der Bilder auf und die Schaltfläche cmdSkalieren sorgt schließlich für das Skalieren der Bilder. Damit die Routine keinen Fehler auslöst, der auf fehlenden Informationen beruht, haben wir eine Validierung der drei Felder eingebaut.
Für weiteren Komfort speichert die Anwendung die Einstellungen der drei Textfelder in einer Tabelle – somit gibt es zumindest einen kleinen datenbanktechnischen Aspekt in dieser Anwendung. Die Beschreibung dieser Funktionen finden Sie übrigens im Beitrag Anwendungoptionen in Tabellen speichern (Shortlink 617). Diese Parameter liest das Formular direkt beim Start ein, und zwar mit der folgenden Routine, die Access beim Öffnen des Formulars auslöst. Gleichzeitig maximiert die Routine das Formular:
Private Sub Form_Open(Cancel As Integer) DoCmd.Maximize Me!txtVerzeichnis = _ GetDBOption("Quellverzeichnis") Me!txtZielverzeichnis = _ GetDBOption("Zielverzeichnis") Me!txtNeueLaenge = GetDBOption("NeueLaenge") End Sub
Das Auswählen der Verzeichnisse erfolgt mithilfe der Routine OpenPathName, die eine nicht dokumentierte Funktion der WizHook-Klasse verwendet und die ein Klick auf die beiden Schaltflächen wie folgt aufruft:
Private Sub cmdVerzeichnisNeu_Click() Me.txtZielverzeichnis = _ OpenPathName(CurrentProject.Path) End Sub
Die Funktion OpenPathName selbst finden Sie im Modul mdlTools der Beispieldatenbank. Beim Schließen des Formulars soll dieses die in den Textfeldern angegebenen Einstellungen in einer Tabelle namens tblOptionen speichern. Dafür sorgen einige Aufrufe der Funktion SetDBOption in der Prozedur, die durch das Ereignis Beim Schließen des Formulars ausgelöst wird:
Private Sub Form_Close() SetDBOption "Quellverzeichnis", _ Me!txtVerzeichnis SetDBOption "Zielverzeichnis", _ Me!txtZielverzeichnis SetDBOption "NeueLaenge", _ Me!txtNeueLaenge End Sub
Vor dem Skalieren …
Da fehlt doch noch was – richtig: das eigentliche Skalieren der Bilder.
Dies erledigt die Ereignisprozedur cmdSkalieren_Click. Sie deklariert zunächst die benötigten Elemente und wandelt den Mauszeiger in die Sanduhr um, damit der Benutzer weiß, dass die Anwendung arbeitet:
Private Sub cmdSkalieren_Click() Dim strFilename As String Dim objPicture As stdole.StdPicture Dim objSize As TSize Dim intX As Integer Dim intY As Integer Dim intAnzahl As Integer Dim i As Integer DoCmd.Hourglass True
Im zweiten Schritt folgt die Validierung der Textfelder. Die folgenden Anweisungen prüfen dabei, ob die angegebenen Verzeichnisse überhaupt vorhanden sind. Dabei kommt die Dir-Anweisung mit dem Parameter vbDirectory zum Zuge:
If (Len(Dir(Nz(Me!txtVerzeichnis, ""), _ vbDirectory)) = 0) _ Or (Dir(Nz(Me!txtVerzeichnis, ""), _ vbDirectory) = ".") Then MsgBox "Bitte geben Sie ein gültiges " _ & "Quellverzeichnisse an." Me!txtVerzeichnis.SetFocus Exit Sub End If
Das Gleiche geschieht im Anschluss mit dem Textfeld für das Zielverzeichnis (siehe Modul zum Formular frmBilderSkalieren). Auch den Inhalt des Felds zur Angabe der maximalen Länge prüft die Routine:
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo