Seite 2 von 2

Re: Datensatzauswahl - (Bildlaufleiste)

Verfasst: Fr 18. Mai 2018, 07:56
von RobertG
Hallo Alletkla,

beim zweiten Codeteil gehst Du wieder davon aus, dass das Element in Deinem Formular "oScrollfield" heißt. Ist das tatsächlich so?

Die Position des Läufers ist doch Anzeichen für den Datensatz - wenn es denn funktioniert. Wenn Du die Position also einfach auf die Mitte setzt, dann zeigst Du bei 3 Datensätzen den 2. Datensatz an. Willst Du das wirklich?

Ich hänge einmal eine entsprechende Beispieldatei an. Das Makro für den maximalen Wert des Formulars wird erst einmal nur beim Start des Formulars ausgelesen. Das sollte dann im Dauerbetrieb auf jeden Fall auch erfolgen, wenn Datensätze hinzugefügt oder gelöscht werden.

----
Ergänzung: Habe eine zweite Datei angehängt, die die Bildlaufleiste und die Navigationsleiste von den Werten her in Einklang bringt.

Gruß

Robert

Re: Datensatzauswahl - (Bildlaufleiste)

Verfasst: So 20. Mai 2018, 18:37
von Alletkla
Vielen Dank, konnte alles nachvollziehen


1 Problem hab ich allerdings noch:

habe eine Public Variable "posr" die zum Laden des Formulars mit 50 initialisiert wird. Dies habe ich auch mit einer MSgBox kontrolliert, das dies geschiet. Diese gibt den Wert 50 auch wieder.

Im Event des Scrollens verwende ich diese Variable erneut (nicht erneut Deklariert) und diese hat hier aber verwunderlicherweiße den Wert 0 ???

Code: Alles auswählen

PUBLIC max as Long
PUBLIC oScrollfieldevent as Object
PUBLIC posr as Integer

Sub open_Bilddaten (oEvent as Object)
	DIM oFrame AS OBJECT
	DIM oWin AS OBJECT
	DIM oLayoutMng AS OBJECT
	DIM aElemente()
	
	posr = 50					'Bei start posr auf Mittelstand initalisieren
	Msgbox(posr)

	'oEvent.Source.last      	'zum letzten Datensatz springen, um Datensatzanzahl zu aktualisieren
	'oEvent.Source.first		'zurück zum 1. springen	
End sub 


Soweit so gut, hier zeigt die MSgbox 50 an

Code: Alles auswählen


Sub Scrollbar_Aenderung(oEvent as Object)
	Dim oSCrollfield as Object
	Dim oform2 as Object
'Variablen initialisiert	
	
'	oScrollfieldevent = oEvent

			
	oScrollfield = oEvent.Source.Model
	oForm2 = oSCrollfield.Parent
	
	pos = oEvent.Value
							'Position der Scrolleiste auslesen
Msgbox ("Aktuelle" + pos + "vorehrige:" + posr)

	If pos > posr Then						'wenn kleiner/größer als vorheriger Wert
	  Oform2.relative(-1)					'relativ zum aktuellen Datensatz verschieben
	Else
	 Oform2.relative(1)
	EndIf				
		
	posr = oEvent.Value						'Position für nächsten Verlgiech speichern						
End Sub
Hier allerdings den Wert "0" für "posr"

Das setzten der Variable von Public auf Global brachte die Lösung, kann aber nicht nachvollziehen warum, da ich doch innerhalb eines Moduls auch mit Public das notwendige erreichen sollte

Falls du mir das noch erklären könntest wäre ich dir sehr dankbar.
Bis hierher hast du mir auch super weiter geholfen :) ;)

Re: Datensatzauswahl - (Bildlaufleiste)

Verfasst: So 20. Mai 2018, 20:10
von RobertG
Hallo Alletkla,

ich habe jetzt einfach einmal in der Hilfe etwas gesucht:
Deklarieren von Variablen außerhalb von SUB oder FUNCTION
Global VarName As TYPENAME
Diese Variable bleibt während die gesamte LibreOffice-Sitzung gültig.
Public VarName As TYPENAME
Die Variable hat in allen Modulen Gültigkeit.
Private VarName As TYPENAME
Die Variable hat nur im Modul Gültigkeit.
Dim VarName As TYPENAME
Die Variable hat nur im Modul Gültigkeit.
Wenn eine Prozedur abgelaufen ist, dann hast Du von der Public-Variablen nichts mehr. Nur die Variable des Typen Global ist die ganze Zeit lang gültig, für die Du die Datenbankdatei mit den Prozeduren geöffnet hast.

Gruß

Robert

Re: Datensatzauswahl - (Bildlaufleiste)

Verfasst: So 20. Mai 2018, 23:11
von Alletkla
Okay Vielen Dank für deine rasche und lange Hilfe

steh mit dem Projekt jetzt kurz vor der Vollendung

Falls noch Fragen bestehen, habe ich jetzt keine falsche Scheu mehr, etwas im Forum zu erfragen : )))))

Schöne Pfingsten noch