PDA

Vollständige Version anzeigen : flache buttons "ohne fokus" zu benutzen!???


Hurricane300
31.12.2001, 16:38
hallo an alle,

habe mich mit flachen buttons rumgeschlagen, es gibt ja auch einige anregungen im board, nur nachdem ich fertig war habe ich einen gewaltigen nachteil bemerkt und zwar verliert zum beispiel das fokusierte steuerelement den fokus wenn man über einen button mit der maus fährt...

gibt es eine elegantere lösung??

viele grüße

hurricane

Phillip-Berlin
02.01.2002, 15:25
beschreibe dein problem bitte etwas genauer
wie sehen deine buttons denn nun aus?
was genau ist das problem?

Hurricane300
02.01.2002, 15:49
danke für dein interesse...

hier folgt nun die genaurer beschreibung:

habe das verfahren für flache buttons aus der knowhow beispieldatenbank benutzt...
dieses verfahren funktioniert wie folgt:
wenn die maus über einen button fährt, wird dieser als aktiv (fokus) gesetzt. wenn man mit der maus zurück auf die arbeitsfläche geht wird ein verstecktes steuerelement aktiviert (fokus gesetzt), so dass der button seinen fokus verliert.
damit der button sich bei mausberührung erhöht bzw. bei nichtberühren wieder flach wird, benutzt man beim button das ereignis "bei fokuserhalt bzw. -verlust"

funktioniert super, nur jetzt kommt der !nachteil!, jedes steuerelement, wenn man es mit der maus anklickt, verliert den fokus nachdem mit der maus der bereich des steuerelementes verlassen wird, also entweder die maus die arbeitsfläche oder einen button berührt.

folgenden trick habe ich auch schon ausprobiert um die button einen "rechteckwall" zu legen bei dem der fokus genommen bzw. gewechselt wird, nur sehr aufwendig und funktioniert teilw. fehlerhaft...

Andorxor
02.01.2002, 16:03
1.Dim lc as control für das modul deklarieren

2.In das Fokusverlustereignis aller Steuerelemente ausser den Buttons und den versteckenten Steuerelement folgenden Code:
Set lc = me.NameDesSteuerelements

3.In das Fokuserhaltenereignis des Versteckte Steuerelements folgenden Code:
lc.setfocus

Hurricane300
02.01.2002, 17:03
danke für den tipp, habe ich gleich ausprobiert, gibt nur zwei probleme:

1. wenn man mit der maus zurück auf die arbeitsfläche geht wird ein verstecktes steuerelement aktiviert (fokus gesetzt), so dass der button seinen fokus verliert, diese funktion wird über das ereignis "bei mausbewegung" gesteuert also dutzende male dementsprechend wird auch deine funktion dutzende male ausgeführt, dass zur folge hat, dass der inhalt des steuerelementes flackert

2. durch das fokusieren wird der komplette feldinhalt markiert, und nicht nur der blinkende cursor, der vorher war, als man mit der maus das steuerelement angeklickt hat

A.S.
02.01.2002, 17:07
Hallo Hurricane,

damits ohne zusätzliche Variablen etc. abgeht, benutze das Screen-Objekt.

Hier:

Screen.PreviousControl.Name

und setze im zweiten von Dir genutzten Ereignis des "flachen Buttons" den Focus zurück auf den Wert dieser Object-Eigenschaft.

Dann geht Acc automatisch wieder zurück zu dem Element, welches vor dem "flachen Button" den Focus hat.

Das einzigste Problem ist, wenn mehrere flButtons vorhanden sind - und überfahren werden -, steht der letzte flButton drin.

In dem Moment dürfte o.g. Prozedere vorteilhafter sein.

Phillip-Berlin
02.01.2002, 17:17
<a href="http://www.serve-u.de/access/files/buttons.zip" target="_blank">ich hab da noch was :) </a>

Hurricane300
02.01.2002, 17:18
da es mehrere buttons sind und dadurch automatisch mehrer hintereinander berührt werden, denke ich ist der lösungsansatz von Andorxor schon i.o. müßte halt nur noch verfeinert werden, das prob mit dem "flackern" und "alles markiert"...

Andorxor
03.01.2002, 06:29
Für das Problem mit alles markiert ist mir eine Lösung eingefallen.

Zusätzlich zu den anderen Code muss du noch:
1. Dim cp as integer fürs modul deklarieren
2. cp = me.NameDesSteuerelements.SelStart
3. Ins versteckte Steuerelement:
lc.SelLenght = 0
lc.SelStart = cp

Vieleicht muss du noch lc als Textbox statt als control deklarieren

Das setzt den Cursor auf die Position auf der er vorher war.

Hurricane300
03.01.2002, 23:51
hört sich vielversprechend an, probiere ich gleich mal aus, habe es selber immerhin geschafft, dass der cursor ans ende geht, flackern auch weg...

dann habe ich es ja bald geschafft... *gg*

wenn wer interesse am fertigen hat kann er es ja posten (flache buttons und eingabefelder ohne probs)...

Hurricane300
05.01.2002, 00:31
...eine letzte kleinigkeit und dann ist es wirklich perfekt, so denke ich, gibt es eine möglichkeit, wenn ein texteil markiert ist, nicht nur die cursorposition abzuspeichern, sondern auch den markierten bereich, sonst geht dieser nämlich verloren, wenn mann über buttons fährt...

danke im voraus

hurricane

Andorxor
05.01.2002, 07:10
1.Dim sl as integer fürs Modul deklarieren

2.sl = me.NamedesSteuerelements.Sellenght

3.lc.sellenght= sl ins versteckte Steuerelement

Hurricane300
05.01.2002, 08:21
besten dank an alle, die geholfen haben, denke ist jetzt absolut fehlerfrei und praxistauglich und vor allen dingen, so wie ich es haben wollte...

eine generelle abschlußfrage:

bei meiner datenbank möchte ich nun generell diese "flachen buttons" benutzen, verwende als buttons immer bitmaps, es kommen oft gleiche bitmaps vor, da liegt der entschluss nahe die bitmaps als pfad in den formularen anzugeben, möchte allerdings keine externen dateien...

was ist sinnvoller?

1. ole-objekte als buttons
- Tabelle mit ole für buttons
- Formulare mit gebundenen objektfeldern zum anzeigen der buttons aus der quelltabelle

2. binary-large-objekte als buttons
- diese bei bedarf als bmp exportieren und den buttons (bilder) per pfad zuordnen
(ggf. zuviel rechenaufwand!?!)

3. oder gibt es eine vernünftige alternative??


viele grüße

hurricane