Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Tab-Taste in Memo-Feld





Frage

Und hier ist schon das nächste Rätsel: Was muss ich tun, damit die Tab-Taste mir in einem Memo-Feld auch ein tatsächliches Tab macht?

Antwort 1 von Marie

Hm, also ich kann mir nicht vorstellen, dass das geht, lass mich aber gerne belehren. Aber wozu brauchst Du ein Tab im Memofeld? Hast Du da nicht etwa die Datenbank falsch aufgeteilt???? Warum machst Du nicht stattdessen ein weiteres oder mehrere Memofelder dazu?

Gruß Marie

Antwort 2 von PotzBlitz

Hallo Reinicke,

geht es dir darum, den Tabulator (ASCII-Wert = 9) selbst im Memo-Feld unterzubringen? Das kriegst du nicht hin, denn Tabulatoren sind im Textfeld nicht darstellbar, es würden stattdessen nur Quadrate erscheinen.

Falls es dir dagegen um einen Tabulator-ähnlichen Abstand zwischen zwei Zeichen geht, der auch durch eine vordefinierte Anzahl von Leerzeichen dargestellt werden kann, dann könnte man das mit etwas VB-Programmierung problemlos imitieren. Wenn du an einer solchen Lösung interessiert bist, dann sag Bescheid. Ich stricke dir dann die Zeilen.

Gruss
PotzBlitz

Antwort 3 von Reinicke

Hallo Potzblitz,

der zweite Ansatz ist der richtige. Ich suche eine Möglichkeit um einen Tabulatorabstand zu erzeugen. Im Moment verwende ich dazu Leerzeichen. Aber die gleiche Anzahl Leerzeichen erzeugen in einem Report leider nicht den gleichen Abstand.

Wenn Du da was hättest, fände ich das richtig gut!!

Antwort 4 von PotzBlitz

Hallo Reinicke,

in mir entsteht der dumpfe Verdacht, dass wir beide eine unterschiedliche Auffassung vom Tabulator haben. Ich für meinen Teil stelle mir z.B. eine feste Anzahl von Leerzeichen pro Tab vor, die sich auch nicht ändert. Könnte es sein, dass du mit deinem Tabulator stattdessen eine bündige Ausrichtung von Spalten erreichen willst? Ich denke da z.B. an Word, dort kann Text an fest definierten Tabulatorpositionen ausgerichtet werden.

Beispiele:

Meine   Variante benutzt
pauschal   3 Leerzeichen
zwischen den   Wörtern.

Deine Variante         soll vermutlich
an einer festen        Position bündig
ausgerichtet werden.   Kann das sein?


Ich habe zwischenzeitlich schon was gebastelt. Mit den folgenden Zeilen werden aber während der Eingabe in ein Memo-Feld Tabulatoren pauschal durch drei bzw. vier Leerzeichen ersetzt. Von Berichten war bisher schliesslich keine Rede. Falls du damit etwas anfangen kannst, dann will ich zufrieden sein. Falls du aber doch genau das willst, was ich vermute... Keine Chance. Du müsstest deine Daten auf mehrere Felder verteilen. Die natürlichen Begrenzungen der Textfelder selbst würden dann für die Bündigkeit sorgen.

′-------------------------------
′Die folgenden vier Zeilen in das KeyDown-Ereignis des betroffenen Textfeldes einfügen.
Private Sub Text0_KeyDown(KeyCode As Integer, Shift As Integer)
   If KeyCode = Asc(vbTab) Then
      KeyCode = 0
      ReplaceTab
   End If
End Sub

Private Sub ReplaceTab()
   Dim lngOldSelStart As Long
   Dim strTab As String
  
   ′Den simulierten Tabulator auf drei Leerzeichen festlegen.
   strTab = Space(3)
  
   With Me.ActiveControl
      lngOldSelStart = .SelStart
      If .SelStart = 0 Then
         .Value = strTab & .Text
      ElseIf .SelStart = Len(.Text) Then
         .Value = .Text & strTab
      Else
         .Value = Left(.Text, .SelStart) & strTab & Mid(.Text, .SelStart + 1)
      End If
      .SelStart = lngOldSelStart + Len(strTab)
   End With
End Sub
′-------------------------------

Gruss
PotzBlitz

Antwort 5 von Reinicke

Hallo Potzblitz,

Du hast Recht gehabt! Ich suche in der Tat eine Möglichkeit, einen Text an einer festen Position auszurichten. Vielleicht sollte ich Dir mal die Anwendung schildern, damit die Sache verständlicher wird.

Ich habe einen Bericht, der einen Briefbogen erstellt. Dieser Briefbogen soll mehrere Firmen abbilden. Da die Firmen alle verschiedene Fusszeilen haben, habe ich anstatt mehrerer Fusszeilen ein großes Feld genommen.
So kann jede Firma abgebildet werden. Das Problem ist aber die Schrift im Ausdruck.
Wenn ich alle Abstände mit der gleichen Anzahl von Leerzeichen formatiere, dann habe ich trotzdem verschiedene Abstände.

Gibt es vielleicht eine Alternative?

Gruß Kai



Antwort 6 von PotzBlitz

Hallo Kai,

damit ist die Tabulatorlösung gestorben. :-(

Aber jetzt nochmal ganz langsam. Es klingt so, als ob du einen Geschäftsbrief für mehrere Niederlassungen einer Firma entwerfen willst. Je nach Firma stehen in der Fusszeile nur die Daten einer einzelnen Firma drin. Soweit richtig? Dann erstelle eine Tabelle mit den Daten der jeweiligen Firmen. Jede Information, die bündig ausgerichtet werden soll, bekommt in der Tabelle ein Feld spendiert. Diese Tabelle bindest du dann als Datenherkunft an den Bericht. Dort fügst du Textfelder ein, die wiederum an die Felder aus der Datenherkunft gebunden werden. Anschliessend brauchst du die Textfelder nur noch zu positionieren, wie du es willst. Die Textfelder sind dann standardmäßig linksbündig formatiert. Für jede einzelne Firma gibt es einen Datensatz. Dem Bericht muss dann nur noch beigebracht werden, welcher der Datensätze angezeigt werden soll. Wenn du in einem Textfeld Daten mehrzeilig darstellen willst, dann drücke während der Erfassung Strg+Eingabe, um einen Zeilenumbruch innerhalb des Textfeldes zu erzeugen.

Wenn ich mit meiner Vorstellung deines Problems schon wieder falsch liegen sollte, dann bitte ich um die Zusendung der Datenbank, damit ich mir mal ein Bild davon machen kann. Mir mangelt es in diesen Tagen stressbedingt an der nötigen Vorstellungskraft, um mich in andere Dinge hineinversetzen zu können. ;-)

Noch eine kleine Bemerkung. Ich hätte mir gewünscht, dass du bereits von vornherein mitgeteilt hättest, was du eigentlich vorhast, denn dann hätte ich mir die Mühe mit dem Codebeispiel sparen können. Habt ein Herz für arme Helferleins und seid in der Fragestellung ausführlich und präzise. Bitte, bitte. :-)

Gruss
PotzBlitz

Antwort 7 von Reinicke

Hallo PotzBlitz,

ich entschuldige mich hiermit offiziell für die unsachgemäße Fragestellung!

Nun zum Lösungsansatz:

Dieser ist grundsätzlich richtig, denn das war ungefähr die Variante, die ich bisher verwendet habe. Jedoch habe ich dabei das Problem, daß sich die Textfelder überlagern.
Ich habe einmal einen Firmenfuss der 5 Spalten braucht und einen der nur 3 braucht. Jedoch steht in der zweiten Spalte ein so langer Name, daß er durch die nächste Spalte abgedeckt wird.

War das verständlich?

Gruß Kai


Antwort 8 von PotzBlitz

Hallo Reinicke,

ja, das war mehr als verständlich! Nun kann ich dir endlich eine konkrete Lösung vorschlagen, die für deine Zwecke geeignet ist. :-)

Zur Info: In der nachfolgenden Erklärung gehe ich davon aus, dass die Firmendaten und auch die Daten für die Fusszeilen in derselben Tabelle liegen.
  1. Lege zwei neue Berichte an und lege als Datenherkunft die Tabelle fest, in der auch die Fusszeilen gespeichert sind.
  2. Füge in den einen Bericht im Detailbereich drei Textfelder und in den anderen Bericht fünf Textfelder ein. Alle Textfelder müssen an die Fusszeilen in der Tabelle gebunden sein. Natürlich müssen bei der dreispaltigen Fusszeile die Felder vier und fünf ignoriert werden.
  3. Ordne die Textfelder in Position und Breite so an, wie dir es gefällt (alle gleich breit über die gesamte Breite?)
  4. Speichere beide Berichte ab. Achte darauf, dass in den Namen die Anzahl der Spalten erwähnt werden (z.B. "MeinBericht_Fusszeile3")
  5. Öffne die Tabelle mit den Fusszeilen im Entwurf
  6. Füge ein neues Feld (z.B. FusszeileSpalten) hinzu, welches Auskunft darüber gibt, wieviele Spalten verwendet werden können. Zulässige Eingaben sollen hier 3 und 5 sein.
  7. Öffne deinen ursprünglichen Hauptbericht im Entwurf
  8. Füge im Hauptbericht das neue Feld "FusszeileSpalten" in den Bericht ein und schalte es unsichtbar
  9. Ziehe per Drag&Drop die zwei neuen Berichte in den Detailbereich deines Hauptberichtes. Da alle Berichte die gleiche Tabelle als Grundlage haben, werden sie auch automatisch über den Primärschlüssel verbunden
  10. Stelle die Ränder beider Berichte auf unsichtbar, falls sie stören sollten
  11. Positioniere die Unterberichte ensprechend im Hauptbericht und sorge dafür, dass beide Berichte exakt übereinander liegen. Idealerweise haben beide auch die gleiche Grösse.


So, jetzt kommt der VBA-Teil, um den kommen wir nicht drum herum.
  1. Klicke im Menü "Ansicht" auf "Code", um den VBA-Editor aufzurufen.
  2. Füge die folgenden Zeilen ein und ersetze "NameDesBerichtesMitXSpalten" durch die Namen deiner Berichte. Wenn dein FusszeileSpalten-Feld anders heisst, dann muss auch dieser Name angepasst werden


Private Sub Detailbereich_Format(Cancel As Integer, FormatCount As Integer)
    Me.NameDesBerichtesMit3Spalten.Visible = False
    Me.NameDesBerichtesMit5Spalten.Visible = False
    
    If Me.FusszeileSpalten = 3 Then
        Me.NameDesBerichtesMit3Spalten.Visible = True
    ElseIf Me.FusszeileSpalten = 5 Then
        Me.NameDesBerichtesMit5Spalten.Visible = True
    End If
End Sub

Probiere es aus! Jetzt wird bei jedem Datensatz anhand des Wertes "FusszeileSpalten" die Entscheidung getroffen, welcher der beiden Berichte angezeigt werden soll und welcher auf unsichtbar gestellt wird. Dadurch wird dann immer der richtige Unterbericht mit der richtigen Anordnung der Felder angezeigt.

Gruss
PotzBlitz


Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: