Fortschrittsbalken

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Fortschrittsbalken

Beitrag von erikafuchs »

Hallo zusammen,
ich bastele immer noch an meinem Matheprogramm. Hier sollen meine Schüler (und jeder der möchte) verschiedene Aufgaben von Klasse 5 bis 10 üben. Die Schüler (und ich) sollen eine Rückmeldung über ihre Fehler und ihre Rechengeschwindigkeit bekommen. Ich habe dazu ein Dialog erstellt, in dem die Aufgabe (zB zum kleinen Einmaleins) gestellt wird. Nach Eingabe des Ergebnisses und Klick auf die Returntaste wird das Ergebnis überprüft und es erfolgt eine Rückmeldung. Das passiert je zB 10 Mal. Ich habe einen Fortschrittsbalken eingebaut, der in Abhängigkeit der Durchschnittszeit und der Bestzeiten aus früheren Versuchen (die kann ich berechnen), die abgelaufene Zeit zeigt. Der Balken sollte loslaufen wenn die Aufgabe gestellt wird (oder der Dialog geöffnet). Ich bekomme das nicht hin. Erstens muss man jedesmal erst einen Startknopf drücken (was ich vermeiden möchte - das ist lästig wenn man schnell rechnen will) und zweitens läuft die "if ... next" Schleife weiter wenn der Dialog geschlossen wird und der Schüler schneller war als die Vorgabe - es dauert dann eine Weile bis der Dialog wieder aufgeht.

Wenn mir noch jemand sagen kann, wie ich dene "Weiter" Knopf loswerde wäre es perfekt. Das Ergebnis soll möglichst nicht erst nach Klicken auf ein Schaltfeld überprüft werden, sondern nach Eingabe des Ergebnisses und Betätigen der Returntaste.

Wer hat eine Idee?
Grüße
Pit
(PS: Wer will kann das Programm gerne schon mal haben und seinen Senf dazugeben!)
-> da kommen noch mehr Fragen!
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Fortschrittsbalken

Beitrag von jwr »

Hallo Erika,

Vielleicht willst Du es mal mit einer Farbanzeige (rot = schlecht, gelb ist ein Risiko, grün ist OK, blau = cool) und der bedingten Formatierung versuchen. Ist vielleicht für die Schüler und für Dich lustiger.

Beispiele findest Du in:
http://www.ooowiki.de/CalcFormatBedingt ... atierungen

Grüsse -Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Fortschrittsbalken

Beitrag von erikafuchs »

Lieber Hans,
klar, mit Farben wollte ich das schon lösen, der Fortschrittsbalken soll natürlich entsprechend die Farbe wechseln aber erstmal muss er automatisch starten und enden.

Gruß Pit
jwr
****
Beiträge: 130
Registriert: Fr, 13.04.2007 14:09

Re: Fortschrittsbalken

Beitrag von jwr »

Hallo Pit,

Nehme mal an: Du hast 10 Felder A1 bis A10 auf einer Reihe, die jeweils eine
speziellen Formel enthalten. Die Formel soll die Farbe der Zelle anpassen je nach Inhalt einer Zahl in einer bestimmten Zelle, z.B. in B1.

Die Formel auf Feld A1 sollte nun so aussehen:
Falls die Zahl in B1 >= 1 ist, dann Feld A1 rot einfärben, sonst bleibt das Feld A1 weiss.

Die Formel auf Feld A2 sollte nun so aussehen:
Falls die Zahl in B1 >= 2 ist, dann Feld A2 rot einfärben, sonst bleibt das Feld A2 weiss.

Die Formel auf Feld A3 sollte nun so aussehen:
Falls die Zahl in B1 >= 3 ist, dann Feld A3 rot einfärben, sonst bleibt das Feld A3 weiss.

usw.

Dann hast Du auch einen "laufenden Fortschrittsanzeiger".
Auf Feld B1 steht eine Zahl zwischen 1 und 10.
Die Farbe kannst Du mit einer speziellen Logik auch noch steuern.
Diese Logik brauchst Du nicht starten. Sie ist aktiv, sobald die Zahl geändert wird.


Grüsse -Hans-
Windows 2K, OOo-2.3.0, MS-IE-6.0, Firefox-1.0.4, MS Office 97, 260 MB RAM,
Pseudostandard MS OpenXML abstimmen ->: http://www.noooxml.org/petition
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Fortschrittsbalken

Beitrag von erikafuchs »

Lieber Hans,
vielen Dank für deine Mühe, soweit ist das ja auch klar und meine erste Version (in Excel) funktionierete auch so ähnlich, die war mir aber zu unflexibel - zwischenzeitlich arbeite ich mit Diaologen und da brauche ich halt den Fortschrittsbalken (und den möglichst auch mit Zehntelsekunden).

Ps. Wenn ich nicht mit Dialogen arbeite muss ich wohl mit Listener arbeiten, das durchblicke ich noch nicht (und das ist in meinem Buch von Thomas Krumbein - das ich eh sehr schwierig finde, nicht erklärt). Das mit dem Listener und der Arbeit auf dem Tabellenblatt brauche ich allerdings später schon, wenn ich die Wertetabellen für das 8. bis 10. Schuljahr bastele. Gibt es da eine verständliche Anleitung, wie man die Eingaben in einen Bereich auf dem Tabellenblatt überwacht?
Grüße
Pit
Toxitom
********
Beiträge: 3769
Registriert: Di, 12.08.2003 18:07
Wohnort: Wiesbaden
Kontaktdaten:

Re: Fortschrittsbalken

Beitrag von Toxitom »

Hey Pit,

also, natürlich ist das alles lösbar - nur fehlen einfach die Rahmenbedingungen. Ein Fortschrittsbalken kann natürlich genau dann gestartet werden, wenn der Dialog geöffnet wird. Du kannst - wie auch allen anderen Kontrollelementen - speziellen Ereignissen ein Makro zuweisen, dass dann ausgeführt wird.
In deinem Fall wäre das das Ereignis "Dialog erhält Fokus -> Start Fortschrittsbalken" und "Dialog verliert Fokus -> Stop Fortschrittsbalken, Zeit berechnen....".
Und datürlich kannst du auch den "Weiter" Button weglassen, jetzt kommt es darauf an, ob du das Ereignis sauber definieren kannst. Beispiel: die Eingabe muss 2 stellig erfolgen: Ergebnis - Ereignis "Text modifiziert", prüfen ob 2 Stellen - dann mit Ergebnis checken. Und so weiter. Also, das hängt alles von deiner Programmierkunst ab ;-)
Wenn ich nicht mit Dialogen arbeite muss ich wohl mit Listener arbeiten
Nein, musst du nicht, es sei denn, du erstellst den Dialog komplett per Makro - dann ja. Nutzt du aber den Dialogeditor, brauchst du keine Listener.
...das ist in meinem Buch von Thomas Krumbein - ..., nicht erklärt..
OK, auf vielfachen Wunsch gibt es jetzt in der Neuauflage (verfügbar ab November) Beispiele und Erläuterungen zu Listener ;-)

Viele Grüße
Thomas
Unterstützer LibreOffice, zertifizierter Trainer und Berater
Bücher: LibreOffice 6- Einstieg und Umstieg
Makros Grundlagen - LibreOffice / OpenOffice Basic
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Fortschrittsbalken

Beitrag von erikafuchs »

Lieber Thomas,
da fühle ich mich ja geehrt, wenn derjenige, dem ich meine bescheidenen Makroprogrammierungsfähigkeiten verdanke, sich höchstpersönlich meines Problems annimmt. Also werde ich mich noch mal dranmachen, diesen Fortschrittsbalken zum Laufen zu bringen. "Dialog erhält Fokus" hatte ich auch logisch gefunden, es hat aber nicht zum gewünschten Ergebnis geführt - ich werde es noch mal testen. "Text" modifiziert hatte ich auch schon versucht, die Option reagiert aber auf jede Eingabe, diese kann aber je nach Aufgabe "4", "35,89" oder auch "456mm²" sein.
Das mit dem Listener habe ich, fürchte ich noch gar nicht verstanden. Zur Zeit laufen alle Aufgaben noch komplett über Dialoge - habe ich da schon Listener eingesetzt ohne es zu merken? In der weiteren Folge habe ich vor dass die Schüler zB. im 9. oder 10. Schuljahr Wertetabellen zu Funktionen auf einem Tabellenblatt ausfüllen müssen, da habe ich noch keine Ahnung wie man über ein Makro feststellt, dass in irgendeinem Feld eines Bereiches etwas eingegeben wurde.
Noch stehe ich am Anfang - aber ich habe Ergeiz da weiter zu kommen.
So long
Pit
kannenklaus
*****
Beiträge: 319
Registriert: Mi, 14.12.2005 08:08
Wohnort: freising - oder dort, wo das bier herkommt

Re: Fortschrittsbalken

Beitrag von kannenklaus »

hallo erika,
dass in irgendeinem Feld eines Bereiches etwas eingegeben wurde
versuch es mal damit:

Code: Alles auswählen

Sub IstAktivesBlattLeer(oRg) as Boolean 
Dim oRg, oQry,lFlags& 

		With com.sun.star.sheet.CellFlags 
		   lFlags = .STRING + .VALUE + .FORMULA + .ANNOTATION 
		End With 
		oRg=thisComponent.CurrentController.getActiveSheet 'das gerade aktive Blatt
		oQry = oRg.queryContentCells(lFlags) 
		IstAktivesBlattLeer = oQry.getCount()=0
'		msgbox IstAktivesBlattLeer 'übergibt true oder false

	if IstAktivesBlattLeer=true then
		msgbox "hey hier fehlt ne eingabe"
	else
		msgbox "mach im programm weiter"
	end if
End Sub



grüße klaus
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Fortschrittsbalken

Beitrag von erikafuchs »

Lieber Klaus,
vielen Dank soweit, leider ist das Problem etwas größer, das habe ich wohl nicht genau genug beschrieben: Kennst du noch die Wertetabellen von Funktionen aus der Schule? Links ist eine Spalte mit x=0,1,2,3... und oben steht eine Funktionsgleichung zB. Y=2x²+5x-2 und dann musst du unten die Werte ausrechnen und eintragen. Für meine Schüler sind dann gleich drei oder vier Funktionsgleichungen auf einem Blatt und die müssen dann 20 oder 30 Werte eintragen (in beliebiger Reihenfolge, sie dürfen auch welche frei lassen) und das Makro muss jetzt bei jeder Eingabe in irgendeiner Zelle die Eingabe mit dem (verdeckten) Ergebnis vergleichen, die Fehler anzeigen (das geht mit bedingter Formatierung) und die Fehler zählen - das geht nur mit einem Makro, denn der Fehler muss auch gezählt werden, wenn der Wert dann irgendwann verbessert wird. Bei VBA hatte ich das schon gelöst, meine Schüler sollen aber mit Calc arbeiten und leider läuft das Excel Programm unter Calc nicht, ich muss also alles neu lernen.
Irgendjemand kann mir aber sicher sagen wie das geht, ich habe es noch nicht herausbekommen.
Grüße
Pit
Antworten