Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Vertikale Linien an vergrößerbarem Textfeld anpassen

Begonnen von Pergus, April 05, 2011, 22:22:48

⏪ vorheriges - nächstes ⏩

Pergus

Hallo an alle Access-Guru´s!

Habe ein Problem, mit dem ich nicht so recht fertig werde.
In einem Bericht befinden sich 10 Textfelder, wovon beim 5. und das 10. die Einstellung "Vergrößerbar" auf "Ja" gesetzt wurde.
Nun, da die Textfelder von vertikalen (also senkrechten) Linien abgegrenzt werden suche ich eine Lösung,
wie man diese auch "vergrößerbar" machen kann, da dies in den Eigenschaften nicht vorgesehen ist.

Die Positionen der 11 Linien sind:

Linie:                1      2        3       4      5        6          7          8          9         10        11
Position in cm:  0     1,4     3,2     5     6,8     10,2     13,2     14,8     16,4     18,2     27,8

??? 1. Frage: Kann man, um die exakte Position der Linien zu definieren,  den Abstand zur linken Seite ( -->[] ) eines Textfeldes (oder Kombinationsfeld) auslesen?

Die Länge der Linien sollte sich nach der Höhe des Textfeldes "Tätigkeit" (Text, 255 Zeichen ;5. Textfeld) oder,
sollte das Textfeld "Bemerkung" (Memofeld ; 10.Textfeld) höher sein, an diesem ausrichten!


Die waagrechte Linie am Fuße des Detailbereichs, die die jeweiligen Datensätze optisch voneinader trennt, wird korrekt dargestellt.

??? 2.Frage: Kann man den Abstand vom Kopf des Detailbereichs bis zur Position der waagrechten Linie ausrechnen um die Länge der
senkrechten Linien zu bestimmen?

Ich hoffe, jemand von Euch weiß Rat, habe zwar folgendes im Internet gefunden, aber ich schaffe es nicht,
dies in meinem Fall anzupassen:

http://www.donkarl.com?FAQ5.15

Ich danke Euch im Voraus

Pergus
Win7, Office Professional 2010

Pergus

Hallo Leute!

Hab´s geschafft!  ;D

Hier die Code:

Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)
Dim X1 As Single, X2 As Single
Dim X3 As Single, X4 As Single
Dim X5 As Single, X6 As Single
Dim X7 As Single, X8 As Single
Dim X9 As Single, X10 As Single
Dim X11 As Single, X12 As Single
Dim X13 As Single, X14 As Single
Dim X15 As Single, X16 As Single
Dim X17 As Single, X18 As Single
Dim X19 As Single, X20 As Single
Dim X21 As Single, X22 As Single
Dim Y1 As Single, Y2 As Single
Dim Farbe As Long

' Festlegen der Maßeinheit für Koordinaten auf einer Seite...
Me.ScaleMode = 7 ' Festlegen der Maßeinheit Zentimeter.

' Linien x cm vom linken Rand erstellen.

X1 = 0
X2 = 0

X3 = 1.4
X4 = 1.4

X5 = 3.2
X6 = 3.2

X7 = 5
X8 = 5

X9 = 6.8
X10 = 6.8

X11 = 10.2
X12 = 10.2

X13 = 13.2
X14 = 13.2

X15 = 14.8
X16 = 14.8

X17 = 16.4
X18 = 16.4

X19 = 18.2
X20 = 18.2

X21 = 27.8
X22 = 27.8

' Linie vom Anfang des Detailbereichs bis zu
' maximaler Höhe von 55,87cm (22 Zoll) erstellen.
Y1 = 0
Y2 = 55.87
Me.DrawWidth = 8 ' Breite der Linie (in Pixeln). Hinweis: Einige Drucker akzeptieren keine ungeraden Zahlen.
Farbe = RGB(0, 0, 0) ' Linie schwarz darstellen.

' Linie zeichnen mit der Line-Methode.
Me.Line (X1, Y1)-(X2, Y2), Farbe
Me.Line (X3, Y1)-(X4, Y2), Farbe
Me.Line (X5, Y1)-(X6, Y2), Farbe
Me.Line (X7, Y1)-(X8, Y2), Farbe
Me.Line (X9, Y1)-(X10, Y2), Farbe
Me.Line (X11, Y1)-(X12, Y2), Farbe
Me.Line (X13, Y1)-(X14, Y2), Farbe
Me.Line (X15, Y1)-(X16, Y2), Farbe
Me.Line (X17, Y1)-(X18, Y2), Farbe
Me.Line (X19, Y1)-(X20, Y2), Farbe
Me.Line (X21, Y1)-(X22, Y2), Farbe

End Sub


Zwar ewig lang, aber funktioniert!

Übrigens:
ZitatDie waagrechte Linie am Fuße des Detailbereichs, die die jeweiligen Datensätze optisch voneinader trennt, wird korrekt dargestellt.

Diese Linie sollte jetzt vom Fuß- in den Kopfbereich des Detailbereichs verschoben werden!

:-[ Trotzdem bleiben mir noch zwei Fragen:

??? 1.Frage: Wie lese ich die Textfeldposition (und zwar den linken Rand des Textfeldes!) aus?
??? 2.Frage: Wie zeichne ich die letzte waagrechte Linie im Bericht (Textfeld als "vergrößerbar" auf "ja"!)?

Würde mich freuen, wenn jemand helfen kann!

Gruß

Pergus
Win7, Office Professional 2010

daolix

Zitat1. Frage: Kann man, um die exakte Position der Linien zu definieren,  den Abstand zur linken Seite ( -->[] ) eines Textfeldes (oder Kombinationsfeld) auslesen?
Den Linkswert eines Controls erhäst du mit ME.Controls("Textfeld_5").Properties("Left").Value
Die anderen Property-Namen sind Top, Width und Height.

Zitat
2.Frage: Kann man den Abstand vom Kopf des Detailbereichs bis zur Position der waagrechten Linie ausrechnen um die Länge der
senkrechten Linien zu bestimmen?

wenn der Detailbereich ein endlosbericht ist es etwas komplizierter. wenn nicht dann
Top_waagrechten_Linie = Me.Detailbereich.Controls("waagrechte_Linie").Properties("Top")

ZitatWie zeichne ich die letzte waagrechte Linie im Bericht (Textfeld als "vergrößerbar" auf "ja"!)?
Diese Frage verstehe ich jetzt nicht.



Pergus

#3
Danke daolix,

hast mir sehr geholfen!  ;)

Mit
ZitatWie zeichne ich die letzte waagrechte Linie im Bericht (Textfeld als "vergrößerbar" auf "ja"!)?
meinte ich folgendes:

Durch meine bisherige Lösung zeichnet die Code alle Linien im Bericht außer diejenige des letzten Datensatzes.
Da ich zwei Textfelder habe, die die Eigenschaft "vergrößerbar" auf "ja" gesetzt haben, weiß ich jetzt nicht so recht,
wo oder vor allem wie ich die letzte Linie gesetzt bekomme (siehe Bild im Anhang!)!

Hast Du oder jemand anders eine Ahnung?  ???

Andere Frage:
Wenn man Textfelder so anspricht: Me.Controls("Tätigkeit").Properties("Left").Value,
wie spricht man dann Bezeichnungsfelder an?  ???

Gruß Pergus

[Anhang gelöscht durch Administrator]
Win7, Office Professional 2010

database

Hallo Gustav,

Zitatwie spricht man dann Bezeichnungsfelder an?
ebenfalls über ihren Namen - der standardmäßig WAHRSCHEINLICH 'Bezeichnungsfeldxx' lauten wird.

Also in Etwa so:

Me.Controls("Bezeichnungsfeld3").Properties("Left").Value

HTH

Pergus

Hallo Peter,

was bin ich nur für ein Tr...el! Anstatt zu probieren, es wäre ja einfach gewesen, muss ich gleich kompliziert denken!

Danke und schöne Grüße nach Niederösterreich!

Gustav
Win7, Office Professional 2010

Pergus

Hallo meine Access-Freunde!

Habe intensiv nach einer optimalen Lösung gesucht, wie man die ewig lange Code kurz und übersichtlich hinbekommt!
Und siehe da, ich habe im "Das Access 2003 Entwicklerbuch" von Andrè Minhorst auf Seite 264 eine geniale Lösung gefunden!

Für Alle die, die auch dieses Problem haben, hier die Lösung:

Private Sub Detailbereich_Print(Cancel As Integer, PrintCount As Integer)
    Dim ctl As Control
    Dim Farbe As Long

Farbe = RGB(121, 167, 227) ' Linie farbig darstellen.

    For Each ctl In Me.Section(acDetail).Controls 'durchläuft alle Steuerelemente des Detailbereichs
'        If Not ctl.Name = "" Then 'evtl. ausgenommene Steuelemente
            With ctl
                Me.Line (.Left + .Width, 0)-(.Left + .Width, Me.Height), Farbe ', B
            End With
'        End If
    Next
    With Me
        Me.Line (0, 0)-(.Width, .Height), Farbe, B
    End With
End Sub


Die Line-Anweisung lautet: Object.Line (x1, y1) - ( x2, y2)[, [Farbe], [B[F]]]

Object = Referenz auf den Bericht, wo die Linie oder das Rechteck gezeichnet werden soll
x1, y1, x2, y2 = Koordinaten, die sich auf die Position der Eckpunkte der Linie oder des Rechtecks beziehen
Farbe = optional, standardmäßig schwarz, sonst Angabe in RGB (Rot, Grün, Blau)
Der letzte Parameter ist höchst interessant:
B = zeichnet ein Rahmen
BF = füllt den Rahmen aus und
lässt man den letzte Parameter ganz weg, wird statt eines Rahmens eine Linie zwischen den beiden angegebenen Punkte gezeichnet!

Einfach genial!!!  8)

Kann das Buch absolut empfehlen!

Ein Gruß aus Südtirol

Pergus
Win7, Office Professional 2010