KeyHandler_keyPressed

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: KeyHandler_keyPressed

Re: KeyHandler_keyPressed

von Jonny1 » Di, 08.02.2011 15:26

foobar^2 hat geschrieben:Eine Übersicht dazu findet sich hier: constants group Key
Vielen Dank für den Link. Habe mir es kopiert und abgespeichert.
foobar^2 hat geschrieben:Wieso willst du über ein OOo-Macro VLC aufrufen?
Wie sieht denn der gesamte Code dazu aus?
So sieht der Code aus:

Code: Alles auswählen

REM  *****  BASIC  *****

Option Explicit

Const NameTasteEinAus = "TasteEA", NameBeschriftungsfeldTasteEinAus = "BFeldTasteEA", NameTextfeldProgrammPfad = "ProgrammPfad", NameTextfeldVideoPfad = "VideoPfad", _
	rot = 16711680, gruen = 32768, EIN = "EIN", AUS = "AUS", InneresGrenzzeichen ="#", AuessresGrenzzeichen =" ", VideoNummerZeichen = "*", VideoNrMax = 30, _
	MaxLaengeZeitfeld = 35, LinkeGrenze = " #",	RechteGrenze = "# ", TrennZeichen = "+"

Global ProgrammPfad, LabelEIN, LabelAUS, HilfetextEIN, HilfetextAUS as string, oDoc As Object, aktiviert, bestaetigt as boolean, oMouseClickHandler As Object, _
	ArrayVideoNamen(VideoNrMax) as string

sub main
end sub

Function ControlNummerZuControlName(ControlName)
	Dim Anzahl, sName, i
	Anzahl = thiscomponent.drawpage.count
	i = 0
	do
		sName = thiscomponent.drawpage(i).control.name
		i = i+1
	loop until sName = ControlName OR i=Anzahl
	if sName = ControlName then ControlNummerZuControlName = i-1
end Function

Sub Aktiviere
	if aktiviert then exit sub
	oDoc = ThisComponent.currentController
	oMouseClickHandler = createUnoListener("Wupp_", "com.sun.star.awt.XMouseClickHandler")
	oDoc.addMouseClickHandler(oMouseClickHandler)
	aktiviert = TRUE
End Sub

Sub Deaktiviere
	on error goto Fehler
	oDoc = ThisComponent.currentController
	oDoc.removeMouseClickHandler(oMouseClickHandler)
	aktiviert = FALSE
	bestaetigt = FALSE
	goto Ende
Fehler:
	msgbox "FEHLER: "+err
	on error goto 0
Ende:
End Sub


Sub Wupp_disposing(oEvt)
End Sub

Function Wupp_mousePressed(oEvt) As Boolean
	Wupp_mousePressed = False
End Function

Function Wupp_mouseReleased(oEvt) As Boolean
	if aktiviert AND NOT bestaetigt then
		bestaetigt = TRUE
		exit Function
	end if
	Dim xq As String
	Dim yq As String
	With oEvt
	xq = .X
	yq = .Y
	End With
	'msgbox "x = "+xq+" / y = "+yq
	Wupp_mouseReleased = False
	WaehleSzene
End Function

Function PfadUmformen(Pfad)
	Dim i, PositionI, ArrayPos(100) as integer, AnzahL , Bipp
	i = 0
	PositionI = 1
	do
		i = i+1
		PositionI = instr(PositionI + 1,Pfad,"\")
		ArrayPos(i) = PositionI
		Bipp = ArrayPos(i)
		Bipp = ArrayPos(i-1)
	loop until PositionI = 0
	AnzahL = i-1
	for i=Anzahl to 2 step -1
		Pfad = left(Pfad, ArrayPos(i)-1) + """\\""" + right(Pfad,len(Pfad)- ArrayPos(i))
	next
	Pfad = left(Pfad, ArrayPos(i)-1)+"\\"""+right(Pfad,len(Pfad)- ArrayPos(i))+""""
	PfadUmformen = Pfad
end Function

sub Initialisiere
	Dim ControlNummer
	LabelEIN = "Befehlsweitergabe EINGESCHALTET" & Chr(10) & "Die grüne Taste drücken, um Zeitfelder und Adressen zu bearbeiten."
	LabelAUS = "Befehlsweitergabe AUSGESCHALTET. Die Felder können bearbeitet werden." & Chr(10) & "Die rote Taste drücken, um die Befehlsweitergabe einzuschalten."
	HilfetextEIN = "Befehlsweitergabe EINGESCHALTET. Die grüne Taste drücken, um die Zeitfelder zu bearbeiten."
	HilfetextAUS = "Befehlsweitergabe AUSGESCHALTET. Die Zeitfelder können bearbeitet werden. Die rote Taste drücken, um die Befehlsweitergabe einzuschalten."
	ControlNummer = ControlNummerZuControlName(NameTextfeldProgrammPfad)
	ProgrammPfad = thiscomponent.drawpage(ControlNummer).control.text

	dim ControlName, i, ControlText, Position, sNummer, iNummer, Pfad
	for i=0 to VideoNrMax 
		ArrayVideoNamen(i)="" 
	next
	i = 0
	do
		on error goto SprungEnde
		ControlName = thiscomponent.drawpage(i).control.name
		if ControlName = "VideoPfad" then 
			ControlText = thiscomponent.drawpage(i).control.text
			Position = instr(1,ControlText,"*")
			if Position = 0 then
				iNummer = VideoNrMax
				goto Sprung1
			end if
			sNummer = left(ControlText, Position-1)
			iNummer = val(sNummer)
		Sprung1:
			Pfad = right(ControlText, len(ControlText)-Position)
			Pfad = PfadUmformen(Pfad)
			ArrayVideoNamen(iNummer) = Pfad
		end if
		i = i+1
	loop
SprungEnde:
end sub

sub SchalteUm
	Dim ControlNummerTasteEinAus, ControlNummerBeschriftungsfeldTasteEinAus, TasteEinAus, BeschriftungsfeldTasteEinAus
	Initialisiere
	ControlNummerTasteEinAus = ControlNummerZuControlName(NameTasteEinAus)
	ControlNummerBeschriftungsfeldTasteEinAus = ControlNummerZuControlName(NameBeschriftungsfeldTasteEinAus)
	TasteEinAus = thiscomponent.drawpage(ControlNummerTasteEinAus).control
	BeschriftungsfeldTasteEinAus = thiscomponent.drawpage(ControlNummerBeschriftungsfeldTasteEinAus).control
	if TasteEinAus.backgroundcolor = gruen then 
		TasteEinAus.backgroundcolor = rot
		TasteEinAus.label = AUS
		TasteEinAus.helptext = HilfetextAUS
		BeschriftungsfeldTasteEinAus.label = LabelAUS
		Deaktiviere
	else
		TasteEinAus.backgroundcolor = gruen
		TasteEinAus.label = EIN
		TasteEinAus.helptext = HilfetextEIN
		BeschriftungsfeldTasteEinAus.label = LabelEIN
		aktiviere
	end if
end sub

Sub StarteVideo(VideoNr, AnfangsZeitSekunden, EndZeitSekunden)
    Dim Ergebnis, GesamtString
    GesamtString = ProgrammPfad + " " + ArrayVideoNamen(VideoNr) + " --start-time=" + AnfangsZeitSekunden + _
    	" --stop-time=" + EndZeitSekunden + " --global-key-play-pause=771" + " --key-play-pause=771" + " --video-x=1000" + " --video-y=0" + " --scale=1" + " --video-deco" + _
    	" --video-title='uppaduppa'" + " --zoom=200"
    Shell ("TASKKILL /F /IM vlc.exe")
    wait 200
    Ergebnis = _
        Shell(GesamtString)
End Sub

Sub StarteGanzesVideo
	StarteVideo(0,0)
End Sub

Function BildeZahl(StringF as String) as long
	Const Beobachten1 = false, Beobachten2 = false
	Dim iStunden, Stunden$, Rest, iMinuten, Minuten$, iSekunden, Sekunden$, ZehntelSekunden
	
	iStunden = instr(StringF,":")
	if Beobachten1 then print iStunden
	Stunden$ = left(StringF,iStunden-1)
	if Beobachten1 then print Stunden$
	Rest = right(StringF,len(StringF)-iStunden
	if Beobachten1 then print Rest
	iMinuten = instr(Rest,":")
	Minuten$ = left(Rest,iMinuten-1)
	if Beobachten1 then print Minuten$
	Rest = right(Rest,len(Rest)-iMinuten
	if Beobachten1 then print Rest
	iSekunden = instr(Rest,"-")
	Sekunden$ = left(Rest,iSekunden-1)
	if Beobachten1 then print "Sekunden: " & Sekunden$
	Rest = right(Rest,len(Rest)-iSekunden
	if Beobachten1 then print "Zehntel Sekunden: " & Rest
	ZehntelSekunden = 36000*CLng(Stunden$)+600*CLng(Minuten$)+10*CLng(Sekunden$)+Rest
	if Beobachten2 then print "ZehntelSekunden: " & ZehntelSekunden
	BildeZahl = ZehntelSekunden/10
End Function

Sub WaehleSzene
	Dim ZahlL, oDoc, oVC, oTC1, oTC2, bExtend, StringA, i, j, StringR, StringGefunden, iTrennZeichen, _
		AnfangsZeit, iAnfangsZeit, AnfangsZeitSekunden, EndZeit, iEndZeit, EndZeitSekunden, LaengeA, sVideoNummer, VideoNummer
		
	'on error goto 0
	on error goto Ende
	
	Const Beobachten1 = false, Beobachten2 = false
 
	oDoc = ThisComponent
	oVC = oDoc.CurrentController.getViewCursor		'Create View Cursor oVC

	oTC1 = oDoc.Text.createTextCursorByRange(oVC)	'Create Text Cursor by cloning the View Cursor (both have same position in doc)
	oTC2 = oDoc.Text.createTextCursorByRange(oVC)	'Create Text Cursor by cloning the View Cursor (both have same position in doc)
	bExtend = false
	oTC2.goRight(MaxLaengeZeitfeld, FALSE)
	oTC1.gotoRange(oTC2,true)			'Move Text Cursor to same location as oVC while selecting text in between (True)
	StringA = oTC1.String
	LaengeA = len(StringA)
	if Beobachten1 then print StringA
	i = instr(StringA,LinkeGrenze)
	'if i<>0 then exit sub
	j = instr(StringA,RechteGrenze)
	if j=0 then exit sub
	if Beobachten1 then print j
	if i<j AND i<>0 then exit sub
	StringR = left(StringA,j-1)	'StrigR ist der rechte Stumpf, vom Kursor bis zur rechten Grenze.
	ZahlL = MaxLaengeZeitfeld - len(StringR)
	oTC2.goLeft(ZahlL, FALSE)
	oTC1.gotoRange(oTC2,FALSE)
	oTC1.goLeft(MaxLaengeZeitfeld,FALSE)
	oTC1.gotoRange(oTC2,true)
	StringA = oTC1.String
	i = instr(StringA,LinkeGrenze)
	if Beobachten1 then print i
	StringGefunden = right(StringA,len(StringA)-i-1)
	'StringGefunden = left(StringGefunden, len(StringGefunden)-1)
	if Beobachten1 then print StringGefunden
	
	i = instr(StringGefunden, VideoNummerZeichen)
	if i=0 then 
		VideoNummer = VideoNrMax
	else
		sVideoNummer = left(StringGefunden, i-1)
		VideoNummer = val(sVideoNummer)
	end if
	StringGefunden = right(StringGefunden, len(StringGefunden)-i
	
	iTrennZeichen = instr(StringGefunden,TrennZeichen)
	AnfangsZeit = mid(StringGefunden, 2, iTrennZeichen-2)
	if Beobachten2 then print "AnfangsZeit: " & AnfangsZeit
	iAnfangsZeit = BildeZahl(AnfangsZeit)
	AnfangsZeitSekunden = str(iAnfangsZeit)
	AnfangsZeitSekunden = right(AnfangsZeitSekunden,len(AnfangsZeitSekunden)-1)
	EndZeit = mid(StringGefunden, iTrennZeichen+1, len(StringGefunden)-iTrennZeichen-1)
	if Beobachten2 then print "EndZeit: " & EndZeit
	iEndZeit = BildeZahl(EndZeit)
	EndZeitSekunden = str(iEndZeit)
	EndZeitSekunden = right(EndZeitSekunden,len(EndZeitSekunden)-1)
	StarteVideo(VideoNummer,AnfangsZeitSekunden,EndZeitSekunden)
  Ende:
End Sub
Und so sieht der Text aus, der den Code aufruft:
2011-02-08_1515.png
2011-02-08_1515.png (84.34 KiB) 1285 mal betrachtet
bei eingeschaltetem Maus-Handler... und so:
2011-02-08_1518.png
2011-02-08_1518.png (85.69 KiB) 1285 mal betrachtet
bei ausgeschaltetem Maus-Handler.

Willst du, außer beim Programmieren, auch bei der Abwehr der Seelen-Seuche mitmachen? Seit Jahrzehnten trägt der Vermieter dazu bei, daß sich Schimmelpilze in seinen Häusern ausbreiten und schiebt die Schuld den Mietern in die Schuhe.

Re: KeyHandler_keyPressed

von Jonny1 » Mo, 07.02.2011 22:38

Ich habe jetzt eine neue Version, wo die Mitteilung nur einmal kommt:

Code: Alles auswählen

REM  *****  BASIC  *****
Option Explicit
Global oDocView
Global oKeyHandler

Sub RegisterKeyHandler
  oDocView = ThisComponent.getCurrentController
  oKeyHandler = _
  createUnoListener("MyApp_", "com.sun.star.awt.XKeyHandler")
  
'   writedbginfo oKeyHandler

  oDocView.addKeyHandler(oKeyHandler)  
End Sub

Sub UnregisterKeyHandler
  oDocView.removeKeyHandler(oKeyHandler)
End Sub

Sub MyApp_disposing(oEvt)
'nothing to do here
End Sub

Function MyApp_KeyPressed(oEvt) As Boolean
	print oEvt.KeyCode
	MyApp_KeyPressed = False
End Function

Function MyApp_KeyReleased(oEvt) As Boolean
  MyApp_KeyReleased = False
End Function
Aber warum bei der anderen Version 6 mal und hier nur einmal?

Außerdem kommt für "F4" immer noch der Wert "771", der nicht funktioniert.

KeyHandler_keyPressed

von Jonny1 » Mo, 07.02.2011 22:04

Um die Kodenummer von "F4" herauszufinden, habe ich diese Routinen aus dem Internet übernommen und ein wenig abgeändert:

Code: Alles auswählen

REM  *****  BASIC  *****

global IannzExampleKeyHandler
 
sub SetupKeyHandler
	oController = thisComponent.currentController
	IannzExampleKeyHandler = CreateUnoListener("KeyHandler_","com.sun.star.awt.XKeyHandler")
	oController.addKeyHandler(IannzExampleKeyHandler) ' Register the listener
end sub

sub RemoveKeyHandler
	thisComponent.currentController.removeKeyHandler(IannzExampleKeyHandler)
end sub
  
sub KeyHandler_disposing
end sub
 
function KeyHandler_keyReleased(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean
        KeyHandler_keyReleased = False    
end function
 
function KeyHandler_keyPressed(oKeyEvent as new com.sun.star.awt.KeyHandler) as boolean
'	KeyHandler_keyPressed = true   'Let other listeners handle the event
	aaa = oKeyEvent.keyCode
	print "oKeyEvent.keyCode: " & aaa
'	KeyHandler_keyPressed = true   'Let other listeners handle the event
end function

Die Mitteilung erscheint aber 6 mal! Warum?

Außerdem mit dem erhaltenen Wert für "F4" bekomme ich nicht das richtige Ergebnis, wenn ich das Programm VLC mit den Parametern " --global-key-play-pause=771" + " --key-play-pause=771" aufrufe.

Kann mir jemand helfen?

Danke

Nach oben