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

amiga-news.de Forum > Programmierung > Mehrere Fenster öffnen [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

13.10.2008, 13:46 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Hallo!

Frage:

Ich öffne ein Fenster mit OpenWindowTags().
Dann wird ein Message Port angelegt namens "UserPort" in der
Window Structure. Dort kann ich auf IDCMP Messages lauschen.

Was aber, wenn ich zwei oder mehr Fenster aufmache?
Dann bekomme ich scheinbar jedesmal einen neuen UserPort.

Wie kann man das verhindern, damit immer der gleiche Port benutzt wird?


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


[ - Antworten - Zitieren - Direktlink - ]

13.10.2008, 13:56 Uhr

thomas
Posts: 7718
Nutzer

RTFRKRM ?

Kurzfassung: Fenster ohne IDCMP öffnen, dann in win->UserPort den bereits existierenden Port eintragen und mit ModifyIDCMP() die IDCMP-Flags setzen.

Vor dem Schließen win->UserPort auf NULL setzen und dann mit ModifyIDCMP(0) die Flags löschen. Danach alle Messages für dieses Fenster vom Port holen und beantworten und erst dann CloseWindow() aufrufen.

Ein Beispiel CloseWindowSafely() für diesen Fall gibt es in den RKRMs.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

13.10.2008, 14:09 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ich hab das RKM gelesen, aber keine solche Aussage gefunden.

Den Code für das Schliessen habe ich natürlich gefunden, auch dass man keine IDCMPs angeben kann und somit kein User-Port angelegt wird. Das man den UserPort anschliessend per Hand hinzufügen soll, habe ich allerdings nicht gefunden.

Aber danke für die Erklärung.

Bleibt noch zu klären:

Wann soll ich den MessagePort initialisieren/freigeben?

Soll ich MsgPort selbst erzeugen, und am Ende meines Programs auch per Hand freigeben? Oder soll ich den MsgPort benutzen, der beim erstellen des ersten Fensters autmatisch erzeugt wird?


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


[ - Antworten - Zitieren - Direktlink - ]

13.10.2008, 14:27 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Ok, scheint so zu funzen, dass ich am Anfang meines Programs einen MsgPort erzeuge, den ich dann jedem Fenster zuweise. Am Ende meines Programms, wenn alle Fenster zu sind, lösche ich auch den MsgPort.

Danke vielmals für die schnelle Hilfe!


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


[ - Antworten - Zitieren - Direktlink - ]

13.10.2008, 15:49 Uhr

thomas
Posts: 7718
Nutzer

Ok, nicht im RKRM, sondern in den Autodocs bei ModifyIDCMP und CloseWindow.

Gruß Thomas

--
Email: thomas-rapp@web.de
Home: thomas-rapp.homepage.t-online.de/

[ - Antworten - Zitieren - Direktlink - ]

13.10.2008, 20:04 Uhr

uho
Posts: 114
Nutzer
@Der_Wanderer, thomas, Holger, ...

bin zwar nicht mehr sehr aktiv hier, lese aber des öfteren.

Und deshalb möchte ich mal ein dickes "Danke" aussprechen -
für die unzähligen fundierten Beiträge, die oft schon die
spannende Antwort enthielten, bevor ich mir die entsprechende
Frage gestellt hatte. Danke !

Gruß

uho

[ - Antworten - Zitieren - Direktlink - ]

21.10.2008, 13:37 Uhr

Wishmaster
Posts: 140
Nutzer
Mann kann den Userport des ersten Fensters weiterverwenden.
ARexx (selber nicht getestet) und Commodities-Messages kann Mann da auch noch drauf leiten.
Aber so wie du es machst ist es noch flexibler.
--
Pegasos MorphOS

[ Dieser Beitrag wurde von Wishmaster am 21.10.2008 um 13:48 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

21.10.2008, 13:49 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Es ist komfortabler, den Port selbst zu erzeugen und für die Lebensdauer der gesamten Application zu behalten, auch wenn es Iconifiziert ist oder alle Fenster zu sein.
Den gleichen Port für AREXX verwenden wäre elegant, aber wie unterscheide ich dann zwischen AREXX und IDCMP Mesages?


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


[ - Antworten - Zitieren - Direktlink - ]

23.10.2008, 09:10 Uhr

Holger
Posts: 8116
Nutzer
Zitat:
Original von Der_Wanderer:
Den gleichen Port für AREXX verwenden wäre elegant, aber wie unterscheide ich dann zwischen AREXX und IDCMP Mesages?

Wenn mich meine Erinnerung nicht trügt, gibt es in einer der rexx#?.library eine entsprechende Funktion isRexxMsg(...) oder so ähnlich. Einfach mal in den Autodocs gucken...
Ich hab die hier leider gerade nicht zur Hand.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

29.10.2008, 16:56 Uhr

Wishmaster
Posts: 140
Nutzer
@Holger:

Sehr richtig.

rexxsyslib.library

result = IsRexxMsg(msgptr)
D0 A0

BOOL IsRexxMsg(struct RexxMsg *)

--
Pegasos MorphOS

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > Mehrere Fenster öffnen [ - Suche - Neue Beiträge - Registrieren - Login - ]


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