amiga-news DEUTSCHE VERSION
.
Links| Forums| Comments| Report news
.
Chat| Polls| Newsticker| Archive
.

amiga-news.de Forum > Programmierung > Mehrere Fenster öffnen [ - Search - New posts - Register - Login - ]

-1- [ - Post reply - ]

2008-10-13, 13:46 h

Der_Wanderer
Posts: 1229
User
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


[ - Answer - Quote - Direct link - ]

2008-10-13, 13:56 h

thomas
Posts: 7721
User

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/

[ - Answer - Quote - Direct link - ]

2008-10-13, 14:09 h

Der_Wanderer
Posts: 1229
User
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


[ - Answer - Quote - Direct link - ]

2008-10-13, 14:27 h

Der_Wanderer
Posts: 1229
User
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


[ - Answer - Quote - Direct link - ]

2008-10-13, 15:49 h

thomas
Posts: 7721
User

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/

[ - Answer - Quote - Direct link - ]

2008-10-13, 20:04 h

uho
Posts: 114
User
@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

[ - Answer - Quote - Direct link - ]

2008-10-21, 13:37 h

Wishmaster
Posts: 140
User
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. ]

[ - Answer - Quote - Direct link - ]

2008-10-21, 13:49 h

Der_Wanderer
Posts: 1229
User
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


[ - Answer - Quote - Direct link - ]

2008-10-23, 09:10 h

Holger
Posts: 8116
User
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.

[ - Answer - Quote - Direct link - ]

2008-10-29, 16:56 h

Wishmaster
Posts: 140
User
@Holger:

Sehr richtig.

rexxsyslib.library

result = IsRexxMsg(msgptr)
D0 A0

BOOL IsRexxMsg(struct RexxMsg *)

--
Pegasos MorphOS

[ - Answer - Quote - Direct link - ]


-1- [ - Post reply - ]


amiga-news.de Forum > Programmierung > Mehrere Fenster öffnen [ - Search - New posts - Register - Login - ]


.
Masthead | Privacy policy | Netiquette | Advertising | Contact
Copyright © 1998-2025 by amiga-news.de - all rights reserved.
.