Seite 1 von 1
Tastenkombination für Makroaufruf
Verfasst: So, 31.07.2016 08:28
von clag
Hallo Kenner und Könner,
ich habe mir ein kleines Makro erstellt, welches in Draw die aktuelle Ebene ein oder ausblendet und auf F12 gelegt und ctrl F12 sperrt die Ebene.
Das funktioniert auch soweit ganz prima, allerdings ist es etwas nervig die entsprechende Ebene immer erst aktivieren zu müssen bevor ich sie ausblenden kann um dann wieder die Ebene zu aktivieren auf der man gerade arbeitet.
Nun ist in mir der Wunsch aufgekommen die Ebenen direkt über den Index ansprechen zu wollen, also die Tastenkombination F12 + 5 soll Ebene 5 ausblenden egal welche Ebene aktuell aktiv ist.
Ich habe aber im Moment keine Idee wie man das realisieren könnte!?
hmmm (vieleicht mit einer inputbox?) aber eine direkte Übergabe des Index wäre doch besser.
Nun hoffe ich jemand von euch hat da eine Ide oder Tip für mich.
schonmal Danke in Voraus
Re: Tastenkombination für Makroaufruf
Verfasst: So, 31.07.2016 10:44
von F3K Total
Guten Morgen Clag,
war nicht ganz einfach und kann bestimmt verbessert werden:
Code: Alles auswählen
global myKeyHandler as object
global K1 as boolean
global K2 as boolean
global T1
global T2
Global nPage as integer
Global bLock as boolean
sub SetupKeyHandler
oController = thisComponent.currentController
myKeyHandler = CreateUnoListener("KeyHandler_","com.sun.star.awt.XKeyHandler")
oController.addKeyHandler(myKeyHandler)
end sub
sub RemoveKeyHandler
oController = thisComponent.currentController
oController.removeKeyHandler(myKeyHandler)
end sub
function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean
KeyHandler_keyReleased = False
if oKeyEvent.KeyCode >= 257 and oKeyEvent.KeyCode <= 265 then 'die Zahlen 1-9
K1 = true
nPage = oKeyEvent.KeyCode - 256
T1 = getsystemticks()
endif
if oKeyEvent.KeyCode = 779 then 'die Taste F12
K2 = true
T2 = getsystemticks()
if oKeyEvent.Modifiers = 2 then'Strg
bLock = true
else
bLock = false
endif
endif
if K1 = true and K2 = true then
if ABS(T1-T2) < 500 then 'Zeit zwischen Tastendrücken kleiner 0,5 Sekunden
if bLock then
S_Lock_unlock_layer(nPage)
bLock = false
else
S_hide_show_layer(nPage)
endif
endif
K1 = false
K2 = false
endif
end function
function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean
if KeyHandler_keyPressed = false then
end if
end function
Sub S_hide_Show_layer(nPage)
if nPage = 1 then 'Weil Index 1 und 2 die beiden Hintergrungebenen sind
nIndex = 0
else
nIndex = nPage + 1
end if
'print nIndex
bVisible = thisComponent.Layermanager(nIndex).isvisible
thisComponent.Layermanager(nIndex).isvisible = not bVisible
end sub
Sub S_Lock_unlock_layer(nPage)
if nPage = 1 then 'Weil Index 1 und 2 die beiden Hintergrungebenen sind
nIndex = 0
else
nIndex = nPage + 1
end if
bIsLocked = thisComponent.Layermanager(nIndex).IsLocked
thisComponent.Layermanager(nIndex).IsLocked = not bIsLocked
end sub
- Mit F12+Ebenenzahl 1-9 wird die entsprechende Ebene ausgeblendet/enigeblendet
- Mit STRG+F12+Ebenenzahl 1-9 wird die entsprechende Ebene gesperrt/entsperrt
Beispiel anbei.
Gruß R
Re: Tastenkombination für Makroaufruf
Verfasst: So, 31.07.2016 10:54
von Stephan
zumindest für einen gewöhnlichen Dialog funktioniert der Key-Listener:
http://www.openoffice.org/api/docs/comm ... tener.html
meiner Erfahrung nach einwandfrei.
Du müsstest mal schauen ob/wie der auch für das Draw-Dokument oder den Stardesktop greifbar ist, dazu musst Du nur schauen ob der Teil der Ausgabe von dbg_methods ist oder nimm XRAY.
Wenn es sich hingegen um ein Dokumentmakro handelt kannst Du im Dokument in der Datei /Configurations2/accelerator/current.xml direkt Einträge für alle 5(?) Kombinationen machen und für jede ein konkretes Makro zuweisen. Wie die konkreten Einträge für Deine Tastaturkombination aussehen müssen musst Du selbst herausfinden indem Du im Netz suchst oder bestehende Konfigurationsdateien Deines OO untersuchst.
Ein Beispieleintrag ist:
Code: Alles auswählen
<accel:item accel:code="KEY_LEFT" xlink:href="vnd.sun.star.script:ABC.ABC_work.dummy1?language=Basic&location=document"/>
dieser startet mit Pfeil-links-Taste das Makro "dummy1" im Modul "ABC_work" der Dokumentbibliothek "ABC"
Gruß
Stephan
Re: Tastenkombination für Makroaufruf
Verfasst: So, 31.07.2016 11:19
von clag
hey ihr Beiden
allerbesten Dank für die gedanklichen Anstöße und Beispielcode ist ja praktisch schon fertig zum einbinden
werde mich gleich mal ans Ausprobieren machen.
ich wünsch Euch einen schönen "stressfreien" Sonntag
Re: Tastenkombination für Makroaufruf
Verfasst: So, 31.07.2016 11:36
von F3K Total
Hallo Clag,
weil mich das Einbetten der Tastenkombinationen in das Dokument interessiert hat, anbei noch ein Beispiel alà Stephan. F12 und eine Zahl ist mir da nicht gelungen, aber
- STRG+ Zahl zum Ausblenden/Einblenden
- STRG + SHIFT + Zahl zum Sperren/Entsperren
Die Current.xml sieht so aus:
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE accel:acceleratorlist PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "accelerator.dtd">
<accel:acceleratorlist xmlns:accel="http://openoffice.org/2001/accel" xmlns:xlink="http://www.w3.org/1999/xlink">
<accel:item accel:code="KEY_1" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_1?language=Basic&location=document"/>
<accel:item accel:code="KEY_2" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_2?language=Basic&location=document"/>
<accel:item accel:code="KEY_3" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_3?language=Basic&location=document"/>
<accel:item accel:code="KEY_4" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_4?language=Basic&location=document"/>
<accel:item accel:code="KEY_5" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_5?language=Basic&location=document"/>
<accel:item accel:code="KEY_6" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_6?language=Basic&location=document"/>
<accel:item accel:code="KEY_7" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_7?language=Basic&location=document"/>
<accel:item accel:code="KEY_8" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_8?language=Basic&location=document"/>
<accel:item accel:code="KEY_9" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_hide_Show_layer_9?language=Basic&location=document"/>
<accel:item accel:code="KEY_1" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_1?language=Basic&location=document"/>
<accel:item accel:code="KEY_2" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_2?language=Basic&location=document"/>
<accel:item accel:code="KEY_3" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_3?language=Basic&location=document"/>
<accel:item accel:code="KEY_4" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_4?language=Basic&location=document"/>
<accel:item accel:code="KEY_5" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_5?language=Basic&location=document"/>
<accel:item accel:code="KEY_6" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_6?language=Basic&location=document"/>
<accel:item accel:code="KEY_7" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_7?language=Basic&location=document"/>
<accel:item accel:code="KEY_8" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_8?language=Basic&location=document"/>
<accel:item accel:code="KEY_9" accel:shift="true" accel:mod1="true" xlink:href="vnd.sun.star.script:Standard.Module1.S_lock_unlock_layer_9?language=Basic&location=document"/>
</accel:acceleratorlist>
Danke nochmal an Stephan. Diese Variante ist sicherlich die bessere, stabilere!
Gruß R
Re: Tastenkombination für Makroaufruf
Verfasst: So, 31.07.2016 12:38
von clag
Hey F3K Total,
der letzte Beispiel Code funktioniert auch einwandfrei.
haha jetz muß ich mich entscheiden ...
Nochmals Danke für deine weiterführende Hilfestellung