Re: [de-users] Listener im Dialog benutzen
Hey Stefan, noch eine Frage/Lösungsansatz: Ist Dein Listener (vSelChangeListener) auch als globale Variable definiert? Also so etwas wie public vSelChangeListener as variant 'Listener für die Auswahl vor allen Makros? Sonst geht es nicht... Viele Grüße Thomas Am 08.09.2022 um 21:49 schrieb Stefan Deutsch: Hi Tomas, das hab ich gerade mal probiert, aber das Ergebnis bleibt leider das Gleiche. Ich werde morgen mal den Vorschlag von RObert aus dem Handbuch probieren. Schönen Abend noch Stefan Am 08.09.2022 um 21:15 schrieb Thomas Krumbein: Hey Stefan, jo, sieht gut aus. Das mit dem Print nach dem Execute() Befehlt ist normal. Das Makro bleibt bei execute() stehen und läuft erst weiter, wenn der Dialog wieder geschlossen wird. Das ist also alles korrekt. Wenn es keine anderen Fehler gibt oder ich die nicht sehe, versuche mal folgendes: Benenne den Listener anders, also, gib ihm eine andere Prefix - so etwas wie "Test123_". Vielleicht wird der Name "sel_change" bereits intern irgendwie genutzt - das könnte dann zu Konflikten führen. Einen Versuch wäre es wert Viele Grüße Thomas Am 08.09.2022 um 20:50 schrieb Stefan Deutsch: Hi Thomas, Hier mal die letzten Zeilen des Makros, in dem das GridControl mit Inhalt gefüllt wird. Soweit ich das sehe, hab ich das vom Ablauf gemacht wie du in deinem Beispiel. oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oKommDia.addControl("GridAnzeigeKommission", oGridControl) oGridDataModel = oKommDia.Model.getByName("GridAnzeigeKommission").GridDataModel 'Run this macro to start event intercepting sPrefix = "sel_change_" sService = "com.sun.star.awt.grid.XGridSelectionListener" 'Create a listener to intercept the selection change events vSelChangeListener = CreateUnoListener(sPrefix, sService) 'Register the listener to the document controller oGridControl.addSelectionListener(vSelChangeListener) iData = oGridDataModel.getCellData(3, iRowAktuell) oKommDia.getControl("nf_ausgefasst").Value = iData oKommDia.Controls(7).deselectAllRows oKommDia.Controls(7).selectRow(iRowAktuell) oKommDia.execute() End Sub Und hier die beiden Subs. disposing wird auch ausgeführt, wenn ich den Dialog über das X beende. Sub sel_change_disposing(vEvent) print 21 End Sub Sub sel_change_selectionChanged(vEvent) Dim vCurrentSelection As Object vCurrentSelection = vEvent.source.CurrentRow MsgBox "Selected Row = " & vEvent.source.CurrentRow print 27 End Sub Allerdings ist mir auch aufgefallen, dass ein Print, dass ich hinter die Zeile oKommDia.execute() setze, erst ausgeführt wird, wenn ich den Dialog beende. Könnte es damit zusammenhängen, dass der Dialog die anderen im aufrufenden Formular blockiert? Schönen Abend noch! Stefan Am 08.09.2022 um 20:07 schrieb Thomas Krumbein: Hey Stefan, tia, wie meldest Du den Listner denn an? Codeschnipsel? Er muss am Gridelement angemeldet werden, nachdem das Model zugewiesen wurde: oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) Dies als Beispiel. Du brauchst dann mindestens noch die zwei Funktionen ' ' REM Listener Funktionen Sub ReAblSelection_selectionChanged(oEvt) dim aDSatz() If bAblFlag Then bAblFlag = false Exit sub End if 'MsgBox "Markierte Zeile: " & oEvt.source.CurrentRow aDSatz = oRaDlg.getControl("tab_g1").model.GridDataModel.getRowData(oRaDlg.getControl("tab_g1").getCurrentRow) REM Rechnungsdatendetails lesen und Eintragen AbgleichEinzelRechnung(aDSatz()) End Sub Sub ReAblSelection_disposing(oEvt) End Sub Es wird immer die komplette Zeile zurückgeliefert - die weitere Auswahl liegt dann an Dir bzw. dem Code Vielleicht hilft es :) Viele Grüße Thomas Am 08.09.2022 um 19:49 schrieb Stefan Deutsch: Guten Abend, Ich verwende gerade das erste Mal einen Listener in einem Makro. Und zwar hab ich einen Dialog, das ein GridControl enthält. Dies kann man zwar einzeichnen, aber muss es ja im Makro zum Leben erwecken. Das klappt auch soweit. Jetzt wollte ich einen Listener hinzufügen, der auf SelectionChange anschlägt. Diesen hab ich in dem Objekt angemeldet, das das UnoControlGrid enthält. Das hat auch geklappt (bzw. es kommt keine Fehlermeldung). Allerdings wird mein Sub sel_change_selectionChanged(vEvent) nie ausgelöst, egal, wie viel ich in der Tabelle rumklicke. Hat jemand einen HInweis für mich? Viele Grüße Stefan -- Diese E-Mail wurde von Avast-Antivirussoftware auf Viren geprüft. www.avast.com -- M.I.C. Consulting Riederbergstr. 92 65195 Wiesbaden Tel. 0611 - 188 53 39 Fax: 0611 - 188 53 40
Re: [de-users] Listener im Dialog benutzen
Hallo Stefan, ich sehe auch nichts an dem Code, was falsch sein könnte. Ein vager Verdacht, dass es an dem Unterstrich in deinem Prefix liegen könnte, ist ja wohl durch den Test mit einem anderen Prefix - wie von Thomas vorgeschlagen - ausgeräumt. Aber eine eventuelle Alternative habe ich (wohl auch aus Thomas Beispiel): musst du wirklich auf den Wechsel der Auswahl reagieren, oder reicht dir, die Auswahl beim Beenden des Dialogs zu verarbeiten? Im letzteren Fall kannst du Eigenschaften/Methoden des Dialogs verwenden, ohne einen Listener zu benötigen. Hier ein Schnipsel aus meinem Programm, es dürfte ohne Kontext verständlich sein: do select case DlgProblem.execute() case 1 if oGridControl.hasSelectedRows then exit do else msgbox "Bitte eine Zeile auswählen" goto endcycle end if case 0 exit sub end select endcycle: loop problemId = oDataModel.getRowHeading(oGridControl.currentRow) (Die Id wurde in den header der Zeile geschrieben.) Gruß Gerhard Am 08.09.2022 um 21:49 schrieb Stefan Deutsch: Hi Tomas, das hab ich gerade mal probiert, aber das Ergebnis bleibt leider das Gleiche. Ich werde morgen mal den Vorschlag von RObert aus dem Handbuch probieren. Schönen Abend noch Stefan Am 08.09.2022 um 21:15 schrieb Thomas Krumbein: Hey Stefan, jo, sieht gut aus. Das mit dem Print nach dem Execute() Befehlt ist normal. Das Makro bleibt bei execute() stehen und läuft erst weiter, wenn der Dialog wieder geschlossen wird. Das ist also alles korrekt. Wenn es keine anderen Fehler gibt oder ich die nicht sehe, versuche mal folgendes: Benenne den Listener anders, also, gib ihm eine andere Prefix - so etwas wie "Test123_". Vielleicht wird der Name "sel_change" bereits intern irgendwie genutzt - das könnte dann zu Konflikten führen. Einen Versuch wäre es wert Viele Grüße Thomas Am 08.09.2022 um 20:50 schrieb Stefan Deutsch: Hi Thomas, Hier mal die letzten Zeilen des Makros, in dem das GridControl mit Inhalt gefüllt wird. Soweit ich das sehe, hab ich das vom Ablauf gemacht wie du in deinem Beispiel. oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oKommDia.addControl("GridAnzeigeKommission", oGridControl) oGridDataModel = oKommDia.Model.getByName("GridAnzeigeKommission").GridDataModel 'Run this macro to start event intercepting sPrefix = "sel_change_" sService = "com.sun.star.awt.grid.XGridSelectionListener" 'Create a listener to intercept the selection change events vSelChangeListener = CreateUnoListener(sPrefix, sService) 'Register the listener to the document controller oGridControl.addSelectionListener(vSelChangeListener) iData = oGridDataModel.getCellData(3, iRowAktuell) oKommDia.getControl("nf_ausgefasst").Value = iData oKommDia.Controls(7).deselectAllRows oKommDia.Controls(7).selectRow(iRowAktuell) oKommDia.execute() End Sub Und hier die beiden Subs. disposing wird auch ausgeführt, wenn ich den Dialog über das X beende. Sub sel_change_disposing(vEvent) print 21 End Sub Sub sel_change_selectionChanged(vEvent) Dim vCurrentSelection As Object vCurrentSelection = vEvent.source.CurrentRow MsgBox "Selected Row = " & vEvent.source.CurrentRow print 27 End Sub Allerdings ist mir auch aufgefallen, dass ein Print, dass ich hinter die Zeile oKommDia.execute() setze, erst ausgeführt wird, wenn ich den Dialog beende. Könnte es damit zusammenhängen, dass der Dialog die anderen im aufrufenden Formular blockiert? Schönen Abend noch! Stefan Am 08.09.2022 um 20:07 schrieb Thomas Krumbein: Hey Stefan, tia, wie meldest Du den Listner denn an? Codeschnipsel? Er muss am Gridelement angemeldet werden, nachdem das Model zugewiesen wurde: oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) Dies als Beispiel. Du brauchst dann mindestens noch die zwei Funktionen ' ' REM Listener Funktionen Sub ReAblSelection_selectionChanged(oEvt) dim aDSatz() If bAblFlag Then bAblFlag = false Exit sub End if 'MsgBox "Markierte Zeile: " & oEvt.source.CurrentRow aDSatz = oRaDlg.getControl("tab_g1").model.GridDataModel.getRowData(oRaDlg.getControl("tab_g1").getCurrentRow) REM Rechnungsdatendetails lesen und Eintragen AbgleichEinzelRechnung(aDSatz()) End Sub Sub ReAblSelection_disposing(oEvt) End Sub Es wird immer die komplette Zeile zurückgeliefert - die weitere Auswahl liegt dann an Dir bzw. dem Code Vielleicht hilft es :) Viele Grüße Thomas
Re: [de-users] Listener im Dialog benutzen
Hi Tomas, das hab ich gerade mal probiert, aber das Ergebnis bleibt leider das Gleiche. Ich werde morgen mal den Vorschlag von RObert aus dem Handbuch probieren. Schönen Abend noch Stefan Am 08.09.2022 um 21:15 schrieb Thomas Krumbein: Hey Stefan, jo, sieht gut aus. Das mit dem Print nach dem Execute() Befehlt ist normal. Das Makro bleibt bei execute() stehen und läuft erst weiter, wenn der Dialog wieder geschlossen wird. Das ist also alles korrekt. Wenn es keine anderen Fehler gibt oder ich die nicht sehe, versuche mal folgendes: Benenne den Listener anders, also, gib ihm eine andere Prefix - so etwas wie "Test123_". Vielleicht wird der Name "sel_change" bereits intern irgendwie genutzt - das könnte dann zu Konflikten führen. Einen Versuch wäre es wert Viele Grüße Thomas Am 08.09.2022 um 20:50 schrieb Stefan Deutsch: Hi Thomas, Hier mal die letzten Zeilen des Makros, in dem das GridControl mit Inhalt gefüllt wird. Soweit ich das sehe, hab ich das vom Ablauf gemacht wie du in deinem Beispiel. oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oKommDia.addControl("GridAnzeigeKommission", oGridControl) oGridDataModel = oKommDia.Model.getByName("GridAnzeigeKommission").GridDataModel 'Run this macro to start event intercepting sPrefix = "sel_change_" sService = "com.sun.star.awt.grid.XGridSelectionListener" 'Create a listener to intercept the selection change events vSelChangeListener = CreateUnoListener(sPrefix, sService) 'Register the listener to the document controller oGridControl.addSelectionListener(vSelChangeListener) iData = oGridDataModel.getCellData(3, iRowAktuell) oKommDia.getControl("nf_ausgefasst").Value = iData oKommDia.Controls(7).deselectAllRows oKommDia.Controls(7).selectRow(iRowAktuell) oKommDia.execute() End Sub Und hier die beiden Subs. disposing wird auch ausgeführt, wenn ich den Dialog über das X beende. Sub sel_change_disposing(vEvent) print 21 End Sub Sub sel_change_selectionChanged(vEvent) Dim vCurrentSelection As Object vCurrentSelection = vEvent.source.CurrentRow MsgBox "Selected Row = " & vEvent.source.CurrentRow print 27 End Sub Allerdings ist mir auch aufgefallen, dass ein Print, dass ich hinter die Zeile oKommDia.execute() setze, erst ausgeführt wird, wenn ich den Dialog beende. Könnte es damit zusammenhängen, dass der Dialog die anderen im aufrufenden Formular blockiert? Schönen Abend noch! Stefan Am 08.09.2022 um 20:07 schrieb Thomas Krumbein: Hey Stefan, tia, wie meldest Du den Listner denn an? Codeschnipsel? Er muss am Gridelement angemeldet werden, nachdem das Model zugewiesen wurde: oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) Dies als Beispiel. Du brauchst dann mindestens noch die zwei Funktionen ' ' REM Listener Funktionen Sub ReAblSelection_selectionChanged(oEvt) dim aDSatz() If bAblFlag Then bAblFlag = false Exit sub End if 'MsgBox "Markierte Zeile: " & oEvt.source.CurrentRow aDSatz = oRaDlg.getControl("tab_g1").model.GridDataModel.getRowData(oRaDlg.getControl("tab_g1").getCurrentRow) REM Rechnungsdatendetails lesen und Eintragen AbgleichEinzelRechnung(aDSatz()) End Sub Sub ReAblSelection_disposing(oEvt) End Sub Es wird immer die komplette Zeile zurückgeliefert - die weitere Auswahl liegt dann an Dir bzw. dem Code Vielleicht hilft es :) Viele Grüße Thomas Am 08.09.2022 um 19:49 schrieb Stefan Deutsch: Guten Abend, Ich verwende gerade das erste Mal einen Listener in einem Makro. Und zwar hab ich einen Dialog, das ein GridControl enthält. Dies kann man zwar einzeichnen, aber muss es ja im Makro zum Leben erwecken. Das klappt auch soweit. Jetzt wollte ich einen Listener hinzufügen, der auf SelectionChange anschlägt. Diesen hab ich in dem Objekt angemeldet, das das UnoControlGrid enthält. Das hat auch geklappt (bzw. es kommt keine Fehlermeldung). Allerdings wird mein Sub sel_change_selectionChanged(vEvent) nie ausgelöst, egal, wie viel ich in der Tabelle rumklicke. Hat jemand einen HInweis für mich? Viele Grüße Stefan -- Diese E-Mail wurde von Avast-Antivirussoftware auf Viren geprüft. www.avast.com -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Listener im Dialog benutzen
Hey Stefan, jo, sieht gut aus. Das mit dem Print nach dem Execute() Befehlt ist normal. Das Makro bleibt bei execute() stehen und läuft erst weiter, wenn der Dialog wieder geschlossen wird. Das ist also alles korrekt. Wenn es keine anderen Fehler gibt oder ich die nicht sehe, versuche mal folgendes: Benenne den Listener anders, also, gib ihm eine andere Prefix - so etwas wie "Test123_". Vielleicht wird der Name "sel_change" bereits intern irgendwie genutzt - das könnte dann zu Konflikten führen. Einen Versuch wäre es wert Viele Grüße Thomas Am 08.09.2022 um 20:50 schrieb Stefan Deutsch: Hi Thomas, Hier mal die letzten Zeilen des Makros, in dem das GridControl mit Inhalt gefüllt wird. Soweit ich das sehe, hab ich das vom Ablauf gemacht wie du in deinem Beispiel. oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oKommDia.addControl("GridAnzeigeKommission", oGridControl) oGridDataModel = oKommDia.Model.getByName("GridAnzeigeKommission").GridDataModel 'Run this macro to start event intercepting sPrefix = "sel_change_" sService = "com.sun.star.awt.grid.XGridSelectionListener" 'Create a listener to intercept the selection change events vSelChangeListener = CreateUnoListener(sPrefix, sService) 'Register the listener to the document controller oGridControl.addSelectionListener(vSelChangeListener) iData = oGridDataModel.getCellData(3, iRowAktuell) oKommDia.getControl("nf_ausgefasst").Value = iData oKommDia.Controls(7).deselectAllRows oKommDia.Controls(7).selectRow(iRowAktuell) oKommDia.execute() End Sub Und hier die beiden Subs. disposing wird auch ausgeführt, wenn ich den Dialog über das X beende. Sub sel_change_disposing(vEvent) print 21 End Sub Sub sel_change_selectionChanged(vEvent) Dim vCurrentSelection As Object vCurrentSelection = vEvent.source.CurrentRow MsgBox "Selected Row = " & vEvent.source.CurrentRow print 27 End Sub Allerdings ist mir auch aufgefallen, dass ein Print, dass ich hinter die Zeile oKommDia.execute() setze, erst ausgeführt wird, wenn ich den Dialog beende. Könnte es damit zusammenhängen, dass der Dialog die anderen im aufrufenden Formular blockiert? Schönen Abend noch! Stefan Am 08.09.2022 um 20:07 schrieb Thomas Krumbein: Hey Stefan, tia, wie meldest Du den Listner denn an? Codeschnipsel? Er muss am Gridelement angemeldet werden, nachdem das Model zugewiesen wurde: oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) Dies als Beispiel. Du brauchst dann mindestens noch die zwei Funktionen ' ' REM Listener Funktionen Sub ReAblSelection_selectionChanged(oEvt) dim aDSatz() If bAblFlag Then bAblFlag = false Exit sub End if 'MsgBox "Markierte Zeile: " & oEvt.source.CurrentRow aDSatz = oRaDlg.getControl("tab_g1").model.GridDataModel.getRowData(oRaDlg.getControl("tab_g1").getCurrentRow) REM Rechnungsdatendetails lesen und Eintragen AbgleichEinzelRechnung(aDSatz()) End Sub Sub ReAblSelection_disposing(oEvt) End Sub Es wird immer die komplette Zeile zurückgeliefert - die weitere Auswahl liegt dann an Dir bzw. dem Code Vielleicht hilft es :) Viele Grüße Thomas Am 08.09.2022 um 19:49 schrieb Stefan Deutsch: Guten Abend, Ich verwende gerade das erste Mal einen Listener in einem Makro. Und zwar hab ich einen Dialog, das ein GridControl enthält. Dies kann man zwar einzeichnen, aber muss es ja im Makro zum Leben erwecken. Das klappt auch soweit. Jetzt wollte ich einen Listener hinzufügen, der auf SelectionChange anschlägt. Diesen hab ich in dem Objekt angemeldet, das das UnoControlGrid enthält. Das hat auch geklappt (bzw. es kommt keine Fehlermeldung). Allerdings wird mein Sub sel_change_selectionChanged(vEvent) nie ausgelöst, egal, wie viel ich in der Tabelle rumklicke. Hat jemand einen HInweis für mich? Viele Grüße Stefan -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Listener im Dialog benutzen
Hi Thomas, Hier mal die letzten Zeilen des Makros, in dem das GridControl mit Inhalt gefüllt wird. Soweit ich das sehe, hab ich das vom Ablauf gemacht wie du in deinem Beispiel. oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oKommDia.addControl("GridAnzeigeKommission", oGridControl) oGridDataModel = oKommDia.Model.getByName("GridAnzeigeKommission").GridDataModel 'Run this macro to start event intercepting sPrefix = "sel_change_" sService = "com.sun.star.awt.grid.XGridSelectionListener" 'Create a listener to intercept the selection change events vSelChangeListener = CreateUnoListener(sPrefix, sService) 'Register the listener to the document controller oGridControl.addSelectionListener(vSelChangeListener) iData = oGridDataModel.getCellData(3, iRowAktuell) oKommDia.getControl("nf_ausgefasst").Value = iData oKommDia.Controls(7).deselectAllRows oKommDia.Controls(7).selectRow(iRowAktuell) oKommDia.execute() End Sub Und hier die beiden Subs. disposing wird auch ausgeführt, wenn ich den Dialog über das X beende. Sub sel_change_disposing(vEvent) print 21 End Sub Sub sel_change_selectionChanged(vEvent) Dim vCurrentSelection As Object vCurrentSelection = vEvent.source.CurrentRow MsgBox "Selected Row = " & vEvent.source.CurrentRow print 27 End Sub Allerdings ist mir auch aufgefallen, dass ein Print, dass ich hinter die Zeile oKommDia.execute() setze, erst ausgeführt wird, wenn ich den Dialog beende. Könnte es damit zusammenhängen, dass der Dialog die anderen im aufrufenden Formular blockiert? Schönen Abend noch! Stefan Am 08.09.2022 um 20:07 schrieb Thomas Krumbein: Hey Stefan, tia, wie meldest Du den Listner denn an? Codeschnipsel? Er muss am Gridelement angemeldet werden, nachdem das Model zugewiesen wurde: oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) Dies als Beispiel. Du brauchst dann mindestens noch die zwei Funktionen ' ' REM Listener Funktionen Sub ReAblSelection_selectionChanged(oEvt) dim aDSatz() If bAblFlag Then bAblFlag = false Exit sub End if 'MsgBox "Markierte Zeile: " & oEvt.source.CurrentRow aDSatz = oRaDlg.getControl("tab_g1").model.GridDataModel.getRowData(oRaDlg.getControl("tab_g1").getCurrentRow) REM Rechnungsdatendetails lesen und Eintragen AbgleichEinzelRechnung(aDSatz()) End Sub Sub ReAblSelection_disposing(oEvt) End Sub Es wird immer die komplette Zeile zurückgeliefert - die weitere Auswahl liegt dann an Dir bzw. dem Code Vielleicht hilft es :) Viele Grüße Thomas Am 08.09.2022 um 19:49 schrieb Stefan Deutsch: Guten Abend, Ich verwende gerade das erste Mal einen Listener in einem Makro. Und zwar hab ich einen Dialog, das ein GridControl enthält. Dies kann man zwar einzeichnen, aber muss es ja im Makro zum Leben erwecken. Das klappt auch soweit. Jetzt wollte ich einen Listener hinzufügen, der auf SelectionChange anschlägt. Diesen hab ich in dem Objekt angemeldet, das das UnoControlGrid enthält. Das hat auch geklappt (bzw. es kommt keine Fehlermeldung). Allerdings wird mein Sub sel_change_selectionChanged(vEvent) nie ausgelöst, egal, wie viel ich in der Tabelle rumklicke. Hat jemand einen HInweis für mich? Viele Grüße Stefan -- Diese E-Mail wurde von Avast-Antivirussoftware auf Viren geprüft. www.avast.com -- Diese E-Mail wurde von Avast-Antivirussoftware auf Viren geprüft. www.avast.com -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Listener im Dialog benutzen
Hallo Stefan, Ich verwende gerade das erste Mal einen Listener in einem Makro. Und zwar hab ich einen Dialog, das ein GridControl enthält. Dies kann man zwar einzeichnen, aber muss es ja im Makro zum Leben erwecken. Das klappt auch soweit. Jetzt wollte ich einen Listener hinzufügen, der auf SelectionChange anschlägt. Diesen hab ich in dem Objekt angemeldet, das das UnoControlGrid enthält. Das hat auch geklappt (bzw. es kommt keine Fehlermeldung). Allerdings wird mein Sub sel_change_selectionChanged(vEvent) nie ausgelöst, egal, wie viel ich in der Tabelle rumklicke. Hat jemand einen HInweis für mich? Schau einmal im Base-Handbuch Dialog zum Bearbeiten von Daten aus einer Tabellenübersicht (S. 572 ff im aktuellen Handbuch 7.4) Da habe ich das Feld genutzt, um markierte Datensätze zu lesen und bearbeitete Datensätze wieder ein zu fügen. Muss irgendwie so etwas sein wie oGrid = oEvent.Source IF oGrid.hasSelectedRows THEN … Das Ganze liegt dem Handbuch auch als "Beispiel_Dialoge.odb" bei. Gruß Robert -- Homepage: https://www.familiegrosskopf.de/robert -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
Re: [de-users] Listener im Dialog benutzen
Hey Stefan, tia, wie meldest Du den Listner denn an? Codeschnipsel? Er muss am Gridelement angemeldet werden, nachdem das Model zugewiesen wurde: oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) Dies als Beispiel. Du brauchst dann mindestens noch die zwei Funktionen ' ' REM Listener Funktionen Sub ReAblSelection_selectionChanged(oEvt) dim aDSatz() If bAblFlag Then bAblFlag = false Exit sub End if 'MsgBox "Markierte Zeile: " & oEvt.source.CurrentRow aDSatz = oRaDlg.getControl("tab_g1").model.GridDataModel.getRowData(oRaDlg.getControl("tab_g1").getCurrentRow) REM Rechnungsdatendetails lesen und Eintragen AbgleichEinzelRechnung(aDSatz()) End Sub Sub ReAblSelection_disposing(oEvt) End Sub Es wird immer die komplette Zeile zurückgeliefert - die weitere Auswahl liegt dann an Dir bzw. dem Code Vielleicht hilft es :) Viele Grüße Thomas Am 08.09.2022 um 19:49 schrieb Stefan Deutsch: Guten Abend, Ich verwende gerade das erste Mal einen Listener in einem Makro. Und zwar hab ich einen Dialog, das ein GridControl enthält. Dies kann man zwar einzeichnen, aber muss es ja im Makro zum Leben erwecken. Das klappt auch soweit. Jetzt wollte ich einen Listener hinzufügen, der auf SelectionChange anschlägt. Diesen hab ich in dem Objekt angemeldet, das das UnoControlGrid enthält. Das hat auch geklappt (bzw. es kommt keine Fehlermeldung). Allerdings wird mein Sub sel_change_selectionChanged(vEvent) nie ausgelöst, egal, wie viel ich in der Tabelle rumklicke. Hat jemand einen HInweis für mich? Viele Grüße Stefan -- Diese E-Mail wurde von Avast-Antivirussoftware auf Viren geprüft. www.avast.com -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy
[de-users] Listener im Dialog benutzen
Guten Abend, Ich verwende gerade das erste Mal einen Listener in einem Makro. Und zwar hab ich einen Dialog, das ein GridControl enthält. Dies kann man zwar einzeichnen, aber muss es ja im Makro zum Leben erwecken. Das klappt auch soweit. Jetzt wollte ich einen Listener hinzufügen, der auf SelectionChange anschlägt. Diesen hab ich in dem Objekt angemeldet, das das UnoControlGrid enthält. Das hat auch geklappt (bzw. es kommt keine Fehlermeldung). Allerdings wird mein Sub sel_change_selectionChanged(vEvent) nie ausgelöst, egal, wie viel ich in der Tabelle rumklicke. Hat jemand einen HInweis für mich? Viele Grüße Stefan -- Diese E-Mail wurde von Avast-Antivirussoftware auf Viren geprüft. www.avast.com -- Liste abmelden mit E-Mail an: users+unsubscr...@de.libreoffice.org Probleme? https://de.libreoffice.org/hilfe-kontakt/mailing-listen/abmeldung-liste/ Tipps zu Listenmails: https://wiki.documentfoundation.org/Netiquette/de Listenarchiv: https://listarchives.libreoffice.org/de/users/ Datenschutzerklärung: https://www.documentfoundation.org/privacy