Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Aktuellen Datensatz im Endlosformular hervorheben, Font "Terminal"

1,117 views
Skip to first unread message

Michael König

unread,
Feb 21, 2010, 5:24:09 AM2/21/10
to
Hallo,

in A2k versuche ich, die Beispiele aus FAQ 4.1 zu testen und hier
speziell das Beispiel von Dev Ashish (das Beispiel von Stephen Lebans
ist vermutlich das Elegantere, jedoch verstehe ich nicht, wie es
einzusetzen ist :-( ). Das Beispiel von Dev verwendet den Font
"Terminal". Das Beispiel habe ich soweit verstanden und auch in einer
Anwendung eingesetzt, jedoch erscheinen nicht die Rechtecke sondern das
Zeichen "ᅵ" (Character 0219) selbst. Beim ᅵberprᅵfen stelle ich fest,
dass der Font "Terminal" nicht bei der Font-Auswahl (z.B. fᅵr ein
Textfeld) erscheint. Auch in anderen Anwendungen (z.B. Word) ist dieser
Font nicht auswᅵhlbar. Ist dieser Font immer verfᅵgbar und wie kann ich
in meiner Anwendung erzwingen, dass nicht das Zeichen erscheint, sondern
das Rechteck?

Gruᅵ
Michael

Michael König

unread,
Feb 21, 2010, 6:12:51 AM2/21/10
to
Ergᅵnzung:

Das getestete Formular ist ein Unterformular in einem Hauptformular.
Ruft man das UFo testweise einzeln auf, so erscheint die aktuelle Zeile
wie gewᅵnscht. Ruft man das Hauptformular auf, so erscheint nur das
jeweils angeklickte Control mit Rechtecken unterlegt, bei allen anderen
Controls in der Zeile erscheint das Zeichen "ᅵ". Seltsam, seltsam ;-)

Michael Kᅵnig schrieb:

Karl Donaubauer

unread,
Feb 21, 2010, 6:21:23 AM2/21/10
to

Die Trickserei mit Terminal funktionierte in Zeiten von A97
und den damaligen Win/Office-Versionen relativ zuverlᅵssig.
Mit spᅵteren Versionen aber nur hin und wieder, weil die
Schriftart nicht mehr vorhanden war bzw. anders ersetzt wurde
usw. Das haben wir damals oft in den NGs diskutiert (s. google).

Wenn die DB also auf unterschiedlichen Rechnern laufen soll,
dann vergiss diese Variante und setze besser die Bedingte
Formatierung ein.

--
Servus
Karl
****************
Access-FAQ: http://www.donkarl.com /// http://www.donkarl.com?NEK
.NET-Entwickler-Konferenz fᅵr Accessler 27./28.2. + 20./21.3.2010

Michael König

unread,
Feb 21, 2010, 6:41:08 AM2/21/10
to
Hallo Karl,

Karl Donaubauer schrieb:


> Das haben wir damals oft in den NGs diskutiert (s. google).

Leider habe ich dies nicht gefunden, ich habe in mpda nicht nach "Font
Terminal" gegoogelt, jetzt habe ich's.


>
> Wenn die DB also auf unterschiedlichen Rechnern laufen soll,
> dann vergiss diese Variante und setze besser die Bedingte
> Formatierung ein.
>

Das habe ich vorher versucht, aber mir ist nicht gelungen, eine ganze
Zeile und nicht nur ein angeklicktes Control farblich hervorzuheben. Ich
habe hierzu fᅵr alle Controls einer Zeile die bedingte Formatierung
angewendet ("hat Focus"), aber die wirkt ja nur auf das ausgewᅵhlte
(=angeklickte) Control. Wie erreiche ich mit der bedingten Formatierung,
das die ganze Zeile hervorgehoben wird, egal welches Control angeklickt
wird oder wenn der Datensatzzeiger angeklickt wird?

Gruᅵ Michael

Karl Donaubauer

unread,
Feb 21, 2010, 6:55:23 AM2/21/10
to

Musst du wirklich alle Steuerelemente einfᅵrben oder reicht die
Einfᅵrbung des Formular-Hintergrundes?
Falls ersteres, dann musst du das u.a. auf alle Steuerelemente
anwenden, falls letzteres, dann fᅵgst du ein ungebundenes und
deaktiviertes (aktiviert = Nein, gesperrt = Ja) Textfeld ein, das
so groᅵ ist wie der komplette Detailbereich und per Menᅵ
Format/In den Hintergrund wandert.

Wenn du nun z.B. ein eindeutiges Feld "Id" hast, dann kannst du
"Beim Anzeigen" des Formulares folgenden Code verwenden:

Me!DeinSteuerelement.FormatConditions.Delete
Me!DeinSteuerelement.FormatConditions.Add _
acExpression, acEqual, "id=" & Me!id
Me!DeinSteuerelement.FormatConditions(0).BackColor = vbRed

Alternativ kannst du die BF-Einstellungen auch zu Fuᅵ im Dialog
einstellen und dann "Beim Anzeigen" ᅵndern:

Me!DeinSteuerelement.FormatConditions(0).Modify _
acExpression, acEqual, "id=" & Me!id

Michael König

unread,
Feb 21, 2010, 7:17:25 AM2/21/10
to
Hallo Karl,

Karl Donaubauer schrieb:
>

> Musst du wirklich alle Steuerelemente einfᅵrben oder reicht die
> Einfᅵrbung des Formular-Hintergrundes?

Hintergrund reicht, ich krieg's aber (noch) nicht hin. Mein
Hintergrund-Element heiᅵt "ctlBack" und dies ist der Code:
Private Sub Form_Current()
If IsSubForm(Me) Then
Me.Parent!txtConcId = Me!Id
Me!ctlBack.FormatConditions.Delete
Me!ctlBack.FormatConditions.Add acExpression, acEqual, "Id = " & Me!Id
Me!ctlBack.FormatConditions(0).BackColor = RGB(255, 255, 0)
End If
End Sub
"Id" ist das eindeutige Feld und txtConcId das Verknᅵpfungs-Element
Es wird allerdings nur das angeklickte Element beim Anklicken farblich
unterlegt, wenn man den Datensatzmarkierer anklickt, passiert gar nix.
Die Elemente in der Zeile habe ich mit Hintergrundart Transparent versehen.

Jens Schilling

unread,
Feb 21, 2010, 7:53:10 AM2/21/10
to
Hallo, Michael

Michael K�nig wrote:
> Karl Donaubauer schrieb:
>>

>> Musst du wirklich alle Steuerelemente einf�rben oder reicht die
>> Einf�rbung des Formular-Hintergrundes?

Schau doch mal, ob Dir diese Demo hilft :

http://my.advisor.com/doc/19525

--
Gruss
Jens

FAQ: http://www.donkarl.com


Karl Donaubauer

unread,
Feb 21, 2010, 8:02:52 AM2/21/10
to
Michael Kᅵnig wrote:
> Karl Donaubauer schrieb:
>>
>> Musst du wirklich alle Steuerelemente einfᅵrben oder reicht die
>> Einfᅵrbung des Formular-Hintergrundes?
> Hintergrund reicht, ich krieg's aber (noch) nicht hin. Mein
> Hintergrund-Element heiᅵt "ctlBack" und dies ist der Code:
> Private Sub Form_Current()
> If IsSubForm(Me) Then
> Me.Parent!txtConcId = Me!Id
> Me!ctlBack.FormatConditions.Delete
> Me!ctlBack.FormatConditions.Add acExpression, acEqual, "Id = "
> & Me!Id Me!ctlBack.FormatConditions(0).BackColor = RGB(255,
> 255, 0) End If
> End Sub

Hast du geprᅵft, ob der Code durchlaufen wird?
Schlieᅵlich hast du da oben eine Bedingung IsSubForm...

> "Id" ist das eindeutige Feld und txtConcId das Verknᅵpfungs-Element

Was spielt das "Verknᅵpfungs-Element" fᅵr ein Rolle bei dieser Aktion?
D.h. wozu ist es im Code?

> Es wird allerdings nur das angeklickte Element beim Anklicken
> farblich unterlegt,

Welches "angeklickte Element"?

> wenn man den Datensatzmarkierer anklickt,
> passiert gar nix. Die Elemente in der Zeile habe ich mit Hintergrundart
> Transparent
> versehen.

ctlBack ist aber nicht auf Transparent eingestellt und auch nicht
vᅵllig von den anderen Steuerelementen ᅵberdeckt oder dergl.?

Karl Donaubauer

unread,
Feb 21, 2010, 8:14:14 AM2/21/10
to
Karl Donaubauer wrote:
> Michael Kᅵnig wrote:
>>> ...

>> Hintergrund reicht, ich krieg's aber (noch) nicht hin. Mein
>> Hintergrund-Element heiᅵt "ctlBack" und dies ist der Code:
>> Private Sub Form_Current()
>> If IsSubForm(Me) Then
>> Me.Parent!txtConcId = Me!Id
>> Me!ctlBack.FormatConditions.Delete
>> Me!ctlBack.FormatConditions.Add acExpression, acEqual, "Id = "
>> & Me!Id Me!ctlBack.FormatConditions(0).BackColor = RGB(255,
>> 255, 0) End If
>> End Sub
>
> Hast du geprᅵft, ob der Code durchlaufen wird?
> Schlieᅵlich hast du da oben eine Bedingung IsSubForm...
> ...

Teste auch mal, ob die Sache klappt, wenn du die Bedingung
weglᅵsst und das Formular nicht als UFo sondern eigenstᅵndig ᅵffnest.

Michael König

unread,
Feb 21, 2010, 8:28:07 AM2/21/10
to
Hallo Karl,

Karl Donaubauer schrieb:
>


> Hast du geprᅵft, ob der Code durchlaufen wird?
> Schlieᅵlich hast du da oben eine Bedingung IsSubForm...
>

der Code fᅵr die BF ist mittlerweile aus der IsSubForm-Bedingung


>> "Id" ist das eindeutige Feld und txtConcId das Verknᅵpfungs-Element
>
> Was spielt das "Verknᅵpfungs-Element" fᅵr ein Rolle bei dieser Aktion?
> D.h. wozu ist es im Code?
>

fᅵr die Synchronisation mit einem 2. UFo


>> Es wird allerdings nur das angeklickte Element beim Anklicken
>> farblich unterlegt,
>
> Welches "angeklickte Element"?

ein beliebiges Textfeld, vergiss diesen Punkt


>
> ctlBack ist aber nicht auf Transparent eingestellt und auch nicht
> vᅵllig von den anderen Steuerelementen ᅵberdeckt oder dergl.?
>

also ein Stᅵck weit klappt's jetzt: man muss aufpassen, dass wenn man
eine Farbe einstellt, danach die Hintergrundart von "Transparent" wieder
auf "Normal" gestellt wird (ist ja auch irgendwie logisch).

Stand der Dinge: Die Zeile wird - wie gewᅵnscht - farblich unterlegt,
allerdings:
klickt man jetzt auf ein beliebiges Steuerelement im Detail-Bereich,
wird dieses nicht mehr farblich unterlegt (damit kᅵnnte ich leben)
und
bei jedem Datensatz-Wechsel "flackert" jetzt das ganze UFo, das ist
weniger schᅵn. Kann man dieses Flackern auch noch unterbinden?

Karl Donaubauer

unread,
Feb 21, 2010, 8:49:24 AM2/21/10
to
Michael Kᅵnig wrote:
> Karl Donaubauer schrieb:
>> ...

> Stand der Dinge: Die Zeile wird - wie gewᅵnscht - farblich
> unterlegt, allerdings:
> klickt man jetzt auf ein beliebiges Steuerelement im Detail-Bereich,
> wird dieses nicht mehr farblich unterlegt (damit kᅵnnte ich leben)

Klar, transparente Steuerelemente werden immer intransparent,
wenn sie den Fokus haben.
Du kannst das ᅵbertricksen, indem du fᅵr die Steuerelemente als
Hintergrundfarbe dieselbe einstellst wie fᅵr das einfᅵrbende Textfeld
und dann ihre Hintergrundart wieder auf transparent zurᅵckᅵnderst.

> und bei jedem Datensatz-Wechsel "flackert" jetzt das ganze UFo
> , das ist weniger schᅵn. Kann man dieses Flackern auch noch unterbinden?

Teste, ob die Voreinstellen+Modify-Variante weniger flackert,
die ich weiter oben erwᅵhnt hatte. Normalerweise ist das Flackern
bei dieser Methode gering, aber das hᅵngt natᅵrlich auch von deinen
sonstigen Ablᅵufen ab, mehrfaches Verknᅵpfen, allg. Performance etc.

Michael König

unread,
Feb 21, 2010, 9:28:31 AM2/21/10
to
Hallo Karl,

>
> Teste, ob die Voreinstellen+Modify-Variante weniger flackert,
> die ich weiter oben erwᅵhnt hatte. Normalerweise ist das Flackern
> bei dieser Methode gering, aber das hᅵngt natᅵrlich auch von deinen
> sonstigen Ablᅵufen ab, mehrfaches Verknᅵpfen, allg. Performance etc.
>

Ich kann keinen Unterschied zwischen der Add- bzw. der Modify-Variante
feststellen, beide flackern. Zu den "Ablᅵufen": Das "flackernde" UFo hat
als Datenquelle eine Abfrage, das HFo hat/braucht keine Datenquelle, es
enthᅵlt nur ein paar Schaltflᅵchen.

Karl Donaubauer

unread,
Feb 21, 2010, 2:04:42 PM2/21/10
to
Michael Kᅵnig wrote:

Warum schickst du deine Nachrichten auch dauernd als Email?

> ...

Ist das Flackern gleich heftig, wenn du das Formular nicht als UFo
sondern eigenstᅵndig ᅵffnest?

Wenn nein, dann prᅵfe, wie oft der Code ausgefᅵhrt wird, z.B. mit
einem debug.print oder einer MsgBox. Falls mehrfach, kann
man evtl. gegensteuern, indem man zuerst die Bedingung prᅵft.

Michael König

unread,
Feb 22, 2010, 9:52:42 AM2/22/10
to
Hallo Karl,

Karl Donaubauer schrieb:


> Warum schickst du deine Nachrichten auch dauernd als Email?
>

sorry, weil ich nicht aufpasse. Ich speichere mir die Antworten in einem
sep. Ordner ab, und verwende dummerweise zum Antworten versehentlich
nicht die NG, sondern diesen Ordner. Entschuldige bitte, ich gelobe
Besserung


>> ...
>>> Teste, ob die Voreinstellen+Modify-Variante weniger flackert,
>>> die ich weiter oben erwᅵhnt hatte. Normalerweise ist das Flackern
>>> bei dieser Methode gering, aber das hᅵngt natᅵrlich auch von deinen
>>> sonstigen Ablᅵufen ab, mehrfaches Verknᅵpfen, allg. Performance
>>> etc.
>> Ich kann keinen Unterschied zwischen der Add- bzw. der
>> Modify-Variante feststellen, beide flackern. Zu den "Ablᅵufen": Das
>> "flackernde" UFo hat als Datenquelle eine Abfrage, das HFo
>> hat/braucht keine Datenquelle, es enthᅵlt nur ein paar
>> Schaltflᅵchen.
>
> Ist das Flackern gleich heftig, wenn du das Formular nicht als UFo
> sondern eigenstᅵndig ᅵffnest?
>
> Wenn nein, dann prᅵfe, wie oft der Code ausgefᅵhrt wird, z.B. mit
> einem debug.print oder einer MsgBox. Falls mehrfach, kann
> man evtl. gegensteuern, indem man zuerst die Bedingung prᅵft.
>

Das Flackern ist genauso heftig, wenn ich das UFo eigenstᅵndig ᅵffne.
Kᅵnnte es vielleicht sein, dass das Flackern durch die Datenquelle
(=Abfrage) verursacht wird? Hier mal das SQL-Syntax der Abfrage:

SELECT tblPersonen.Id, qryAnreden.Anrede, qryVollerName.VollerName,
IIf(IstAktiv([tblPersonen].[Id]),"aktiv","") AS Aktiv, tblPersonen.Plz,
tblPersonen.Wohnort, tblPersonen.Telefon, tblPersonen.Mobil,
tblPersonen.Geburtsdatum
FROM (tblPersonen LEFT JOIN qryVollerName ON tblPersonen.Id =
qryVollerName.Id) LEFT JOIN qryAnreden ON tblPersonen.AnredeId =
qryAnreden.Id
ORDER BY qryVollerName.VollerName;

Dabei ist qryVollerName seinerseits wieder eine Abfrage mit folgender
SQL-Syntax:

SELECT tblPersonen.Id, [Nachname] & IIf(IsNothing([Vorname]),""," " &
[Vorname]) AS VollerName
FROM tblPersonen
ORDER BY [Nachname] & IIf(IsNothing([Vorname]),""," " & [Vorname]);

Gruᅵ Michael

Karl Donaubauer

unread,
Feb 22, 2010, 10:58:53 AM2/22/10
to
Michael K�nig wrote:
> ...
> Das Flackern ist genauso heftig, wenn ich das UFo eigenst�ndig �ffne.
> K�nnte es vielleicht sein, dass das Flackern durch die Datenquelle

> (=Abfrage) verursacht wird? Hier mal das SQL-Syntax der Abfrage:
>
> SELECT tblPersonen.Id, qryAnreden.Anrede, qryVollerName.VollerName,
> IIf(IstAktiv([tblPersonen].[Id]),"aktiv","") AS Aktiv,
> tblPersonen.Plz, tblPersonen.Wohnort, tblPersonen.Telefon,
> tblPersonen.Mobil, tblPersonen.Geburtsdatum
> FROM (tblPersonen LEFT JOIN qryVollerName ON tblPersonen.Id =
> qryVollerName.Id) LEFT JOIN qryAnreden ON tblPersonen.AnredeId =
> qryAnreden.Id
> ORDER BY qryVollerName.VollerName;
>
> Dabei ist qryVollerName seinerseits wieder eine Abfrage mit folgender
> SQL-Syntax:
>
> SELECT tblPersonen.Id, [Nachname] & IIf(IsNothing([Vorname]),""," " &
> [Vorname]) AS VollerName
> FROM tblPersonen
> ORDER BY [Nachname] & IIf(IsNothing([Vorname]),""," " & [Vorname]);

Das sieht allerdings nach einem Mordanschlag auf die arme kleine
Access-Performance aus. ;-)
Wieviele Datens�tze hat tblPersonen?
Was ist IsNothing? Was IstAktiv?
Fragen �ber Fragen. :-)

Teste mal, ob das weniger flackert:

SELECT tblPersonen.Id, qryAnreden.Anrede,
tblPersonen.VorName + " " & tblPersonen.Nachname AS VollerName,
IIf(IstAktiv([tblPersonen].[Id]),"aktiv") AS Aktiv, tblPersonen.Plz,
tblPersonen.Wohnort, tblPersonen.Telefon, tblPersonen.Mobil,
tblPersonen.Geburtsdatum
FROM tblPersonen LEFT JOIN qryAnreden ON tblPersonen.AnredeId =
qryAnreden.Id
ORDER BY tblPersonen.Nachname, tblPersonen.VorName;

s.a. www.donkarl.com?FAQ2.12

--
Servus
Karl
****************
Access-FAQ: http://www.donkarl.com /// http://www.donkarl.com?NEK

.NET-Entwickler-Konferenz f�r Accessler 27./28.2. + 20./21.3.2010


Karl Donaubauer

unread,
Feb 22, 2010, 12:37:01 PM2/22/10
to
Karl Donaubauer wrote:
> Michael K�nig wrote:
>> ...
>> SELECT tblPersonen.Id, [Nachname] & IIf(IsNothing([Vorname]),""," " &
>> [Vorname]) AS VollerName
>> FROM tblPersonen
>> ORDER BY [Nachname] & IIf(IsNothing([Vorname]),""," " & [Vorname]);
> ...

> SELECT tblPersonen.Id, qryAnreden.Anrede,
> tblPersonen.VorName + " " & tblPersonen.Nachname AS VollerName,

Ich sehe gerade, dass das verkehrt herum ist. Sollte hei�en:

tblPersonen.Nachname & " " + tblPersonen.Vorname AS VollerName,

Michael König

unread,
Feb 23, 2010, 2:50:45 AM2/23/10
to
Hallo Karl,

Karl Donaubauer schrieb:
>

> Das sieht allerdings nach einem Mordanschlag auf die arme kleine
> Access-Performance aus. ;-)

nett gesagt
> Wieviele Datensᅵtze hat tblPersonen?
233
> Was ist IsNothing?
Selber "gestrickter" Ersatz fᅵr IsNull, ich prᅵfe mal, ob IsNull nicht
doch ausreicht
Was IstAktiv?
Eine separate Funktion, die anhand einer weiteren Tabelle ᅵberprᅵft, ob
eine Person "aktiver Sportler" oder "Fᅵrderer" ist. Diese Tabelle ist
1:n verknᅵpft mit tblPersonen, weil eine Person mehrere Eigenschaften
haben kann ("aktiver", "Vorstand", etc.)


> Teste mal, ob das weniger flackert:
>

> s.a. www.donkarl.com?FAQ2.12
>
Den Operator '+' kannte ich bisher gar nicht (man sollte doch die FAQ
auswendig lernen ;-) ), jedenfalls flackert es schon m.E. ein bisschen
weniger durch den Einsatz dieses Operators.

Gruᅵ Michael

Karl Donaubauer

unread,
Feb 23, 2010, 4:21:24 AM2/23/10
to

Der +Trick war hier noch die geringere Empfehlung, was die
Performance betrifft. Wichtiger ist, dass du

1. nicht mehrfach sortierst
2. nicht nach Ausdrᅵcken sortierst, sondern nach Tabellenfeldern;
die Sortier-, Kriterien- und Verknᅵpfungsfelder sollten indiziert sein
3. nicht unnᅵtig zusᅵtzliche Abfragen und JOINs drin hast,
insbesondere OUTER JOINs
4. nur unbedingt nᅵtige VBA-Funktionen in der Abfrage einsetzt

Bei nur 233 Datensᅵtzen sollte das Formular ohne Verzᅵgerung
gefᅵllt werden und das Formatieren mit einem minimalen Ruckeln
erfolgen. Wenn nicht, heiᅵt es weiter optimieren. Auch weil Tabellen
zum Wachstum tendieren.

--
Servus
Karl
****************
Access-FAQ: http://www.donkarl.com /// http://www.donkarl.com?NEK

0 new messages