Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender Navigationstipps
Inhaltsverzeichnis

Mauszeiger auf CommandButton

Mauszeiger auf CommandButton
18.05.2008 13:59:00
Thomas
Hallo,
über eine ComboBox wähle ich die jeweilige Nummer eines CommandButton.
Jetzt sollte der Mauszeiger auf die Mitte dieses Button gesetzt werden.
Dieser weigert sich aber beharrlich.
https://www.herber.de/bbs/user/52430.xls
Kann mir bitte jemad sagen, was ich da falsch mache und vor Allem wie es richtig geht?
Gruß
Thomas

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Mauszeiger auf CommandButton
18.05.2008 14:59:47
Gerd
Hi,
die Cursorposition bezieht sich auf den Bildschirm, nicht auf die userform.
mfg Gerd

AW: Mauszeiger auf CommandButton
18.05.2008 15:08:07
Thomas
Hallo Gerd,
war es denn nicht richtig zunächst die Position der UserForm durch Me.Left und Me.Top auf dem Bildschirm zu ermitteln?
Dann dachte ich einen "Index" 0,0 zu haben, zu welchem ich nur noch die Abstände innerhalb der UserForm hinzuzählen müßte.
Gruß
Thomas

AW: Mauszeiger auf CommandButton
18.05.2008 15:19:04
Reinhard
Hi Thomas,
direkt helfen kann ich nicht weil ich auch nicht weiß warum dein Ansatz scheitert.
Auf meinem Bildschirm, kann ja auf einem anderen Bildschirm anders sein, klappt dies:

Private Sub MausZeiger_setzen(ByRef Nr As Integer)
Dim frmLeft As Double
Dim frmTop As Double
Dim cmdHeight As Double
Dim cmdLeft As Double
Dim cmdTop As Double
Dim cmdWidth As Double
Dim x As Long
Dim y As Long
Dim M As Long
frmLeft = Me.Left
frmTop = Me.Top
cmdHeight = Controls("CommandButton" & Nr).Height
cmdLeft = Controls("CommandButton" & Nr).Left
cmdTop = Controls("CommandButton" & Nr).Top
cmdWidth = Controls("CommandButton" & Nr).Width
x = frmLeft + cmdLeft + (cmdWidth / 2) + 180
y = frmTop + cmdTop + (cmdHeight / 2) + 150
SetCursorPos 720, 180 + Nr * 50
End Sub


Gruß
Reinhard

Anzeige
AW: Mauszeiger auf CommandButton
18.05.2008 15:28:00
Thomas
Hallo Reinhard,
da komme ich nun gar nicht mit. Wenn Du hinter SetCursorPos feste Werte eingibst, brauchst Du zuvor eigentlich gar nichts berechnen.
Was machst Du, wenn Du die lfd,-Nr. * 50 nimmst?
Gruß
Thomas

Me.Left und Me.Top liefern falsche Werte !
18.05.2008 15:13:58
NoNet
Hallo Thomas,
m.E. machst Du nichts falsch. Habe es gerade mal auf meinem Notebook mit Excel2003 SP2 getestet : Funktioniert ebenfalls nicht. Ich habe in das UserForm noch ein Label platziert, das die aktuelle Position des UF anzeigt : Wenn das UF ganz links oben in die Ecke des Bildschirms verschoben wird, dann ist das die Koordinate 0 / 0, das ist OK. Verschiebe ich die linke obere Ecke des UF in die Mitte des Bildschirms, dann ist das nicht 512 /384 (also die Mitte meines 1024x768 Bildschirms), sondern ca. 380 / 285. Verschiebe ich das UF ganz nach rechts unten (inke obere Ecke des UF), dann erscheint die Koordinate ca. 750 / 560.
D.h. : Der errechnete Koordinatenwert des UF beträgt nur ca. 70%-75% des tatsächlichen Wertes !
Daher verschiebt sich der Mauszeiger imit Deinem Code auch nicht korrekt auf den Button, sondern etwas zu weit nach links oben - obwohl Deine Arithmetik mathematisch richtig ist !
Leider funktioniert der gedachte Workaround nicht, frmLeft und frmTop einfach durch 73% zu teilen :-(
Eine Lösung kann ich Dir daher momentan noch nicht anbieten.....
Dein Crosspost im MOF wurde übrigens geschlossen :
http://www.ms-office-forum.net/forum/showthread.php?t=231989
Gruß, NoNet

Anzeige
AW: Me.Left und Me.Top liefern falsche Werte !
18.05.2008 15:50:26
Thomas
Hallo NoNet,
vielen Dank. Das mit den Labels, welche die Koordinaten der UserForm auf dem Bildschirm angeben, habe ich auch schon probiert.
Genau dehalb dachte ich, daß wenn ich zunächst die Position der UserForm ermittle, ich mich nur noch innerhalb dieser, relativ zum Bildschirmrand bewegen müßte.
Kann es denn sein, daß die Position der Maus auf dem Bildschirm und die der Controls innerhalb einer UserForm mit zweierlei Einheiten berechnet werden? Und wenn ja, weiß da jemand Rat wie man auf einen Nenner kommt?
Das mit MFO habe ich schon in völliger Zwerknirschung zur Kenntnis genommen und gelobe Besserung. Bitte gib nicht noch nachträglich Salz in die Wunde.
Ob ich trotzdem noch auf Hilfe hoffen darf?
Gruß Thomas

Anzeige
AW: Me.Left und Me.Top liefern falsche Werte !
18.05.2008 16:20:00
Caruso
Hallo Thomas,
deine SetCursorPos-Fkt. verwendet Pixel, mit Height/Top/Left etc. erhälst du aber Twips. Hierzu gibt es im Archiv und bei Google unzählihe Beiträge.
Du musst Twips in Pixel umrechnen.
Bei mir (1280er Auflösung) komme ich näherungsweise mit folgender Formel hin

x = (frmLeft + cmdLeft + (cmdWidth / 2)) * 1.33
y = (frmTop + cmdTop + (cmdHeight / 2) + 24) * 1.33


Die "24" in der letzten Formel betrifft meine Schätzung der Höhe der Titelzeile der Userform.
LG
Carlo

AW: Me.Left und Me.Top liefern falsche Werte !
18.05.2008 16:32:34
Gerd
Hi,
"...erhälst du aber Twips..."
Das ist in VB so, in VBA(Forms 2.0) sind es Point.
mfg Gerd

Anzeige
AW: Me.Left und Me.Top liefern falsche Werte !
18.05.2008 16:41:00
Caruso
Hallo Gerd,
Korrekt, du hast recht.
Ändert aber nichts an seiner Problematik und Vorgehensweise - einen Umrechnungsfaktor für seine aktuelle Darstellung ermitteln und bei der Y-Angabe die Höhe der Titzelzeile berücksichtigen.
Oder gibt es dort neuerdings eine fixe Umrechnungsmöglichkeit?
LG
Carlo

AW: Me.Left und Me.Top liefern falsche Werte !
18.05.2008 17:18:00
Thomas
Hallo Carlo,
Hallo Gerd,
solange die Experten das Problem unter sich besprechen, halte ich mich lieber in der Deckung.
Auf jeden Fall möchte ich mich bei euch Beiden bedanken.
Gibt es denn eine Funktion, wie ich generell von Maus auf UserForm und wieder zurück komme?
Gibt es eine Möglichkeit wie ich die Höhe der Titelzeile berechnen kann?
Nochmals Danke.
Gruß Thomas

Anzeige
AW: Me.Left und Me.Top liefern falsche Werte !
18.05.2008 17:36:00
Caruso
Hallo Thomas,
wie gesagt, den Multiplikator kannst du noch genauer tunen als 1.33
für die Titelzeile
Breite des Rahmens (links, unten, rechts ) = (me.width - me.insidewidth)/2
Titelzeile = me.height-me.insideheight-(Breite des Rahmens links/unten/rechts)
LG
Carlo

AW: Me.Left und Me.Top liefern falsche Werte !
18.05.2008 17:50:00
Gerd
Hi,
unter der Voraussetzung, das der Standardwert von 96 dpi eingestellt ist, ist der Umrechnungsfaktor
1,33333333333333, bei 144 dpi dann 2, das kann man aber alles mittels API auslesen.
mfg Gerd

AW: Me.Left und Me.Top liefern falsche Werte !
18.05.2008 18:40:00
Thomas
Hallo Carlo,
Hallo Gerd,
nochmals vielen Dank für Eure Hilfe. Mit diesen Angaben komme ich weiter.
Gruß
Thomas
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige