Zur Hauptseite ... Zum Onlinearchiv ... Zum Abonnement ... Zum Newsletter ... Zu den Tools ... Zum Impressum ... Zum Login ...

Gedrucktes Heft

Diesen Beitrag finden Sie in Ausgabe 6/2002.

Unser Angebot für Sie!

Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'!

Diesen Beitrag twittern

Tipps & Tricks

Christoph Spielmann, Düsseldorf

In der vorliegenden Ausgabe von Access im Unternehmen präsentieren wir Ihnen wieder einige Tipps & Tricks, die es in sich haben. Sie erfahren, wie Sie beliebige Dateien von Access aus öffnen, ohne die Anwendung auswählen zu müssen und wie Sie unerwünschte Zeichen aus Dateinamen entfernen können. Außerdem stellen wir Ihnen eine Möglichkeit vor, um ein Laufband in den Formularen Ihrer Access-Anwendung unterzubringen.

Dateien mit der passenden
Anwendung öffnen

Unter Windows ist bekanntlich jede Dateierweiterung mit einer passenden Anwendung verknüpft. Dieser Tipp zeigt Ihnen, wie Sie eine Datei von Access aus direkt zusammen mit der zugeordneten Anwendung öffnen.

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd _
    As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters _
    As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long

Quellcode 1

Public Function OpenDocument(DocumentFile As String) As Long

    Dim ret As Long

        If Len(DocumentFile) > 0 Then

            ret = ShellExecute(Application.hWndAccessApp, "open", DocumentFile, _
                vbNullChar, "", 1)

            If Err Then

                OpenDocument = 0

            ElseIf ret > 32 Then

                OpenDocument = -1

            Else

                OpenDocument = ret

            End If

        Else

        OpenDocument = 0

    End If

End Function

Quellcode 2

Die Information darüber, welche Anwendungen für welche Dateien zuständig sind, ist in der Registry von Windows untergebracht. Nun wäre es sehr mühselig, die Informationen hier auszulesen. Zum Glück kann Windows da mit einer passenden API-Funktion aufwarten, die Ihnen diese Arbeit abnimmt. Diese API-Funktion trägt den Namen ShellExecute und wird wie in Quellcode 1 deklariert:

Da die einzelnen Parameter etwas unübersichtlich sind, kann der Aufruf mit Hilfe der VBA-Prozedur aus Quellcode 2 vereinfacht werden.

Public Function CreateValidFilename(ByVal Filename _
    As String) As String

    Dim i As Long

    Dim Text As String

    Dim Länge As Long

    Dim Zeichen As String

    For i = 1 To Len(Filename)

        Select Case Asc(Mid$(Filename, i, 1))

            Case Is < 32, 92, 47, 58, 42, 63, 34, 60, _
                62, 124

                Mid$(Filename, i, 1) = "_"

        End Select

    Next

    CreateValidFilename = Filename

End Function

Quellcode 3

Diese Funktion erwartet als Parameter lediglich den Dateinamen der zu öffnenden Datei. Als Ergebnis erhalten Sie im Fehlerfall einen Wert kleiner oder gleich 0 zurück. Wenn Sie beispielsweise die Excel-Datei C:\Mappe1.xls in Excel öffnen möchten, dann geben Sie lediglich den folgenden Ausdruck an:

OpenDocument "C:\Mappe1.xls"

Die komplette Funktion finden Sie im Modul modOpenDocument der Beispieldatenbank
TippsTricks0206.mdb.

Unerwünschte Zeichen aus
Dateinamen entfernen

Bei der Eingabe eines Dateinamens sind fast alle Zeichen erlaubt. Eine Ausnahme bilden jedoch die folgenden Zeichen:

\ / : * " < > |

Die Prozedur aus Quellcode 3 prüft einen Dateinamen auf eines dieser Zeichen und ersetzt dieses automatisch durch einen Unterstrich. Wenn Sie dieser Funktion beispielsweise den Text Umsatz 2002/2003.xls übergeben, wird dieser in Umsatz 2002_2003.xls umgewandelt und kann als Dateiname verwendet werden.

Die komplette Funktion finden Sie im Modul modDateiname der Beispieldatenbank Tipps-Tricks0206.mdb.

Laufbandtexte

Effekte mit Texten waren früher bei der Programmierung unter DOS immer sehr beliebt. Schließlich waren es die einzigen Effekte, die sich mit Hilfe des ASCII-Codes realisieren ließen. Dieser Artikel zeigt, wie Sie einen solchen Effekt in Form eines Laufbandes unter Access realisieren.

Die Anforderung

Sie möchten einen langen Text auf dem Bildschirm darstellen, der sofort ins Auge sticht. Sie haben jedoch auf dem Desktop zu wenig Platz.

Also liegt es nahe, den Text von links nach rechts über den Bildschirm laufen zu lassen, wie Sie es beispielsweise von dem n-tv News-Ticker her kennen (s. Abb. 1).

Die Strategie ist einfach: Sie schneiden einen Teil der Zeichenkette aus, den Sie dann auf dem Bildschirm anzeigen. Bei jedem Schritt verschieben Sie den Ausschnitt um ein Zeichen weiter nach hinten. Sobald Sie am Ende angelangt sind, beginnen Sie wieder von vorne.

Darüber hinaus sollte das Tool nicht nur ein einziges Laufband, sondern mehrere Laufbänder gleichzeitig mit unterschiedlichen Texten darstellen können. Dies realisieren Sie am einfachsten mit Hilfe eines Klassenmoduls.

Public Sub Init(Text As String, AnzahlZeichen As String)

    m_AnzahlZeichen = AnzahlZeichen

    m_CurrentPos = 1

    If Len(Text) < AnzahlZeichen Then

        m_Text = Text & String(AnzahlZeichen - _
            Len(Text), " ")

    Else

        m_Text = Text + " "

    End If

End Sub

Quellcode 4

Public Sub RefreshText()

    Dim res As String

    res = Mid(m_Text, m_CurrentPos, m_AnzahlZeichen)

    m_CurrentPos = m_CurrentPos + 1

    If m_CurrentPos + m_AnzahlZeichen > Len(m_Text) Then

        res = Left(res + m_Text, m_AnzahlZeichen)

    End If

    If m_CurrentPos > Len(m_Text) Then

        m_CurrentPos = 1

    End If    

    RaiseEvent RefreshText(res)

End Sub

Quellcode 5

Abb. 1: Eine Laufbandanzeige

Der Aufbau des Klassenmoduls_
clsLaufband

Im Deklarationsbereich des Klassenmoduls clsLaufband werden die folgenden Elemente deklariert:

Private m_Text As String

Private m_AnzahlZeichen As Long

Private m_CurrentPos As Long

Public Event RefreshText(Text As String)

Die Variable m_Text enthält den darzustellenden Text; die Varibale m_AnzahlZeichen die Länge des Textausschnitts, der im Laufband dargestellt werden soll. m_CurrentPos dient dazu, die Zeichenposition des anzuzeigenden Ausschnitts festzuhalten. Das Ereignis RefreshText löst die Klasse immer dann aus, wenn die Anzeige aktualisiert werden soll. Auf diese Weise kann der Nutzer der Klasse selbst entscheiden, wo der Text angezeigt werden soll.

Zum Start des Vorgangs stellt die Klasse eine Init-Prozedur mit dem Aufbau aus Quellcode 4 zur Verfügung.

Als Parameter erwartet die Prozedur den Text sowie die Länge des anzuzeigenden Textausschnitts. Die entsprechenden Werte werden den privaten Variablen der Klasse zugewiesen. Außerdem prüft die Prozedur, ob die Länge des Textes mindestens der Länge des Textausschnitts entspricht. Sollte dies nicht der Fall sein, füllt sie den Text mit der entsprechenden Anzahl Leerzeichen auf.

Sollte der Text dagegen länger sein, fügt sie lediglich ein Leerzeichen an. Dies ist erforderlich, damit der Text beim zweiten Durchlauf nicht direkt an den Text des ersten Durchlaufs grenzt.

Die eigentliche Aktualisierung des Ausschnitts erledigt die Prozedur RefreshText (s. Quellcode 5).

Mit Hilfe der Mid-Funktion schneidet sie den entsprechenden Textausschnitt aus und erhöht die m_CurrentPos-Variable um den Wert 1.

Nun muss noch der Fall abgefangen werden, dass das Ende der Zeichenkette erreicht ist. Sollte dies auftreten, wird der Text zum zweiten Mal an die Zeichenkette gehängt und der entsprechende Ausschnitt angezeigt.

Abb. 2: Die Eigenschaft Zeitgeberintervall bestimmt die Geschwindigkeit des Laufbandes.

Private WithEvents m_Laufband As clsLaufband

Private Sub Form_Load()

    Set m_Laufband = New clsLaufband

    m_Laufband.Init "Dies ist ein langer Text, der als Laufband über den Bildschirm läuft", 40

End Sub

Private Sub Form_Timer()

    m_Laufband.RefreshText

End Sub

Private Sub m_Laufband_RefreshText(Text As String)

    Me.txtText.Caption = Text

    Me.Caption = Text

    DoEvents

End Sub

Quellcode 6

Sollte das Ende der Zeichenkette erreicht sein, setzt die Prozedur die Variable m_CurrentPos wieder auf den Wert 1 zurück.

Abschließend löst die Prozedur das Ereignis RefreshText aus und übergibt hierbei den ermittelten Textausschnitt.

Einsatz des Klassenmoduls

Der Einsatz des Klassenmoduls ist sehr einfach: Zunächst legen Sie ein neues Formular an und platzieren hier ein Bezeichnungsfeld. Weisen Sie diesem einfach einen Punkt (.) als Beschriftung zu, da Access die Anlage von Bezeichnungsfeldern ohne Text nicht erlaubt.

Wechseln Sie in das Formularmodul und geben Sie hier den Programmcode aus Quellcode 6.

In der Load-Ereignisprozedur wird zunächst der auf Klassenebene deklarierten Variablen m_Laufband eine neue Instanz der Klasse clsLaufband zugewiesen. Anschließend erfolgt die Initialisierung mit Hilfe der Init-Prozedur.

Die zweite Ereignisprozedur Form_Timer sorgt für eine regelmäßige Aktualisierung des Laufbandes und damit für den Animationseffekt. Damit dies funktioniert, müssen Sie noch die Eigenschaft Zeitgeberintervall auf einen passenden Wert stellen. Sie finden diese Eigenschaft im Eigenschaftsfenster des Formulars (s. Abb. 2). Die Angabe erfolgt in Millisekunden. Ein Wert von 100 würde also bedeuten, dass die Anzeige alle 0,1 Sekunden aktualisiert wird, was sich in der Praxis als tauglicher Wert herausgestellt hat.

Die letzte Prozedur m_Laufband_RefreshText reagiert auf das vom Klassenmodul ausgelöste Ereignis RefreshText. Die Prozedur weist der Caption-Eigenschaft des Bezeichnungsfeldes den übergebenen Text zu und zu Demonstrationszwecken weist sie den Text außerdem dem Fenstertitel zu. Für die Aktualisierung der Anzeige sorgt anschließend noch die DoEvents-Anweisung.

Wenn Sie nun in die Formularansicht umschalten, sollte das Laufband auf Ihrem Bildschirm erscheinen.

Kompletten Artikel lesen?

Einfach für den Newsletter anmelden, dann lesen Sie schon in einer Minute den kompletten Artikel und erhalten die Beispieldatenbanken.

E-Mail:

Download

Download

Die .zip-Datei enthält folgende Dateien:

TippsTricks0206_97.mdb

TippsTricks0206_00.mdb

Beispieldateien downloaden

© 2003-2015 André Minhorst Alle Rechte vorbehalten.