Probleme mit dem Mac

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

Moderator: Moderatoren

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

Probleme mit dem Mac

Beitrag von erikafuchs »

Ich hätte da noch ein Problem:
Meine Schüler dürfen bei einer Aufgabe dreimal ein falsches Ergebnis eingeben, beim vierten Mal wird die richtige Lösung angezeigt und der Dialog geschlossen. Damit die Schüler den Fehler nachvollziehen können, bleibt die falsche Eingabe im Eingabefenster stehen - unter Windows. Beim Mac muss ich das Eingabefenster löschen, ansonsten wird eine Eingabe als zwei Fehler gewertet. Hat jemand dazu eine Idee?
Mein Code (Ausschnitt aus dem Rechentrainer):
Sub start_08
DialogLibraries.LoadLibrary("Rechentrainer")
oDialog=createUnoDialog(DialogLibraries.Rechentrainer.StandardDialog)
oDialog.SetPosSize(700,150,,,3)
oTextFarbe=oDialog.getControl("Auftrag").getModel() 'Textfarbe des Auftragfeldes (richtig/falsch Meldung)
oTextFarbe.TextColor=RGB(0,0,0) 'schwarz
richtig=0
rf="los geht's"
call Aufg_08
oDialog.execute()
End sub
'*******************************************************************************************************************************************************
sub Aufg_08
aufg=aufg+1
Titel="1 mal 1"
zahl1=CInt(rnd()*8)+2
zahl2=CInt(rnd()*8)+2
Aufgabe=zahl1 & " * " & zahl2
erg=zahl1*zahl2

oDialog.GetControl("Eingabe").setFocus()
oDialog.getControl("Aufgabe").text=Aufgabe
oDialog.getControl("gleich").text=gleich
end sub

'********************************************************************************************************************************************************
Private Sub MyTextField_KeyPressed(oEvt)
If oEvt.keycode=1280 Then
Eing=oDialog.getControl("Eingabe").text
if (Eing)<>"" then
call EndeRechnen
end if
EndIf
End Sub
'********************************************************************************************************************************************************
sub EndeRechnen
richtig=0
if Eing=Erg then richtig=1

if richtig > 0 then
oTextFarbe.TextColor=RGB(0,180,70)
rf="Richtig!"
oDialog.getControl("Auftrag").text=rf
Fehler=0
oDialog.getControl("Eingabe").text=""
if aufg>=10 then
oDialog.endexecute()
exit sub
end if
Aufg_08
else
richtig=0

'oDialog.getControl("Eingabe").text=""

oTextFarbe.TextColor=RGB(255,0,0)
rf="Falsch!"
oDialog.getControl("Auftrag").text=rf
fehler=fehler+1
'print fehler 'normalerweise kann jede Aufgabe dreimal beantwortet werden
select case Fehler
case 2
rf="Falsch! Nochmal:"
case 3
rf="Immer noch falsch! Letzter Versuch:"
case 4
Fehler=0
oDialog.endexecute()
exit sub
end select
oDialog.getControl("Auftrag").text=rf
end if
end sub
Die Zeile:
'oDialog.getControl("Eingabe").text=""
muss ich nur auf dem Mac einfügen unter Windows nicht. Eine Datei zum Ausprobieren hängt an.
Dateianhänge
1mal1_c.ods
(24.6 KiB) 60-mal heruntergeladen
Hiker
******
Beiträge: 590
Registriert: Mo, 08.09.2014 21:34
Wohnort: Berlin

Re: Probleme mit dem Mac

Beitrag von Hiker »

Habe keinen Mac zum ausprobieren, aber es könnte sein, dass manche Ereignisse doppelt kommen - z.B. als keypressed/released.

Das hätte den von Dir beschriebenen Effekt.

Du könntest die vorherige Antwort speichern und auf

Code: Alles auswählen

(Eing<>"") and (vorEing <> Eing)
testen.

Mfg, Jörn
Libre Office 6.3.1 (Win 10 Pro) / Libre Office 6.0.7 (Win8.1 Pro, Win 7 Pro) / AOO (Win 7)
erikafuchs
******
Beiträge: 690
Registriert: Di, 13.02.2007 17:38
Wohnort: Büttelborn

Re: Probleme mit dem Mac

Beitrag von erikafuchs »

Hallo Hiker,
das Problem mit "keypressed/released" habe ich mal ausprobiert, das kann ich ja entsprechend zuordnen. "keypressed" habe ich zugeordnet, "released" geht nicht wie gewünscht (ich wusste auch mal warum). Das mit Eingabe zwischenspeichern habe ich auch schon ausprobiert, das hilft leider auch nicht.
Im Zweifelsfall muss ich und der Mac-Nutzer damit leben, dass die falsche Eingabe nicht angezeigt wird. Ich habe das jetzt erstmal mit
"if SysName="MAC" then call EingLoesch" gelöst.
Bytheway: Damit die Nutzer Falscheingaben nicht einfach mit der "Rückgängig" Funktion rückgängig machen können, habe ich nach Falscheingabe den Befehl "oDoc.IsUndoEnabled=False" eingefügt. Dieser geht wiederum unter Linux nicht, also heißt das entsprechend "if SysName<>"UNIX" then oDoc.IsUndoEnabled=False" - auch blöd!
Antworten