von marcel_at_work » Di, 03.01.2017 21:32
- test.jpg (33 KiB) 3499 mal betrachtet
Nabend Mädls,
ich habe mir ein eigenes Listenfeld generiert, da ich in den Zeilen dringend auch ein Checkbox-Element zum Auswählen brauchte.
Mein "Listenfeld" besteht aus 20 Checkbox-Elementen, die je nach "Adjustment" an der rechts angeordneten Bildlaufleiste, durch den wechselnden Index eines zugehörigen Arrays gefüllt werden. Das Ding gefällt mir jetzt wirklich super, nur hätte ich auch gern ein MouseWheel-Event über den Checkbox-"Zeilen"-Elementen und nicht nur per Tastendruck in der Bildlaufleiste selbst.
Weder in der OOo-Doku, noch in verschiedensten LibreOffice-Handbüchern ist dazu irgendetwas zu finden...
Hat vielleicht irgendjemand einen kleinen Gedankenanstoß für mich???
Hier auch mal noch ein Auszug des bisherigen Codes:
Code: Alles auswählen
Option Explicit
Public oQueryAdditives As Object
Public oQueryAdditiveGroups As Object
Public oQueryAdditiveGroupsRelations As Object
Public oQueryNutritionValues As Object
Public oQueryNutritionValuesRelations As Object
Public oQueryAllergens AS Object
Public arrAllergens(2, 0) As Variant
'*************************************************************************************************************************************************************
'#openDialogSubstances()
'Die Funktion wechselt zum Step "Zusatzstoffe, Allergene und Nährwertangaben".
'*************************************************************************************************************************************************************
Sub openDialogSubstances()
'Prüffunktion, ob das Makro schon ausgeführt wird
If bIsMakroStarted(oDialog.Model.Step = 6) Then Exit Sub
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Erzeugung und Initialisierung der Datenbankverbindungen
call funcOpenDatabaseConnection(oQueryAdditives)
call funcOpenDatabaseConnection(oQueryAdditiveGroups)
call funcOpenDatabaseConnection(oQueryAdditiveGroupsRelations)
call funcOpenDatabaseConnection(oQueryAllergens)
call funcOpenDatabaseConnection(oQueryNutritionValues)
call funcOpenDatabaseConnection(oQueryNutritionValuesRelations)
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Datenbankabfrage des "Artikelstamms"
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Datenbankabfrage der "Zusatzstoffe"
call funcSetQuery(oQueryAllergens, "SELECT ID, name FROM SUBSTANCES_ALLERGENS ORDER BY name")
Dim n As Integer
n = 0
oQueryAllergens.beforeFirst()
Do While oQueryAllergens.Next()
'Neudimensionierung des Arrays "arrAllergens" und Einlesen der Abfragedaten
Redim Preserve arrAllergens(2, n)
arrAllergens(0, n) = oQueryAllergens.getInt(1)
arrAllergens(1, n) = " enthält " + oQueryAllergens.getString(2)
' arrAllergens(2, n) = ...
n = n + 1
Loop
'Dimensionierung der Checkbox-Ansicht
For n = 1 To 20 'Durchlauf der Checkbox-Elemente
'Falls der Index(n) des Checkbox-Elements auch in der Datenbankabfrage vorhanden ist,...
If n <= oQueryAllergens.RowCount() Then
'... Einlesen von Namen und Zustand
oDialog.getControl("chb6Allergens" & CStr(n)).Model.Label = arrAllergens(1, n - 1)
oDialog.getControl("chb6Allergens" & CStr(n)).Model.State = arrAllergens(2, n - 1)
'und Einblendung der Checkbox
oDialog.getControl("chb6Allergens" & CStr(n)).Model.enableVisible = True
Else
oDialog.getControl("chb6Allergens" & CStr(n)).Model.enableVisible = False '... sonst Ausblendung der Checkbox
End If
Next n
'Dimensionierung der Bildlaufleiste
With oDialog.getControl("scr6Allergens").Model
'Falls es mehr Abfrageergebnisse als Checkbox-Elemente gibt,...
If oQueryAllergens.RowCount() > 20 Then
'... Aktivierung der Bildlaufleiste
.enableVisible = True
.VisibleSize = 25
.ScrollValueMin = 0
.ScrollValueMax = oQueryAllergens.RowCount() - 19 + (.VisibleSize - 1) 'Anpassung der Laufschritte mittels Datenbankabfrage und der Größe der Leistenschaltfläche
.ScrollValue = 0
Else
.enableVisible = False '... sonst Ausblendung der Bildlaufleiste
End If
End With
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Wechsel der Ansicht
oDialog.Title = sSYSTEM_NAME & " [Zusatzstoffe, Allergene und Nährwertangaben]"
oDialog.Model.Step = 6
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Zurücksetzung der Prüfvariable
bMakroStarted = False
End Sub
'*************************************************************************************************************************************************************
'#updateArrAllergens()
'Die Funktion aktualisiert bei Änderung eines Checkbox-Zustandes den zugehörigen Eintrag in "arrAllergens".
'Wichtig: Die Funktion ist sämtlichen Checkbox-Elementen unter dem Event "Status geändert" zugeordnet!
'*************************************************************************************************************************************************************
Sub updateArrAllergens()
'Setzen des Fokus auf das "Hidden-Object": Ausnahmsweise schon VOR der Makro-Prüffunktion, um den Fokuswechsel ohne Zeitverlust auszuführen!
oDialog.getControl("lbl0HiddenFocus").setFocus()
'Prüffunktion, ob das Makro schon ausgeführt wird
If bIsMakroStarted(bMakroStarted) Then Exit Sub
'---------------------------------------------------------------------------------------------------------------------------------------------------------
ThisComponent.lockControllers()
Dim nScrollValue As Integer
Dim n As Integer
nScrollValue = oDialog.getControl("scr6Allergens").Model.ScrollValue
For n = 1 To 20
If n <= oQueryAllergens.RowCount() Then
arrAllergens(2, (nScrollValue + n - 1)) = oDialog.getControl("chb6Allergens" & CStr(n)).Model.State
End If
Next n
ThisComponent.unlockControllers()
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Zurücksetzung der Prüfvariable
bMakroStarted = False
End Sub
'*************************************************************************************************************************************************************
'#updateViewAllergens()
'Die Funktion aktualisiert bei Änderung der Bildlaufleiste sämtliche Checkbox-Elemente.
'Wichtig: Die Funktion ist der Bildlaufleiste unter den Events "Mausbewegung bei Tastendruck" und "Beim Justieren" zugeordnet!
'*************************************************************************************************************************************************************
Sub updateViewAllergens()
'Setzen des Fokus auf das "Hidden-Object": Ausnahmsweise schon VOR der Makro-Prüffunktion, um den Fokuswechsel ohne Zeitverlust auszuführen!
oDialog.getControl("lbl0HiddenFocus").setFocus()
'Prüffunktion, ob das Makro schon ausgeführt wird
If bIsMakroStarted(bMakroStarted) Then Exit Sub
'---------------------------------------------------------------------------------------------------------------------------------------------------------
ThisComponent.lockControllers()
Dim nScrollValue As Integer, n As Integer
nScrollValue = oDialog.getControl("scr6Allergens").Value
For n = 1 To 20
'Falls der durch die Bildlaufleiste generierte Index(n) des Checkbox-Elements auch in der Datenbankabfrage vorhanden ist,...
If n <= oQueryAllergens.RowCount() Then
'... Aktualisierung von Namen und Zustand in der Checkbox-Ansicht
oDialog.getControl("chb6Allergens" & CStr(n)).Model.Label = arrAllergens(1, (nScrollValue + n - 1))
oDialog.getControl("chb6Allergens" & CStr(n)).Model.State = arrAllergens(2, (nScrollValue + n - 1))
End If
Next n
ThisComponent.unlockControllers()
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Zurücksetzung der Prüfvariable
bMakroStarted = False
End Sub
Liebe Grüße,
Marcel
[attachment=0]test.jpg[/attachment]Nabend Mädls, :D
ich habe mir ein eigenes Listenfeld generiert, da ich in den Zeilen dringend auch ein Checkbox-Element zum Auswählen brauchte.
Mein "Listenfeld" besteht aus 20 Checkbox-Elementen, die je nach "Adjustment" an der rechts angeordneten Bildlaufleiste, durch den wechselnden Index eines zugehörigen Arrays gefüllt werden. Das Ding gefällt mir jetzt wirklich super, nur hätte ich auch gern ein MouseWheel-Event über den Checkbox-"Zeilen"-Elementen und nicht nur per Tastendruck in der Bildlaufleiste selbst.
Weder in der OOo-Doku, noch in verschiedensten LibreOffice-Handbüchern ist dazu irgendetwas zu finden... :(
Hat vielleicht irgendjemand einen kleinen Gedankenanstoß für mich???
Hier auch mal noch ein Auszug des bisherigen Codes:
[code]
Option Explicit
Public oQueryAdditives As Object
Public oQueryAdditiveGroups As Object
Public oQueryAdditiveGroupsRelations As Object
Public oQueryNutritionValues As Object
Public oQueryNutritionValuesRelations As Object
Public oQueryAllergens AS Object
Public arrAllergens(2, 0) As Variant
'*************************************************************************************************************************************************************
'#openDialogSubstances()
'Die Funktion wechselt zum Step "Zusatzstoffe, Allergene und Nährwertangaben".
'*************************************************************************************************************************************************************
Sub openDialogSubstances()
'Prüffunktion, ob das Makro schon ausgeführt wird
If bIsMakroStarted(oDialog.Model.Step = 6) Then Exit Sub
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Erzeugung und Initialisierung der Datenbankverbindungen
call funcOpenDatabaseConnection(oQueryAdditives)
call funcOpenDatabaseConnection(oQueryAdditiveGroups)
call funcOpenDatabaseConnection(oQueryAdditiveGroupsRelations)
call funcOpenDatabaseConnection(oQueryAllergens)
call funcOpenDatabaseConnection(oQueryNutritionValues)
call funcOpenDatabaseConnection(oQueryNutritionValuesRelations)
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Datenbankabfrage des "Artikelstamms"
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Datenbankabfrage der "Zusatzstoffe"
call funcSetQuery(oQueryAllergens, "SELECT ID, name FROM SUBSTANCES_ALLERGENS ORDER BY name")
Dim n As Integer
n = 0
oQueryAllergens.beforeFirst()
Do While oQueryAllergens.Next()
'Neudimensionierung des Arrays "arrAllergens" und Einlesen der Abfragedaten
Redim Preserve arrAllergens(2, n)
arrAllergens(0, n) = oQueryAllergens.getInt(1)
arrAllergens(1, n) = " enthält " + oQueryAllergens.getString(2)
' arrAllergens(2, n) = ...
n = n + 1
Loop
'Dimensionierung der Checkbox-Ansicht
For n = 1 To 20 'Durchlauf der Checkbox-Elemente
'Falls der Index(n) des Checkbox-Elements auch in der Datenbankabfrage vorhanden ist,...
If n <= oQueryAllergens.RowCount() Then
'... Einlesen von Namen und Zustand
oDialog.getControl("chb6Allergens" & CStr(n)).Model.Label = arrAllergens(1, n - 1)
oDialog.getControl("chb6Allergens" & CStr(n)).Model.State = arrAllergens(2, n - 1)
'und Einblendung der Checkbox
oDialog.getControl("chb6Allergens" & CStr(n)).Model.enableVisible = True
Else
oDialog.getControl("chb6Allergens" & CStr(n)).Model.enableVisible = False '... sonst Ausblendung der Checkbox
End If
Next n
'Dimensionierung der Bildlaufleiste
With oDialog.getControl("scr6Allergens").Model
'Falls es mehr Abfrageergebnisse als Checkbox-Elemente gibt,...
If oQueryAllergens.RowCount() > 20 Then
'... Aktivierung der Bildlaufleiste
.enableVisible = True
.VisibleSize = 25
.ScrollValueMin = 0
.ScrollValueMax = oQueryAllergens.RowCount() - 19 + (.VisibleSize - 1) 'Anpassung der Laufschritte mittels Datenbankabfrage und der Größe der Leistenschaltfläche
.ScrollValue = 0
Else
.enableVisible = False '... sonst Ausblendung der Bildlaufleiste
End If
End With
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Wechsel der Ansicht
oDialog.Title = sSYSTEM_NAME & " [Zusatzstoffe, Allergene und Nährwertangaben]"
oDialog.Model.Step = 6
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Zurücksetzung der Prüfvariable
bMakroStarted = False
End Sub
'*************************************************************************************************************************************************************
'#updateArrAllergens()
'Die Funktion aktualisiert bei Änderung eines Checkbox-Zustandes den zugehörigen Eintrag in "arrAllergens".
'Wichtig: Die Funktion ist sämtlichen Checkbox-Elementen unter dem Event "Status geändert" zugeordnet!
'*************************************************************************************************************************************************************
Sub updateArrAllergens()
'Setzen des Fokus auf das "Hidden-Object": Ausnahmsweise schon VOR der Makro-Prüffunktion, um den Fokuswechsel ohne Zeitverlust auszuführen!
oDialog.getControl("lbl0HiddenFocus").setFocus()
'Prüffunktion, ob das Makro schon ausgeführt wird
If bIsMakroStarted(bMakroStarted) Then Exit Sub
'---------------------------------------------------------------------------------------------------------------------------------------------------------
ThisComponent.lockControllers()
Dim nScrollValue As Integer
Dim n As Integer
nScrollValue = oDialog.getControl("scr6Allergens").Model.ScrollValue
For n = 1 To 20
If n <= oQueryAllergens.RowCount() Then
arrAllergens(2, (nScrollValue + n - 1)) = oDialog.getControl("chb6Allergens" & CStr(n)).Model.State
End If
Next n
ThisComponent.unlockControllers()
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Zurücksetzung der Prüfvariable
bMakroStarted = False
End Sub
'*************************************************************************************************************************************************************
'#updateViewAllergens()
'Die Funktion aktualisiert bei Änderung der Bildlaufleiste sämtliche Checkbox-Elemente.
'Wichtig: Die Funktion ist der Bildlaufleiste unter den Events "Mausbewegung bei Tastendruck" und "Beim Justieren" zugeordnet!
'*************************************************************************************************************************************************************
Sub updateViewAllergens()
'Setzen des Fokus auf das "Hidden-Object": Ausnahmsweise schon VOR der Makro-Prüffunktion, um den Fokuswechsel ohne Zeitverlust auszuführen!
oDialog.getControl("lbl0HiddenFocus").setFocus()
'Prüffunktion, ob das Makro schon ausgeführt wird
If bIsMakroStarted(bMakroStarted) Then Exit Sub
'---------------------------------------------------------------------------------------------------------------------------------------------------------
ThisComponent.lockControllers()
Dim nScrollValue As Integer, n As Integer
nScrollValue = oDialog.getControl("scr6Allergens").Value
For n = 1 To 20
'Falls der durch die Bildlaufleiste generierte Index(n) des Checkbox-Elements auch in der Datenbankabfrage vorhanden ist,...
If n <= oQueryAllergens.RowCount() Then
'... Aktualisierung von Namen und Zustand in der Checkbox-Ansicht
oDialog.getControl("chb6Allergens" & CStr(n)).Model.Label = arrAllergens(1, (nScrollValue + n - 1))
oDialog.getControl("chb6Allergens" & CStr(n)).Model.State = arrAllergens(2, (nScrollValue + n - 1))
End If
Next n
ThisComponent.unlockControllers()
'---------------------------------------------------------------------------------------------------------------------------------------------------------
'Zurücksetzung der Prüfvariable
bMakroStarted = False
End Sub
[/code]
Liebe Grüße,
Marcel