• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Sprichwörter und Redewendungen sind das Thema unseres Monatswettbewerbes. Nähere Informationen dazu gibt es natürlich auch, und zwar auf dieser Seite ---> Klick

ASS : Programm während repeat noch reagrieren? : Datenbank wie? : Ein genauer Timer

jannk

Niederhelfenschwiler Beeriapfel
Registriert
17.06.07
Beiträge
838
Hallo
Entschuldigt den langen Titel, aber da ich Titel wie "2 Fragen" (währe passeng gewesen) hasse und lieber zutreffende suche, müssen die halt manachmal etwas lange seino_O

So, nun zu den 2 (mittlerweile 3) Fragen

Programm während repeat noch reagieren:
Ich habe folgende Situation:
Durch klicken des Start-Buttons wird eine Endlosschleife mit folgendem Code gestartet: (Abgekürzt)
Code:
		repeat
			tell progress indicator "bar" of window "Main" to animate
			set contents of text field "mfeld" of window "Main" to (contents of text field "mfeld" of window "Main") + 1
			delay 0.075
		end repeat

Es wird also eine Stoppuhr gestartet.

Nun gibt es 6 Bahnen,, die alle zusammen starten sollen aber unterschiedlich aufhören. Hier hätte sich die Möglichkeit geboten, 6 einzelne Stoppuhren zu erstellen. Ich habe aber eine andere gewählt:
Wenn man nun auf einen der 6 Stop-Buttons klickt, dann fragt dieser den aktuellen Wert des Textfeldes ab und stellt diesen bei seinem eigenen dar. (Folgender Code: )
Code:
	else if (theObjectName is "1stop") then
		set contents of text field "1feld" of window "Main" to contents of text field "mfeld" of window "Main"

Dies funktioniert auch, aber nur mit einem Haken:
Das klicken auf den Stop-Button (oder einen anderen) wird nicht erkannt, wenn die Endlosschleife läuft. Man muss also erst die Endlosschleife durch Befehl-Punkt abbrechen, damit andere Buttons gedrückt und erkannt werden können. Was kann man dagegen tun?


Datenbank wie?
Hierfür empfehle ich euch (wie auch vorher) zuerst ein Mal das XCode-Projekt downzuloaden.
Im Main-Window hat es ein paar Text-Felder, Pop-Up's und Check-Boxen. Wie kann ich nun dessen Zustand speichern und beim nächsten Programmstart anzeigen?
Währe es sogar möglich, dass man bei dem Table/Scroll View, dass sich auf der linken Seite des Main-Window befindet, beliebig viele Einträge machen könnte, und jeder dieser Einträge die oben genannten Daten für sich speichert? (Text-Felder, Pop-Up's und Check-Boxen).


Ein genau gehender Timer:
Vielleicht habt ihr schon gemerkt, dass bei der Endlosschleife oben delay 0.075 steht. Obwohl dies eigentlich 0.1 betragen sollte, denn der Abstand zwischen 0.1 sec und 0.2 sec beträgt ja eigentlich 0.1 sec. Das Problem ist aber, dass mein iMac für diese Addition auch etwas Zeit benötigt, deshalb also das Delay nur 0.075 ist. Doch: Hab ich mehrere Programme offen, benötigt er länger, der Timer ist also zu langsam. Habe ich allerdings nur dieses Programm offen, ist der Timer plötzlich zu schnell. Ausserdem sollte ja ein MacPro diese Aufgabe schneller ausführen können als ein Mac Mini. Ich habe diese Problem jetzt einfach so gelöst, dass auf der GUI ein Text-Field Namens Pause vorhanden ist, in dem man diesen Wert beliebig anpassen kann. Diese Lösung gefällt mit persönlich aber nicht wirklich. Was gibt es hier für Alternativen?


So, ich hoffe ihr könnt mir helfen. Ich habe noch zur 2. Frage ein Video erstellt, das ich bald hier hineinstellen werde. Und nun noch das XCode-Projekt:
 

Anhänge

  • iRun.zip
    178,5 KB · Aufrufe: 337

hubionmac

Tydemans Early Worcester
Registriert
25.06.04
Beiträge
393
such' mal bei Apple nach dem on Idle Handler... da schreibst Du das rein...
In dem ApplScript-Studio-Beispielen gibt es auch ein Projekt mit einem Vorschritts-Balken da kannst Du sehen, wie die das gelöst haben