Re: [de-users] Listener im Dialog benutzen
HI Thomas, hab den Fehler gefunden. Ich hab mein GridModel mit oGridModel = oKommDia.Model.getByName("GridAnzeigeKommission") erstellt, du mit oGridModel = oDlg.Model.createInstance("com.sun.star.awt.grid.UnoControlGridModel"). Wenn ich das in meinem Code ändere, schlägt der Listener an. Muss noch ein bisschen was anpassen, dann sollte mein Code klappen. Danke für die Unterstützung! Stefan Am 10.09.2022 um 13:09 schrieb Stefan Deutsch: Danke Thomas, deine Tabelle klappt ohne Probleme. Ich werd nochmal drüber brüten, was da genau anders ist und melde mich, wenn ich den Fehler gefunden hab. Viele Grüße Stefan Am 10.09.2022 um 12:55 schrieb Thomas Krumbein: Hei Stefan, also ich weiss nicht. Ich schicke Dir mal direkt eine Calc-Datei in die ich gerade den Listener eingebaut habe - gibt lediglich die msgbox mit der markierten Zeile aus - funktioniert bei mir (Win 10) problemlos. Wenn die bei Dir auch nicht geht... dann haste ne Problem;)) Viele Grüße Thomas Am 10.09.2022 um 12:42 schrieb Stefan Deutsch: Hi Thomas, war unsinnige Frage von mir. Du hast das in deinem Buch ja ausführlich erklärt. Hab den Listener jetzt erst direkt vor dem execute zugefügt. Dann hab ich aus dem Sub einfach mal alles rausgeschmissen und eine einzige Tabellenzeile händisch befüllt und den Dialog nicht mehr über ein anderes Sub sondern direkt mit Button aufgerufen. Am Verhalten ändert sich nichts. Jetzt wollte ich es gerade unter Knopix testen, um auszuschließen, ob es nicht am Windows-Betriebssystem liegt. Leider fehlt da der Datenbanktreiber. Wär einer der Linux-User bereit, die Datenbank mal kurz zu testen? Viele Grüße Stefan Am 09.09.2022 um 21:55 schrieb Thomas Krumbein: Hei Stefan, ja, ich nutze den Listener problemlos. Ich habe einen großen Dialog, das Gridelement wird über eine Datenbank gefüllt. Der Dialog mit execute() ausgeführt. Teil des Codes hatte ich ja gepostet. Der Listener reagiert korrekt, liefert den angeklickten Datensatz zurück (der kommt dann in einen neuen Dialog für Weiterverarbeitung) - der Hauptdialog bleibt bestehen. Also, das funktioniert alles problemlos. Im Grunde sieht Dein Code ziemlich ähnlich aus. Es gibt noch einen Unterschied... Versuch könnte es wert sein: Mein Listener wird ganz zum Schluss registriert - nach dem kompletten Zusammenbau des Grids: ... oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Größe und Position vom Rahmen frm_tab With oRaDlg.getControl("frm_tab").getPosSize() oGridControl.setPosSize(.X,.Y,.Width,.Height, com.sun.star.awt.PosSize.POSSIZE) End with REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) oRADlg.execute() Bei Dir änderst Du nach dem Registrieren des Listeners noch etwas am Grid - das könnte den Listener schon auslösen! Ich ändere nach der Auswahl eines Datensatzes ebenfalls den Datensatz - in dem Fall wird der listener ebenfalls ausgelöst - was ich aber nicht brauchen kann. Da arbeite ich mit Flags. Aber das ist zunächst nicht wirklich wichtig - noch testest Du ja nur;) Also, bei mir funktioniert es über alle Versionen (seit etwa 4.6 oder so) - bin allerdings derzeit noch bei der 7.0.2.2 - vielleicht liegt es an Deiner Version? Viele Grüße Thomas Am 09.09.2022 um 21:04 schrieb Stefan Deutsch: Hi Thomas, nein ich habe keine Fehlermeldungen unterdrückt. Hab auch einfach mal alles auskommentiert, außer den Print. Aber der kommt auch nicht. Hast du denn mal einen Listener in einem Dialog genutzt, der über excute ausgeführt wird? Mich macht halt stutzig, dass disposing ausgeführt wird, wenn ich den Dialog beende. Hab ebend auch mal den Dialog über setVisible mit wait ausgeführt. Das ändert aber nichts. Vielleicht fällt mir morgen noch was ein, sonst werde ich mal den Weg versuchen, den Robert im Handbuch beschreibt. 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
Danke Thomas, deine Tabelle klappt ohne Probleme. Ich werd nochmal drüber brüten, was da genau anders ist und melde mich, wenn ich den Fehler gefunden hab. Viele Grüße Stefan Am 10.09.2022 um 12:55 schrieb Thomas Krumbein: Hei Stefan, also ich weiss nicht. Ich schicke Dir mal direkt eine Calc-Datei in die ich gerade den Listener eingebaut habe - gibt lediglich die msgbox mit der markierten Zeile aus - funktioniert bei mir (Win 10) problemlos. Wenn die bei Dir auch nicht geht... dann haste ne Problem;)) Viele Grüße Thomas Am 10.09.2022 um 12:42 schrieb Stefan Deutsch: Hi Thomas, war unsinnige Frage von mir. Du hast das in deinem Buch ja ausführlich erklärt. Hab den Listener jetzt erst direkt vor dem execute zugefügt. Dann hab ich aus dem Sub einfach mal alles rausgeschmissen und eine einzige Tabellenzeile händisch befüllt und den Dialog nicht mehr über ein anderes Sub sondern direkt mit Button aufgerufen. Am Verhalten ändert sich nichts. Jetzt wollte ich es gerade unter Knopix testen, um auszuschließen, ob es nicht am Windows-Betriebssystem liegt. Leider fehlt da der Datenbanktreiber. Wär einer der Linux-User bereit, die Datenbank mal kurz zu testen? Viele Grüße Stefan Am 09.09.2022 um 21:55 schrieb Thomas Krumbein: Hei Stefan, ja, ich nutze den Listener problemlos. Ich habe einen großen Dialog, das Gridelement wird über eine Datenbank gefüllt. Der Dialog mit execute() ausgeführt. Teil des Codes hatte ich ja gepostet. Der Listener reagiert korrekt, liefert den angeklickten Datensatz zurück (der kommt dann in einen neuen Dialog für Weiterverarbeitung) - der Hauptdialog bleibt bestehen. Also, das funktioniert alles problemlos. Im Grunde sieht Dein Code ziemlich ähnlich aus. Es gibt noch einen Unterschied... Versuch könnte es wert sein: Mein Listener wird ganz zum Schluss registriert - nach dem kompletten Zusammenbau des Grids: ... oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Größe und Position vom Rahmen frm_tab With oRaDlg.getControl("frm_tab").getPosSize() oGridControl.setPosSize(.X,.Y,.Width,.Height, com.sun.star.awt.PosSize.POSSIZE) End with REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) oRADlg.execute() Bei Dir änderst Du nach dem Registrieren des Listeners noch etwas am Grid - das könnte den Listener schon auslösen! Ich ändere nach der Auswahl eines Datensatzes ebenfalls den Datensatz - in dem Fall wird der listener ebenfalls ausgelöst - was ich aber nicht brauchen kann. Da arbeite ich mit Flags. Aber das ist zunächst nicht wirklich wichtig - noch testest Du ja nur;) Also, bei mir funktioniert es über alle Versionen (seit etwa 4.6 oder so) - bin allerdings derzeit noch bei der 7.0.2.2 - vielleicht liegt es an Deiner Version? Viele Grüße Thomas Am 09.09.2022 um 21:04 schrieb Stefan Deutsch: Hi Thomas, nein ich habe keine Fehlermeldungen unterdrückt. Hab auch einfach mal alles auskommentiert, außer den Print. Aber der kommt auch nicht. Hast du denn mal einen Listener in einem Dialog genutzt, der über excute ausgeführt wird? Mich macht halt stutzig, dass disposing ausgeführt wird, wenn ich den Dialog beende. Hab ebend auch mal den Dialog über setVisible mit wait ausgeführt. Das ändert aber nichts. Vielleicht fällt mir morgen noch was ein, sonst werde ich mal den Weg versuchen, den Robert im Handbuch beschreibt. 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
Hei Stefan, also ich weiss nicht. Ich schicke Dir mal direkt eine Calc-Datei in die ich gerade den Listener eingebaut habe - gibt lediglich die msgbox mit der markierten Zeile aus - funktioniert bei mir (Win 10) problemlos. Wenn die bei Dir auch nicht geht... dann haste ne Problem;)) Viele Grüße Thomas Am 10.09.2022 um 12:42 schrieb Stefan Deutsch: Hi Thomas, war unsinnige Frage von mir. Du hast das in deinem Buch ja ausführlich erklärt. Hab den Listener jetzt erst direkt vor dem execute zugefügt. Dann hab ich aus dem Sub einfach mal alles rausgeschmissen und eine einzige Tabellenzeile händisch befüllt und den Dialog nicht mehr über ein anderes Sub sondern direkt mit Button aufgerufen. Am Verhalten ändert sich nichts. Jetzt wollte ich es gerade unter Knopix testen, um auszuschließen, ob es nicht am Windows-Betriebssystem liegt. Leider fehlt da der Datenbanktreiber. Wär einer der Linux-User bereit, die Datenbank mal kurz zu testen? Viele Grüße Stefan Am 09.09.2022 um 21:55 schrieb Thomas Krumbein: Hei Stefan, ja, ich nutze den Listener problemlos. Ich habe einen großen Dialog, das Gridelement wird über eine Datenbank gefüllt. Der Dialog mit execute() ausgeführt. Teil des Codes hatte ich ja gepostet. Der Listener reagiert korrekt, liefert den angeklickten Datensatz zurück (der kommt dann in einen neuen Dialog für Weiterverarbeitung) - der Hauptdialog bleibt bestehen. Also, das funktioniert alles problemlos. Im Grunde sieht Dein Code ziemlich ähnlich aus. Es gibt noch einen Unterschied... Versuch könnte es wert sein: Mein Listener wird ganz zum Schluss registriert - nach dem kompletten Zusammenbau des Grids: ... oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Größe und Position vom Rahmen frm_tab With oRaDlg.getControl("frm_tab").getPosSize() oGridControl.setPosSize(.X,.Y,.Width,.Height, com.sun.star.awt.PosSize.POSSIZE) End with REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) oRADlg.execute() Bei Dir änderst Du nach dem Registrieren des Listeners noch etwas am Grid - das könnte den Listener schon auslösen! Ich ändere nach der Auswahl eines Datensatzes ebenfalls den Datensatz - in dem Fall wird der listener ebenfalls ausgelöst - was ich aber nicht brauchen kann. Da arbeite ich mit Flags. Aber das ist zunächst nicht wirklich wichtig - noch testest Du ja nur;) Also, bei mir funktioniert es über alle Versionen (seit etwa 4.6 oder so) - bin allerdings derzeit noch bei der 7.0.2.2 - vielleicht liegt es an Deiner Version? Viele Grüße Thomas Am 09.09.2022 um 21:04 schrieb Stefan Deutsch: Hi Thomas, nein ich habe keine Fehlermeldungen unterdrückt. Hab auch einfach mal alles auskommentiert, außer den Print. Aber der kommt auch nicht. Hast du denn mal einen Listener in einem Dialog genutzt, der über excute ausgeführt wird? Mich macht halt stutzig, dass disposing ausgeführt wird, wenn ich den Dialog beende. Hab ebend auch mal den Dialog über setVisible mit wait ausgeführt. Das ändert aber nichts. Vielleicht fällt mir morgen noch was ein, sonst werde ich mal den Weg versuchen, den Robert im Handbuch beschreibt. 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, war unsinnige Frage von mir. Du hast das in deinem Buch ja ausführlich erklärt. Hab den Listener jetzt erst direkt vor dem execute zugefügt. Dann hab ich aus dem Sub einfach mal alles rausgeschmissen und eine einzige Tabellenzeile händisch befüllt und den Dialog nicht mehr über ein anderes Sub sondern direkt mit Button aufgerufen. Am Verhalten ändert sich nichts. Jetzt wollte ich es gerade unter Knopix testen, um auszuschließen, ob es nicht am Windows-Betriebssystem liegt. Leider fehlt da der Datenbanktreiber. Wär einer der Linux-User bereit, die Datenbank mal kurz zu testen? Viele Grüße Stefan Am 09.09.2022 um 21:55 schrieb Thomas Krumbein: Hei Stefan, ja, ich nutze den Listener problemlos. Ich habe einen großen Dialog, das Gridelement wird über eine Datenbank gefüllt. Der Dialog mit execute() ausgeführt. Teil des Codes hatte ich ja gepostet. Der Listener reagiert korrekt, liefert den angeklickten Datensatz zurück (der kommt dann in einen neuen Dialog für Weiterverarbeitung) - der Hauptdialog bleibt bestehen. Also, das funktioniert alles problemlos. Im Grunde sieht Dein Code ziemlich ähnlich aus. Es gibt noch einen Unterschied... Versuch könnte es wert sein: Mein Listener wird ganz zum Schluss registriert - nach dem kompletten Zusammenbau des Grids: ... oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Größe und Position vom Rahmen frm_tab With oRaDlg.getControl("frm_tab").getPosSize() oGridControl.setPosSize(.X,.Y,.Width,.Height, com.sun.star.awt.PosSize.POSSIZE) End with REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) oRADlg.execute() Bei Dir änderst Du nach dem Registrieren des Listeners noch etwas am Grid - das könnte den Listener schon auslösen! Ich ändere nach der Auswahl eines Datensatzes ebenfalls den Datensatz - in dem Fall wird der listener ebenfalls ausgelöst - was ich aber nicht brauchen kann. Da arbeite ich mit Flags. Aber das ist zunächst nicht wirklich wichtig - noch testest Du ja nur;) Also, bei mir funktioniert es über alle Versionen (seit etwa 4.6 oder so) - bin allerdings derzeit noch bei der 7.0.2.2 - vielleicht liegt es an Deiner Version? Viele Grüße Thomas Am 09.09.2022 um 21:04 schrieb Stefan Deutsch: Hi Thomas, nein ich habe keine Fehlermeldungen unterdrückt. Hab auch einfach mal alles auskommentiert, außer den Print. Aber der kommt auch nicht. Hast du denn mal einen Listener in einem Dialog genutzt, der über excute ausgeführt wird? Mich macht halt stutzig, dass disposing ausgeführt wird, wenn ich den Dialog beende. Hab ebend auch mal den Dialog über setVisible mit wait ausgeführt. Das ändert aber nichts. Vielleicht fällt mir morgen noch was ein, sonst werde ich mal den Weg versuchen, den Robert im Handbuch beschreibt. 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
Hei Stefan, ja, ich nutze den Listener problemlos. Ich habe einen großen Dialog, das Gridelement wird über eine Datenbank gefüllt. Der Dialog mit execute() ausgeführt. Teil des Codes hatte ich ja gepostet. Der Listener reagiert korrekt, liefert den angeklickten Datensatz zurück (der kommt dann in einen neuen Dialog für Weiterverarbeitung) - der Hauptdialog bleibt bestehen. Also, das funktioniert alles problemlos. Im Grunde sieht Dein Code ziemlich ähnlich aus. Es gibt noch einen Unterschied... Versuch könnte es wert sein: Mein Listener wird ganz zum Schluss registriert - nach dem kompletten Zusammenbau des Grids: ... oGridControl = createUnoService("com.sun.star.awt.grid.UnoControlGrid") oGridControl.setModel(oGridModel) oRaDlg.addControl("tab_g1", oGridControl) REM Größe und Position vom Rahmen frm_tab With oRaDlg.getControl("frm_tab").getPosSize() oGridControl.setPosSize(.X,.Y,.Width,.Height, com.sun.star.awt.PosSize.POSSIZE) End with REM Selection Listener erzeugen oReAbgLis = CreateUnoListener("ReAblSelection_", "com.sun.star.awt.grid.XGridSelectionListener") oGridControl.addSelectionListener(oReAbgLis) oRADlg.execute() Bei Dir änderst Du nach dem Registrieren des Listeners noch etwas am Grid - das könnte den Listener schon auslösen! Ich ändere nach der Auswahl eines Datensatzes ebenfalls den Datensatz - in dem Fall wird der listener ebenfalls ausgelöst - was ich aber nicht brauchen kann. Da arbeite ich mit Flags. Aber das ist zunächst nicht wirklich wichtig - noch testest Du ja nur;) Also, bei mir funktioniert es über alle Versionen (seit etwa 4.6 oder so) - bin allerdings derzeit noch bei der 7.0.2.2 - vielleicht liegt es an Deiner Version? Viele Grüße Thomas Am 09.09.2022 um 21:04 schrieb Stefan Deutsch: Hi Thomas, nein ich habe keine Fehlermeldungen unterdrückt. Hab auch einfach mal alles auskommentiert, außer den Print. Aber der kommt auch nicht. Hast du denn mal einen Listener in einem Dialog genutzt, der über excute ausgeführt wird? Mich macht halt stutzig, dass disposing ausgeführt wird, wenn ich den Dialog beende. Hab ebend auch mal den Dialog über setVisible mit wait ausgeführt. Das ändert aber nichts. Vielleicht fällt mir morgen noch was ein, sonst werde ich mal den Weg versuchen, den Robert im Handbuch beschreibt. 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, nein ich habe keine Fehlermeldungen unterdrückt. Hab auch einfach mal alles auskommentiert, außer den Print. Aber der kommt auch nicht. Hast du denn mal einen Listener in einem Dialog genutzt, der über excute ausgeführt wird? Mich macht halt stutzig, dass disposing ausgeführt wird, wenn ich den Dialog beende. Hab ebend auch mal den Dialog über setVisible mit wait ausgeführt. Das ändert aber nichts. Vielleicht fällt mir morgen noch was ein, sonst werde ich mal den Weg versuchen, den Robert im Handbuch beschreibt. Viele Grüße Stefan Am 09.09.2022 um 16:41 schrieb Thomas Krumbein: Hey Stefan, vielleicht liegt der Fehler ganz woanders? Hast Du evt im Makro irgendwo Basic-Fehlermeldungen unterdrückt? so etwas wie .. on error resume next oder so? In dem Code Sub sel_change_selectionChanged(vEvent) Dim vCurrentSelection As Object vCurrentSelection = vEvent.source.CurrentRow MsgBox "Selected Row = " & vEvent.source.CurrentRow print 27 End Sub zumindest dürfte das mit dem vCurrentSelection nicht funktionieren. Die Variable ist als Objekt definiert, die Zuweisung liefert aber einen Long-Wert zurück. Sollte eigentlich ne Basic-Fehler ergeben und somit einen Stop des Makros. Kommentiere mal die beiden Zeilen "Dim..." und "vCurrentSelection" aus. Die Zeile mit der msgbox müsste eigentlich funktioniern. Viele Grüße Thomas Am 09.09.2022 um 10:30 schrieb Stefan Deutsch: Hi Thomas, ich hab es sowohl als Global als auch mit Public probiert. Sie stehen auch als erstes in dem Modul. Das kuriose ist ja, dass der disposing anschlägt, wenn ich den Dialog über das Kreuz schließe. Ich hab Präfix auch nochmal geändert in myselChange_. Das sollte wirklich eindeutig sein. Werde später nochmal eine andere LiBo-Version ausprobieren, ob es daran liegt. Viele Grüße Stefan [..] 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 [..] -- 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, vielleicht liegt der Fehler ganz woanders? Hast Du evt im Makro irgendwo Basic-Fehlermeldungen unterdrückt? so etwas wie .. on error resume next oder so? In dem Code Sub sel_change_selectionChanged(vEvent) Dim vCurrentSelection As Object vCurrentSelection = vEvent.source.CurrentRow MsgBox "Selected Row = " & vEvent.source.CurrentRow print 27 End Sub zumindest dürfte das mit dem vCurrentSelection nicht funktionieren. Die Variable ist als Objekt definiert, die Zuweisung liefert aber einen Long-Wert zurück. Sollte eigentlich ne Basic-Fehler ergeben und somit einen Stop des Makros. Kommentiere mal die beiden Zeilen "Dim..." und "vCurrentSelection" aus. Die Zeile mit der msgbox müsste eigentlich funktioniern. Viele Grüße Thomas Am 09.09.2022 um 10:30 schrieb Stefan Deutsch: Hi Thomas, ich hab es sowohl als Global als auch mit Public probiert. Sie stehen auch als erstes in dem Modul. Das kuriose ist ja, dass der disposing anschlägt, wenn ich den Dialog über das Kreuz schließe. Ich hab Präfix auch nochmal geändert in myselChange_. Das sollte wirklich eindeutig sein. Werde später nochmal eine andere LiBo-Version ausprobieren, ob es daran liegt. Viele Grüße Stefan [..] 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 [..] -- 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, ich hab es sowohl als Global als auch mit Public probiert. Sie stehen auch als erstes in dem Modul. Das kuriose ist ja, dass der disposing anschlägt, wenn ich den Dialog über das Kreuz schließe. Ich hab Präfix auch nochmal geändert in myselChange_. Das sollte wirklich eindeutig sein. Werde später nochmal eine andere LiBo-Version ausprobieren, ob es daran liegt. Viele Grüße Stefan Am 09.09.2022 um 07:21 schrieb Thomas Krumbein: 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.
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