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

amiga-news.de Forum > Programmierung > ASL Screenmoderequester [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- [ - Beitrag schreiben - ]

22.09.2004, 08:42 Uhr

Micha1701
Posts: 938
Nutzer
Hallo zusammen!

Ich wollt grad mal einen Screenmoderequester in mein Programm einbauen, als ich feststellen mußte, das meine Tags nicht wirklich das bewirken, was ich angenommen hatte...

Hier mal der Aufruf:

code:
AllocAslRequestTags(ASL_ScreenModeRequest, 
ASLSM_TitleText, "Test", 
ASLSM_PositiveText, "OK", 
ASLSM_NegativeText, "CANCEL",
ASLSM_InitialDisplayWidth, 800, 
ASLSM_InitialDisplayHeight, 600,
ASLSM_InitialDisplayDepth, 15, 
ASLSM_InitialAutoScroll, FALSE,
ASLSM_DoDepth, FALSE, 
ASLSM_MinWidth, 800, 
ASLSM_MaxWidth, 800,
ASLSM_MinHeight, 600, 
ASLSM_MaxHeight, 600, 
ASLSM_MinDepth, 15,
ASLSM_MaxDepth, 16, 
TAG_END)


Nun dachte ich eigentlich, das der Requester nur Modi anzeigt, die eine Auflösung von 800x600 sowie eine Tiefe von 15/16 bit haben, anzeigt. Allerdings werden auch 24 und 32 bit Screens sowie 1024er, 1152er, 1280er und 1600er Auflösungen angezeigt...

Brauch ich also einen Hook um die selber rauszuwerfen?


--
:boing: Micha :boing:

Look at my HPs:
http://www.lanser-online.de.vu


http://www.RealmsofPower.de.vu





[ Dieser Beitrag wurde von Micha1701 am 22.09.2004 editiert. ]

[ - Antworten - Zitieren - Direktlink - ]

22.09.2004, 11:04 Uhr

melior
Posts: 160
Nutzer
Zitat:
Brauch ich also einen Hook um die selber rauszuwerfen?

Es geht einfacher. Über den Tag ASLSM_CustomSMList kannst Du dem Requester die Liste der anzuzeigenden ScreenModes mitgeben.

Tschüß André

[ - Antworten - Zitieren - Direktlink - ]

22.09.2004, 11:12 Uhr

Micha1701
Posts: 938
Nutzer
Das Problem ist eigentlich folgendes:

Ich versuche mit BestModeID einen Screenmode zu ermitteln, der 800x600 in 15/16 bit ist.

Jetzt kenn ich zumindest eine Person, bei der das nicht funktioniert, obwohl ein solcher Screenmode vorhanden ist. Er benutzt eine Vodoo Karte. Vielleicht gibts damit irgendwelche Probleme?

Naja, wie dem auch sei, hab ich mir dann eben so gedacht, daß ich für einen soclehn Fall einfach einen Screenmoderequester anbiete. Dann kann man sich eben einen Screenmode rauswählen, wenn das Programm irgendwie keinen finden konnte...

Also kann ich keine Screenmodes angeben, die ausgewählt werden dürfen, weil ich die ja dummerweise nicht ermitteln konnte...
--
:boing: Micha :boing:

Look at my HPs:
http://www.lanser-online.de.vu

http://www.RealmsofPower.de.vu



[ - Antworten - Zitieren - Direktlink - ]

22.09.2004, 12:25 Uhr

melior
Posts: 160
Nutzer
Zitat:
Also kann ich keine Screenmodes angeben, die ausgewählt werden dürfen, weil ich die ja dummerweise nicht ermitteln konnte...

Das habe ich soweit verstanden. :)

Meine Idee ist es, denselben Weg zu gehen, den auch der ScreenModeRequester geht, nämlich eine Liste aller verfügbaren ScreenModes zu erzeugen. Dabei könntest Du aber schon die Modes herausfiltern, die nicht Deinen Vorgaben entsprechen. Ein Beispiel, wie das geht, findest Du in den Sourcen der reqtools.library.

Aber möglicherweise ist es doch bequemer, die "FilterFunc" des ScreenModeRequesters zu benutzen und so die Modes zu filtern.

Tschüß André

[ - Antworten - Zitieren - Direktlink - ]

22.09.2004, 12:42 Uhr

thomas
Posts: 7716
Nutzer

Hm, die ASLSM_Min* und Max* sind wohl nur für die entsprechenden Eingabefelder, nicht um Modes zu filtern. Wenn du nur bestimmte Modes angezeigt haben möchtest, mußt du wohl eine Filter-Funktion schreiben.

Vielleicht wäre es besser, deine eigene BestModeID zu schreiben.

Hier ist mal ein Beispiel:

code:
ULONG bestmode (long w,long h,long d)

{
ULONG bestid,modeid;
long mw,mh,md,ad;
ULONG diff,maxdiff;
DisplayInfoHandle handle;
struct DimensionInfo dimsinfo;
struct DisplayInfo dispinfo;

bestid = INVALID_ID;
maxdiff = 0xffffffff;

ad = (d > 8 ? 15 : d);

modeid = NextDisplayInfo(INVALID_ID);
while (modeid != INVALID_ID)
	{
	if (handle = FindDisplayInfo (modeid))
		if (GetDisplayInfoData (handle,(APTR)&dispinfo,sizeof(dispinfo),DTAG_DISP,INVALID_ID))
			if (!dispinfo.NotAvailable && (dispinfo.PropertyFlags & SPECIAL_FLAGS) == 0)
				if (GetDisplayInfoData (handle,(APTR)&dimsinfo,sizeof(dimsinfo),DTAG_DIMS,INVALID_ID))
					{
					mw = dimsinfo.Nominal.MaxX - dimsinfo.Nominal.MinX + 1;
					mh = dimsinfo.Nominal.MaxY - dimsinfo.Nominal.MinY + 1;
					md = dimsinfo.MaxDepth;

					if (md >= ad)
						{
						mw -= w;
						mh -= h;
						md -= d;
						diff = mw*mw + mh*mh + md*md;
						if (diff < maxdiff)
							{
							maxdiff = diff;
							bestid = modeid;
							}
						}
					}

	modeid = NextDisplayInfo(modeid);
	}

return (bestid);
}


Hierbei kann die ModeID allerdings in alle Richtungen abweichen, es wird halt die gesucht, die irgendwie am besten paßt. Es dürfte aber nicht so schwer sein, es so zu ändern, daß genau 800x600x16 übrigbleibt.

Gruß Thomas

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

[ - Antworten - Zitieren - Direktlink - ]

22.09.2004, 21:05 Uhr

geit
Posts: 332
[Ex-Mitglied]
Hallo,

Ich empfehle dringend einen Hook() einzubauen, wenn man den User nicht verwirren will. Besonders bei den BIT-Tiefen.

Einige der ASL->ReqTools Patches machen das nicht richtig oder garnicht. Z.B. hatte ich das Problem, das in BoulderDäsh alle 16 und 32 bit Modi ausgewählt werden konnten, aber eben ungültig waren. Mit einem Hook() hab ich das dann selber von Hand gefiltert, um sicher zu sein, dass nur zulässige Modi zur Auswahl stehen.

Guido Mersmann

[ - Antworten - Zitieren - Direktlink - ]


-1- [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > ASL Screenmoderequester [ - Suche - Neue Beiträge - Registrieren - Login - ]


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