amiga-news ENGLISH VERSION
.
Links| Forum| Kommentare| News melden
.
Chat| Umfragen| Newsticker| Archiv
.

amiga-news.de Forum > Programmierung > Fortschrittsanzeige mit RxMui [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

22.12.2008, 14:53 Uhr

ruebennase56
Posts: 23
Nutzer
Hallo Leute,

Vielleicht kann mir hier jemand helfen. Ich hab zwei Probleme mit dem unten stehenden RxMui-Script:

1. Während der Go-Schleife öffnet sich eine Fortschrittsanzeige. Der komplette Durchlauf kann schon mal 5 Minuten betragen, also wäre ein Cancel-Button nicht schlecht,der die Schleife verlässt. Aber das Fenster erlaubt erst wieder eine Eingabe, wenn die Schleife durch ist und man sich wieder in Handle_app befindet. Hat jemand eine Idee?


2. Das zweite Problem ist wahrscheinlich ziemlich lächerlich. In der Zeile

call set("gauge_glob_progress","Current",percent)
akzeptiert die Funktion nur ganze Zahlen, aber wenn man sich wie im Beispiel die Prozent mit z.B.

57*100/1054=5.408...
an die Set-Funktion übergibt, gibt es eine Fehlermeldung. Wie wandelt man in Arexx eine reelle in eine natürliche zahl um?

Vielen Dank im Voraus


/* Convert CDID */

CreateApp: procedure
/* vorher allerlei buttons und fenster*/
app.SubWindow.1="progress"
progress.ID="sprogress"
progress.Title="Counting ..."
progress.Contents="sgroup"

/* die fortschrittsanzeige /*
sgroup.0="pe"
pe.class="group"
pe.0 = "tgroup"
tgroup.class = "hgroup"
gauge_glob_progress.weight = 20
gauge_glob_progress.showme = 0
tgroup.0 = MakeObj("gauge_glob_progress","Gauge",,100,0,"")

/* cancel sollte abbrechen tut es aber nicht, weil sich das
fenster nur während der go-schleife offen ist */
sgroup.1="be"
be.class="group"
be.horiz=1
be.0=hspace()
be.1=button("cancel","Cancel")
be.2=hspace()

call Notify("win","CloseRequest",1,"app","ReturnID","quit")
call notify("cancel","pressed",0,"app","return","????")

return

handle_app:
return


/* die schleife mit der fortschrittsanzeige */
go:
call set("progress","open",1)

ns=1
DO a=0 to 1054

if a*100/1054>5*ns then do
percent=5*ns
/* die anzeige wird aktualisiert */
call set("gauge_glob_progress","Current",percent)
call set("gauge_glob_progress","InfoText",percent||"%")
call set("gauge_glob_progress","ShowMe",1)
ns=ns+1
end

call set(“progress“,“open“,0)
END



[ - Antworten - Zitieren - Direktlink - ]

22.12.2008, 16:42 Uhr

Gazelle
Posts: 151
Nutzer
ad 1: keine Ahnung

ad 2: mit trunc(Zahl, Nachkommastellen) kann man die Stellen bestimmen.
code:
percent = trunc(percent+0.5, 0)


Das "+0.5" ist zum Runden.

[ - Antworten - Zitieren - Direktlink - ]

22.12.2008, 19:08 Uhr

ruebennase56
Posts: 23
Nutzer
Zitat:
Original von Gazelle:
ad 2: mit trunc(Zahl, Nachkommastellen) kann man die Stellen bestimmen.
code:
percent = trunc(percent+0.5, 0)


Das "+0.5" ist zum Runden.


Danke; Wie erwartet kinderleicht

[ - Antworten - Zitieren - Direktlink - ]

22.12.2008, 19:23 Uhr

cgutjahr
Posts: 2618
[Administrator]
Zitat:
Original von ruebennase56:
Aber das Fenster erlaubt erst wieder eine Eingabe, wenn die Schleife durch ist und man sich wieder in Handle_app befindet.

Was bedeutet "Fenster erlaubt keine Eingabe"? Ist der Abbrechen-Knopf tatsächlich ghosted, also nicht anklickbar?

Kenne mich mit RxMUI nicht aus - aber bei MUI siehst du prinzipiell erst dann eine Reaktion auf einen Mausklick wenn die Anwendung, zu der das Fenster gehört, bei MUI nach Eingabe-Ereignissen fragt.

Genau das tut dein Skript - also die Schleife - aber nicht, das wäre doch eine Erklärung dafür, dass der Knopf sich nicht rührt?

--
Gutjahrs Amiga Seiten

[ - Antworten - Zitieren - Direktlink - ]

23.12.2008, 01:47 Uhr

ruebennase56
Posts: 23
Nutzer
Zitat:
Original von cgutjahr:

Was bedeutet "Fenster erlaubt keine Eingabe"? Ist der Abbrechen-Knopf tatsächlich ghosted, also nicht anklickbar?

Kenne mich mit RxMUI nicht aus - aber bei MUI siehst du prinzipiell erst dann eine Reaktion auf einen Mausklick wenn die Anwendung, zu der das Fenster gehört, bei MUI nach Eingabe-Ereignissen fragt.

Genau das tut dein Skript - also die Schleife - aber nicht, das wäre doch eine Erklärung dafür, dass der Knopf sich nicht rührt?


Nein der knopf ist nicht gesperrt, die eingabe wird nicht registriert.
Das ist genau das problem, nur in der handle_app schleife wird die gui-eingabe abgefragt, aber genau da will ich durch den abbruchknopf hin.


[ - Antworten - Zitieren - Direktlink - ]

23.12.2008, 02:57 Uhr

cgutjahr
Posts: 2618
[Administrator]
Zitat:
Original von ruebennase56:
Das ist genau das problem, nur in der handle_app schleife wird die gui-eingabe abgefragt, aber genau da will ich durch den abbruchknopf hin.

Und warum frägst du dann nicht innerhalb der Schleife den Abbrechen-Knopf ab? Ist vermutlich ne blöde Frage, aber ich verstehe im Moment das Problem nicht so ganz.
--
Gutjahrs Amiga Seiten

[ - Antworten - Zitieren - Direktlink - ]

23.12.2008, 17:47 Uhr

ruebennase56
Posts: 23
Nutzer
Zitat:
Original von cgutjahr:
[
Und warum frägst du dann nicht innerhalb der Schleife den Abbrechen-Knopf ab? Ist vermutlich ne blöde Frage, aber ich verstehe im Moment das Problem nicht so ganz.


Ich bin kein spezialist wenn es um rxmui geht, aber so wie du denkst geht es nicht. Die graphische oberfläche wird immer nur in der handle_app:...return schleife abgefragt, und zwar in der art, daß das script nichts tut auser auf eine eingabe zu warten. Klickt man nun auf einen knopf oder menupunkt wird die zugeordnete funktion ausgeführt. In diesem fall die go: funktion. Integriert man in dieser schleife eine weitere abfrage der oberfläche bleibt das script an der stelle stehen und wartet auf eine eingabe. Und das ist nicht sinn der sache, die elend lange schleife soll abgearbeitet werden, aber wenn es zu lang dauert soll man sie unterbrechen können.


[ - Antworten - Zitieren - Direktlink - ]

29.12.2008, 12:44 Uhr

Gazelle
Posts: 151
Nutzer
@ruebennase56:

Nur der Vollständigkeit halber hier die Lösung, die ich bereits in der RxMUI Mailingliste gepostet habe:
ARexx code:
/* Diese Notifys in CreateApp einfügen, Fenster-Schließen oder Cancel-Button */
call Notify("progress","CloseRequest",1,"app","Return","LEAVEME")
call Notify("cancel","pressed",0,"app","Return","LEAVEME")
/* END Notifys */

----

/* die schleife mit der fortschrittsanzeige */
go:
call set('win','Sleep',1)
call set("progress","open",1)

ns=1
DO a=0 to 1054

	if a*100/1054>5*ns then do
		percent=5*ns
		/* die anzeige wird aktualisiert */
		call set("gauge_glob_progress","Current",percent)
		call set("gauge_glob_progress","InfoText",percent||"%")
		call set("gauge_glob_progress","ShowMe",1)
		ns=ns+1
	end

	/* Jetzt nach Events abfragen, aber die Anwendung nicht blockieren */
	h.NoWait = 1
	call NewHandle("APP","H")
	/* Das einzige Event hier sollte LEAVEME sein */
	if h.event="LEAVEME" then leave

END

call set("progress","open",0)
call set('win','Sleep',0)

return


[ - Antworten - Zitieren - Direktlink - ]

30.12.2008, 14:58 Uhr

ruebennase56
Posts: 23
Nutzer
Zitat:
Original von Gazelle:
@ruebennase56:

Nur der Vollständigkeit halber hier die Lösung, die ich bereits in der RxMUI Mailingliste gepostet habe:


Nochmals Danke

Die beiden Scripts findet man im Aminet:
http://aminet.net/package/util/conv/ConvertCDID
http://aminet.net/package/util/rexx/ARexxShell


[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Fortschrittsanzeige mit RxMui [ - Suche - Neue Beiträge - Registrieren - Login - ]


.
Impressum | Datenschutzerklärung | Netiquette | Werbung | Kontakt
Copyright © 1997-2019 by amiga-news.de - alle Rechte vorbehalten.
.