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

amiga-news.de Forum > Programmierung > gui von anderem task updaten [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

18.06.2009, 14:54 Uhr

AGSzabo
Posts: 1663
Nutzer
hi,

ich habe zwei tasks, jeden mit seinem GUI. der eine tasks ist ein modplayer, der zweite ist der GUI-settings task. wenn ich nun im settings task auf USE ode SAVE clicke, soll da GUI vom player auch neu gezeichnet werden.

welche möglichkeiten gibts da?

greusse,
Andreas
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 15:26 Uhr

geit
Posts: 332
[Ex-Mitglied]
Dafür wurden DosNotifies erfunden. Der Player legt einen Notify auf die Prefs Datei an und jedesmal wenn sich die Settings ändern, wird der Task automatisch signalisiert und er kann sich updaten.

Man könnte das auch über eine Message handlen, aber das ist aufwändiger.

Geit


[ Dieser Beitrag wurde von geit am 18.06.2009 um 15:27 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 15:43 Uhr

AGSzabo
Posts: 1663
Nutzer
RKM: "Not all filesystems will support notify: applications should NOT require it."

ich denke darüber nach welche variante ich nehmen soll...
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 15:48 Uhr

geit
Posts: 332
[Ex-Mitglied]
@AGSzabo:

Wenn die Settings in ENV: liegen klappt es auf jeden Fall und soweit ich weis können alle standard Dateisysteme auch Dos Notify.

Muß auch keine Message sein. Kann auch ein Signal sein, allerdings kann dann von außen sehr einfach der update Prozess getriggert werden.

Wenn du für die GUI MUI benutzt kannst du auch MUIM_PushMethod() benutzen

Geit



[ Dieser Beitrag wurde von geit am 18.06.2009 um 15:58 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 16:54 Uhr

AGSzabo
Posts: 1663
Nutzer
"Muß auch keine Message sein. Kann auch ein Signal sein, allerdings kann dann von außen sehr einfach der update Prozess getriggert werden."

Das ohne den weg über die prefs scheint mir fuer mich die nächst beste Lösung zu sein. Ob man das triggern kann ist mir wurscht. Also wie geh ich vor?

- ich reservier ein sigbit im Zieltask?
- der Zieltask geht in WaitPort() ... der wird von Fenstern für Intuimessages genutzt, ein Port für alle Fenster

Oder muss ich es bei WaitPort() mit einer Message machen? wie unterscheide ich die Refresh-Messge von idcmp Messages?

Ich seh grad dass man wohl zwei Ports machen muss und mit Wait() auf Sigbits der beiden achten soll, dann entscheiden an welchem Port was anliegt, window-IDCMP-Port oder refresh Port. Blos ist es mir noch nicht klar woran ich den unterschied erkenne.

--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ Dieser Beitrag wurde von AGSzabo am 18.06.2009 um 18:12 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 18:46 Uhr

geit
Posts: 332
[Ex-Mitglied]
@AGSzabo:

Egal ob Port oder Signal. Die Funktion ist die gleiche.
C code:
res = Wait( signal1 | signal2 );

if( res & signal1 ) {
 While( ( msg = GetMsg( idcmpport ) ) {
  /* do something */
  ReplyMsg( msg );
  /* do something */
 }
}
if( res & signal2 ) {
 /* update prefs */
}



Es können immer beide Signale gleichzeitig auftreten, daher niemals ohne Maskieren vergleichen.

Geit


[ Dieser Beitrag wurde von geit am 18.06.2009 um 18:52 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 19:42 Uhr

AGSzabo
Posts: 1663
Nutzer
ahja danke jetzt wirds mir klar!

Das Signal 2 ist das welches ich im Zieltask allokiert habe?
Das Dignal 1 sollte das vom idcmpport sein? wie komme ich da ran?

Ich habe mir ueberlegt, eigentlich sollt es nicht viel ausmachen wenn ich vom Settings-task aus dem Zieltask sein gui neu zeichne.. oder welche Probleme könnte es damit geben?


--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ Dieser Beitrag wurde von AGSzabo am 18.06.2009 um 19:49 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 20:13 Uhr

geit
Posts: 332
[Ex-Mitglied]
Zitat:
Original von AGSzabo:
ahja danke jetzt wirds mir klar!

Das Signal 2 ist das welches ich im Zieltask allokiert habe?
Das Dignal 1 sollte das vom idcmpport sein? wie komme ich da ran?



Window->UserPort AFAIR

Wenn mehr als ein Fenster benötigt wird, ist ein shared UserPort sinnvoller, da alle Fenster dann den gleichen Port nutzen. Dazu solltest du mal hier recherhieren und ein Beispiel suchen. Die RKRMs sind da auch ne Hilfe.

Zitat:
Original von AGSzabo:

Ich habe mir ueberlegt, eigentlich sollt es nicht viel ausmachen wenn ich vom Settings-task aus dem Zieltask sein gui neu zeichne.. oder welche Probleme könnte es damit geben?


Ich weis ja nicht wie du "neuzeichnen" definierst, daber generell gibt das Probleme, weil sich Pointer verändern können. Was passiert wenn der GUI Task vom Nutzer geschlosssen wird und das Fenster, das aktuallisiert werden soll nicht mehr existiert? Da gibt es dann tonnenweise neue Probleme dieser Art. Daher sollte immer nur ein Task die GUI behandeln.

Die Sache mit dem DOSNotify ist auf jeden Fall 100% narrensicher und man braucht sich über diese Dinge keine gedanken machen.

Geit




[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 20:20 Uhr

AGSzabo
Posts: 1663
Nutzer
ich nutze bereits einen shared port fuer alle fenster eines tasks. also muss ich blos dem port sein sigbit auslesen und in der maske setzen mit der ich anschliessend Wait() mache, nachdem ich in der maske auch das fuer den refresh allokierte bit setze. ok soweit?
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 20:36 Uhr

geit
Posts: 332
[Ex-Mitglied]
Zitat:
Original von AGSzabo:
ich nutze bereits einen shared port fuer alle fenster eines tasks. also muss ich blos dem port sein sigbit auslesen und in der maske setzen mit der ich anschliessend Wait() mache, nachdem ich in der maske auch das fuer den refresh allokierte bit setze. ok soweit?


Jau

Geit


[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 20:49 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Falls du dein Programm mit AREXX austatten willst, würde ich eine AREXX Message nehmen.


--
HD-Rec, Sweeper, Samplemanager, ArTKanoid, Monkeyscript, Toadies, AsteroidsTR, TuiTED, PosTED, TKPlayer, AudioConverter, ScreenCam, PerlinFX, MapEdit, AB3 Includes und viele mehr...
Homepage: http://www.hd-rec.de


[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 20:56 Uhr

AGSzabo
Posts: 1663
Nutzer
geit: danke.

@Der_Wanderer:

das ist interessant aber im moment möchte ich das noch nicht. ich frage mich aber wozu ein gui-system einen arexx port haben könnte. hat mui einen, wozu?

--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 21:46 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von AGSzabo:
ich frage mich aber wozu ein gui-system einen arexx port haben könnte.

Um eben jene GUI-Anwendungen von Skripten aus fernsteuern zu können. Genau dazu sind ARexx-Ports ja da.
Zitat:
hat mui einen, wozu?
Jede MUI-Anwendung bekommt standardmäßig einen ARexx-Port. Der Zweck ist derselbe wie oben.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 21:54 Uhr

AGSzabo
Posts: 1663
Nutzer
> Um eben jene GUI-Anwendungen von Skripten aus fernsteuern zu können.

Da fällt mir ausser dem refresh, der ja eher eine interne angelegenheit ist, blos "quit" als mögliches arexx kommando ein. was kann tyischerweise sonst realisiert werden?
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 22:03 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von AGSzabo:
Da fällt mir ausser dem refresh, der ja eher eine interne angelegenheit ist, blos "quit" als mögliches arexx kommando ein. was kann tyischerweise sonst realisiert werden?

Bei einem ModPlayer?
PLAY, PAUSE, STOP, LOAD file und wenn Du so etwas wie eine Playlist unterstützt, NEXT, GOTO n, undsoweiterundsofort.

Bei MUI kann man natürlicherweise jeden Button und jeden Menüpunkt als Kommando ausführen und für jedes Eingabefeld oder Slider den Wert setzen, usw.

mfg

--
Good coders do not comment. What was hard to write should be hard to read too.

[ - Antworten - Zitieren - Direktlink - ]

18.06.2009, 22:32 Uhr

slin
Posts: 30
Nutzer
Die Lautstärke regeln, MUTE Ein- und Ausschalten
und falls es keine Playliste geben sollte, kann
man mit AREXX einfach eine erstellen :D

Sollte das Programm zusätzlich als Commodity laufen,
kann/sollte man auch diese Funktionen via AREXX
nutzen können.

[ - Antworten - Zitieren - Direktlink - ]

19.06.2009, 09:55 Uhr

AGSzabo
Posts: 1663
Nutzer
> "Bei MUI kann man natürlicherweise jeden Button und jeden Menüpunkt als Kommando ausführen und für jedes Eingabefeld oder Slider den Wert setzen, usw."

wird der button dann auch optisch gedrückt oder nur seine funktion ausgeführt? muss ich dem button eine ID vergeben um ihn per arexx zu drücken?
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]

19.06.2009, 17:31 Uhr

slin
Posts: 30
Nutzer
@AGSzabo: Man möge mich bitte korrigieren, aber es ist bei mir schon
10 Jahre her das ich etwas mit dem Amiga gemacht habe.

ARexx spricht nicht direkt die Button_ID an.
Du hast den Message-Port wo Du halt zusätzlich die Befehle
abfängst, die von ARexx kommen. Du brauchst dazu natürlich
einen ARexx-Port.
Im Quellcode von Triton, Term, etc.pp. sind bestimmt Beispiele
vorhanden, wie man einen ARexx-Port implementiert.

Desweiteren gibst Du die Befehle vor, die Dein Programm
versteht z.B.:
PLAY
STOP
PAUSE
NEXT
PREV
VOLUME


Wie Du nun damit umgehst, wenn der Befehl an Deinem Message-Port
anliegt, bleibt Dir überlassen. Also, ob Du den
Button auch optisch als gedrückt darstellen möchtest oder
lediglich die angeforderte Funktion ausführst.

Soweit ich mich entsinne wurde z.B. bei MUI der Slider auf
jeden Fall bewegt. Ob nun die Buttons gedrückt wurden,
kann ich Dir nicht mehr sagen.
IMO ist es auch irrelevant ob die Buttons optisch als
gedrückt dargestellt werden. Die Slider sollte man natürlich
refreshen. Sieht doof aus, wenn die Lautstärke auf 90 ist
und der Slider auf 40 :lach:


PS: Und bitte den Rückgabewert nicht vergessen, damit man im
ARexx-Skript darauf reagieren kann ;)

[ - Antworten - Zitieren - Direktlink - ]

02.07.2009, 14:34 Uhr

AGSzabo
Posts: 1663
Nutzer
ok, das mit dem signal funzt jetzt bestens. danke!
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.MK3 060 50mhz 128mb - Cybervis. - Ariadne_II - ide DVD und 320gb HD (nur 128gb) - HD Floppy -- A500 3.1 adide 50mb -- Duron 1600mhz Ubuntu Linux / WinXP -- BenQ FP93G TFT - 1048 like CRT - HP psc1110

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > gui von anderem task updaten [ - Suche - Neue Beiträge - Registrieren - Login - ]


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