Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Einzelnes Control in den Vordergrund stellen (zur Laufzeit)

Begonnen von MaTiUrTi, Oktober 14, 2019, 23:59:56

⏪ vorheriges - nächstes ⏩

MaTiUrTi

Hi, ist es möglich ein einzelnes Control (transparent, mit Rahmen und MouseDown-Eigenschaft) zur Laufzeit in de Vordergrund zu stellen.
Wie es in der Entwurfsansicht geht (Reg.-Karte Anordnen) ist mir bekannt.
Ich möchte es aber erst beim Öffnen des Formulars in den Vordergrund verschieben.
Mit der Visible-Eigenschaft kann ich nicht arbeiten, denn die anderen Controls auf dem Formular müssen sichtbar bleiben.
(Ich versuche die Cursorposition zu ermitteln beim Click auf ein Control. Mit der Click-Eigenschaft geht es natürlich. Ist aber in meinem Fall nicht möglich, da zu viele Controls auf dem Formular sind.)

Kann jemand helfen ?

DF6GL

Hallo,

Du könntest versuchen, per VBA den Fokus auf das betroffene Steuerelement zu setzen.


Zitatda zu viele Controls auf dem Formular sind
.

Vielleicht ist hier Einsparungspotential oder Du nutzt die Vorteile eines Registersteuerelementes.
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

markusxy

@MaTiUrTi,
vielleicht erklärst du mal was du machst und um welchen Control Typ es sich handelt.
Grundsätzlich gibt es meines Wissens keine Methode um die Ebene eines Controls zu bestimmen. Nicht mal ControlCreate kennt diese  Eigenschaft - ganz im Gegensatz zu UserForm Controls die man in Access ja auch nutzen könnte.

DF6GL

Hallo,

es ist schon möglich, über Entwurfsmodus/Anordnen/In den Vorder-, bzw. Hintergrund die "Lage" zu bestimmen.  (Ausnahmen bestätigen die Regel..)


Das Control, das den Fokus erhält wird "in den Vordergrund" verfrachtet.


Ein viel bessere Möglichkeit, solche "Ansichtssachen" zu entwickeln, ist m. E. ein Registersteuerelement zu benutzen, wenn es denn wirklich bei sehr vielen Steuerelementen bleiben soll (muss?).
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

MaTiUrTi

Hallo,
Das Problem mit dem Control in den Voedergrund stellen habe ich mir so geholfen, daß ich beim LoadForm das Control richtig platziere und die Größe anpasse. Also dieses Problem ist für mich erstmal erledigt.
Nun zudem was ich geplant habe (ist wahrscheinlich ein neues Thema):
Ich habe ein Formular mit mehreren Registerseiten. Auf jeder Seite sind zig Miniaturansichten mit beschrifteten Labels (Deshalb ist das Clickereignis auf den Labels äußerst unpraktisch).
Parallel sind in einer Tabelle die Positionen (Top/Left/..) des Labels hinterlegt.
Mein Plan war nun:  Click auf ein Label-Control --> Einspielen des zugehörigen Originalbildes.
Jetzt habe ich nun ein ganz anderes Problem:
Ich kann die Werte Top/Left (Einheit Twips) usw nicht mit den Werten die ich über das "OnMouseDown"-Ereignis mit der API GetCursorPos (Einheit wohl Pixel) in Verbindung bringen.
Egal wie ich hin- und her rechne.
Es sollte doch möglich sein, die Cursor-Position beim 'Click' zu ermitteln, und dann mit der Position und Größe eines Controls in Verbindung zu bringen.

Ich höffe, ich habe mein Vorhaben verständlich dargelegt. Und hoffe auf hilfreiche Beiträge.

Grüße

markusxy

Zitat von: MaTiUrTi am Oktober 16, 2019, 23:27:31
Es sollte doch möglich sein, die Cursor-Position beim 'Click' zu ermitteln, und dann mit der Position und Größe eines Controls in Verbindung zu bringen.

Das sollte schon klappen. Schau dir mal die screentoclient Funktion an.
Aber warum so umständlich?
Du kannst doch einfach das Event des Labels nutzen.
Warum verwendest du nicht ein klick Event auf die Miniaturansicht?

MaTiUrTi

Hallo Markus,
klar könnte ich das Click-Ereignis ausnützen. Aber wie gesagt sind es sehr sehr viele Bildchen, die zudem auch noch manchmal auf andere Formulare verschoben werden.
Mit einer 'Find-Cursor-Position' - Funktion könnte ich mir viel Arbeit ersparen.

Mit der  screentoclient-Funktion komme ich wohl nicht weiter. Da steht was von c++ und ich brauche eine VBA-Funktion. Das Ergebnis sollte die x,y-Koordinaten der Cursor-Position beim Click sein.

Als Anhang habe ich eine abgespeckte Acces-2007.accdb  angehängt.
Hinweis: Falls jemand Lust hat damit rumzuspielen :  Die grünen 'Bild-Labels' anclicken. Alle möglichen x,y-Werte werden dann eingespielt. Aber mit keiner Wertekonstellation kann ich eine Zuordnung zum Label Bild 1 (Top/Unten/Links/Rechts) feststellen.   (p...Pixel    t...Twips)

Grüße aus Stuttgart

MaTiUrTi

Könnte man eigentlich das Thema/Betreff  in  'Bestimmung der Cursor-Position' ändern ?

markusxy

Zitat von: MaTiUrTi am Oktober 17, 2019, 21:17:38
Mit der  screentoclient-Funktion komme ich wohl nicht weiter. Da steht was von c++ und ich brauche eine VBA-Funktion.

Nein, dass ist keine C++ Funktion, sondern eine Windows Funktion die sowohl C++,  VBA und jede andere Programmiersprache verwenden kann genauso wie die GetCursorPos die du scheinbar verwendest. Ich habe daraus geschlossen, dass du Windows Funktionen verwendest.
Wenn du lediglich Code kopierst, dann sollten sich Anleitungen im Web finden lassen, ansonsten nutze die VBA Funktionen die ich in diesem Fall für weit besser halte.

Ein einfacher Weg:
Du erstellst im Formular eine Funktion die die Labels ansteuern.
Die Labels rufen beim Klick dann direkt diese Funktion auf und übergeben einen Wert anhand dessen klar ist um welches Label es sich handelt und welches Bild wo geladen werden muss. Wenn du schon eine Liste der Labels hast, lässt sich dass auch alles per VBA erledigen, sollte es sich wirklich um viele Labels handeln. Für die Miniaturbilder würde dann das gleiche gelten.





MaTiUrTi

Hi,
Problem ist von meiner Seite aus erstmal erledigt.
Zum einen hatte ich einmal x und y vertauscht. Dann kann es ja nicht funktionieren  :)

Und zum anderen habe ich es jetzt in VB6 realisiert. Wenn ich mal dazu komme, werde ich versuchen die Lösung in Access ebenfalls zu realisieren.

Bis dahin und nochmals Danke

MaTiUrTi

Hi,
Lösung meines Problems ('finde heraus welches Label angclickt wurde' ) war eigentlich ganz einfach.
Man braucht ein Transparentes Label das über den anderen Labels liegt. Mittels des MouseDownEreignisses bekommt man die x,y-Koordinaten der Maus innerhalb des transparenten Labels. Addiert man nun den Top und Left-Wert diese Labels dazu, kann man rausfinden, welches Label angeclickt wurde, indem man diese Werte mit den Positionswerten (Top/Height und Left/Width) der gesuchten Labels in Verbindung setzt.

Vielleicht kann jemand das ebenfalls gebrauchen. Anbei die Acces-Version.

markusxy

Na aber sicher, aber nur wenn man auf der Suche nach dem Umständlichsten und Langsamsten Weg, mit dem höchsten Ressourcenverbrauch ist.  :)