Also ein paar Fragen habe ich zu AES/GEMDOS jetzt schon:
- wenn in einer Dialogbox eine Checkbox markiert wird, wird dann vom AES sofort eine Nachricht abgesetzt, die mir dies signalisiert? Oder erst wenn die Dialogbox mit einem Button geschlossen wird?
Geht beides. Der Normalfall ist folgender: der form_do()-Funktionsaufruf malt die Dialogbox auf den Schirm und kehrt erst wieder zurück, wenn "OK" oder "Abbruch" gedrückt wurde. Man kann (in der Resourcedatei oder im Programm) bei einzelnen Dialogbox-Elementen aber auch das "TOUCHEXIT"-Flag setzen, dann kehrt die Funktion sofort zurück, wenn dort der linke Mausknopf gedrückt wird.
Allerdings:
keine Routine der form_xxx() (Dialogbox-Verarbeitungsroutinen) arbeitet mit AES-Events. Die standardmäßigen Dialogboxroutinen im GEM blockieren die Eventverarbeitung, bis die Dialogbox geschlossen wurde. Umgehen läßt sich das mit Fensterdialogen (selbstgebastelt oder aus irgendeiner Library unter Verwendung der wind_xxx() Funktionen und Fensterereignissen).
- wie komme ich an die Dateigröße eines Files? Ich dachte an Fopen() und dann Fgetdta() - in der DTA steht m.W. ja die Dateigröße drin.
Es mag sogar sein, daß nach einem Fopen() in der DTA tatsächlich die Dateilänge steht (schließlich muß auch das Betriebssystem erst nach der Datei schauen, bevor es sie öffnen kann) - das wäre aber ein undokumentierter Seiteneffekt, auf den ich mich nicht verlassen würde.
Grundsätzlich gibt es zwei Möglichkeiten, die Länge einer Datei zu erfahren:
- Fopen() auf die Datei
amschließend Fseek() ans Dateiende, als Rückgabewert erhält man die Dateizeigerposition.
Bevor man aus der Datei lesen kann, muß man natürlich den Zeiger wieder nach vorne setzen. - Fsetdta() um eine eigene DTA zu setzen (die vorbelegte zeigt mitten in die Kommandozeile),
Fsfirst() auf den Dateinamen, in der DTA steht anschließend die Dateigröße
- gibt es in GEM bereits sowas wie einen ProgressBar, der also den Fortschritt einer Aktion darstellt? Wie z.B. in Kobold bei einer Kopieraktion.
Falls nicht, mache ich das dann über das VDI selbst (gefüllte Box) oder gibt es da was eleganteres?
GEM kennt keine ProgressBar. Entweder selber malen über's VDI oder (m.E. einfacher und eleganter) mit den objc_xxx()-Funktionen. Dazu (in der Resourcedatei oder programmtechnisch) zwei G_BOX-Objekte definieren (eine BOX in der anderen), das Element ob_width der inneren entsprechend des Fortschritts verändern und den Objektbaum mit objc_draw() neu malen.
Gruß,
Markus