Discussion:
word 2000: doppelclick an commandbarbutton senden?
(zu alt für eine Antwort)
Thomas Hoffmann
2011-02-20 12:25:34 UTC
Permalink
Tag,
für ein Makro würde ich gerne per code den "Format übertragen" button doppelclicken.
der liegt in der commandbar("standard"), seine ID hab ich auch, aber der button hat keine
hwnd-Eigenschaft und die hwnd-Eigenschaft vom commandbar finde ich nicht raus.
Paar Infos, die ich habe:
commandbar.name: "Standard", .index=1
commandbarbutton.name: "&Format übertragen", .id=108, .index=10

wenn ich über cbb.setfocus (cbb ist der commandbarbutton) und dann getfocus()-Api eine
hwnd bekomme, ist das das window des Dokumentbereiches (lt. winspector), also vom
commandbar weit entfernt. (http://www.mvps.org/access/api/api0027.htm klappt also hier nicht).

Lt. winspector hat der commandbar("standard") sehr wohl eine hwnd-eigenschaft, aber ich
finde nicht raus, wie ich an die komme.

Kann hier jemand helfen?

Gruß und Dank
T
--
Thomas Hoffmann
Thomas Hoffmann
2011-02-20 12:58:11 UTC
Permalink
Post by Thomas Hoffmann
Lt. winspector hat der commandbar("standard") sehr wohl eine hwnd-eigenschaft, aber ich
finde nicht raus, wie ich an die komme.
Ich habe nun mit folgendem Code erstmal das handle gefunden:

hwndWord = FindWindow("OpusAPP", vbNullString)
ii = FindWindowEx(hwndWord, 0&, "MsoCommandBarDock", "MsoDockTop")
hwndCb = FindWindowEx(ii, 0&, "MsoCommandBar", "Standard")

Ich bin mir allerdings nicht sicher, ob das auf diesem Weg eine gute Idee ist, da ich
nicht weiß, ob in anderen wordversionen die Struktur dieser Fenster gleich ist.
Weiß einer hier was?
Gruß T
--
Thomas Hoffmann
Wolfram Jahn
2011-02-20 17:11:06 UTC
Permalink
Post by Thomas Hoffmann
für ein Makro würde ich gerne per code den "Format übertragen" button doppelclicken.
Vielleicht hat Button der ja eine Eigenschaft, die Du statt dessen
setzen könntest? Sowas wie Selected oder Activated? Wäre sicher die
bessere Lösung, wenn es die denn gibt.

Nur mal so ins Blaue geraten, ohne irgendeinen handfesten Hintergrund.


Wolfram
Thomas Hoffmann
2011-02-20 18:33:32 UTC
Permalink
Vielleicht hat Button der ja eine Eigenschaft, die Du statt dessen setzen könntest? Sowas
wie Selected oder Activated? Wäre sicher die bessere Lösung, wenn es die denn gibt.
Nur mal so ins Blaue geraten, ohne irgendeinen handfesten Hintergrund.
hat eine state-Eigenschaft, die kann man nicht setzen
hat eine execute-methode, die macht tatsächlich eine Aktivierung des buttons.
Nun ist es aber so, dass die Aktivierung einem EINmalclick entspricht. Word hat aber für
diesen Button auch den DoppelClick vorgesehen, der eine dauerhafte Aktivierung macht, um
Format mehrmals zu übertragen. Und das kriege ich so nicht hin.
Gruß T
--
Thomas Hoffmann
Wolfram Jahn
2011-02-20 22:44:34 UTC
Permalink
Post by Thomas Hoffmann
hat eine state-Eigenschaft, die kann man nicht setzen
hat eine execute-methode, die macht tatsächlich eine Aktivierung des buttons.
Nun ist es aber so, dass die Aktivierung einem EINmalclick entspricht.
Word hat aber für diesen Button auch den DoppelClick vorgesehen, der
eine dauerhafte Aktivierung macht, um Format mehrmals zu übertragen. Und
das kriege ich so nicht hin.
Gruß T
Spannendes Thema.

Wenn Du es wirklich haben willst und den Aufwand nicht scheust, kannst
Du den Originalbutton ausblenden und durch einen eigenen ersetzen,
dessen Eigenschaften Du dann komplett kontrollierst.

Wenn Du es hinbekommst, dass der sich zufällig ganz genauso verhält wie
das Original, dann kannst Du ihn auch darüber hinaus beeinflussen und
hast die Lösung.

Vielleicht reicht es auch, den nur in Deiner speziellen
Anwendungssituation kurzfristig zu ersetzen.

Die Methoden copyformat und pasteformat kennst Du sicher.

Du brauchst dann 'nur' mit dem Selectionchange Event die Funktionalität
anzusteuern...

Wäre ein mittleres Projekt, und ich würde mehrmals gut überlegen, ob ich
mir das antue.

Aber so könnte es vielleicht gehen.



Wolfram
Thomas Hoffmann
2011-02-21 00:05:47 UTC
Permalink
Also Leute, schon vor 10 Jahren (!) war ich mal an diesem Problem.
Heute hab ich verstanden, warum das so viele Fallstricke hat:
Also wir haben:
cb den commandbar
cbb den commandbarbutton.
cbb hat keine hwnd-eigenschaft.
cb hat eine, mit
ii = FindWindow("OpusAPP", vbNullString) 'classe von Word
und
EnumChildWindows ii, AddressOf EnumChildProc, ByVal 0&
kriegt man in EnumChildProc durch Abfrage das richtige handle für cb raus. (Siehe zB
http://support.microsoft.com/kb/183009/de)

Nun ist mir aber heute erst klargeworden dass:
cb.left und .top sich auf das parent-window, also word beziehen
und cbb.left und .top auf screen!!
meine dblclicks sind daher nur selten korrekt gelandet...

musste daher über GetWindowRect(CBhwnd, prect) erstnoch die screen-bezogenen Koordinaten
für cbb suchen. Nun endlich klappt das.

Was ein Morast!

Hoffe, das hilft irgendwann irgendwem..

Gruß TH
--
Thomas Hoffmann
Lesen Sie weiter auf narkive:
Loading...