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

amiga-news.de Forum > Programmierung > prop to pixel? [ - Suche - Neue Beiträge - Registrieren - Login - ]

-1- 2 [ - Beitrag schreiben - ]

25.01.2009, 15:57 Uhr

AGSzabo
Posts: 1663
Nutzer
hi,

ich programmiere ein custom prop-gadget mit alternativem modernen design und würde gerne wissen, wie ich die werte POT und BODY - beides im bereich von 66536 - in pixel zum zeichnen des KNOB umrechne?

ich glaube die formel ist ein einfacher dreisatz aber je mehr ich drüber nachdenke umso verwirrter werde ich....

danke in advance
Andreas
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.PPC 060 50mhz 200mhz 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 - ]

25.01.2009, 19:45 Uhr

Thore
Posts: 2266
Nutzer
Viel Infos hast du nicht gegeben aber ich versuchs trotzdem mal:

Diese Beispiele sind für senkrechte Gadgets, lassen sich aber dementsprechend auf horizontale übertragen:


Möchtest du eine dynamische Höhe des Knobs, errechnet sich dessen Höhe so:
Höhe Komplettbild / Höhe Sichtbares Bild = Höhe Gadget / Höhe Knob
daraus ergibt sich für den Knob:
Höhe Knob = Höhe Gadget * Höhe Sichtbares Bild / Höhe Komplettbild

Ich hoff damit löst sich dein Problem

[ - Antworten - Zitieren - Direktlink - ]

25.01.2009, 20:12 Uhr

AGSzabo
Posts: 1663
Nutzer
@Thore:

danke Thore. das geht schon in die richtige richtung.

soweit kann ich jetzt schauen:


knob size = total size * vis. items / items
knob pos = (total size - knob size) * pred. items / items

das ist noch unklar:

pred. items = ?? (das ist der entscheidende scrollwert)


(pred. meint die nach oben hinausgescrollten zeilen)

--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.PPC 060 50mhz 200mhz 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 25.01.2009 um 20:31 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 15:41 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Du hast folgende Werte im Slider Raum:

sliderTotal, sliderVisible, sliderTop


Umrechnen in Pixel geht dann so:
(wobei die pixelKnobSize auf 10 Pixel limitiert wird, sonst wird es zu klein.)

Gegeben sei pixelSize:
code:
pixelKnobSize = (sliderVisible/sliderTotal * pixelSize) +1
If (pixelKnobSize<10) pixelKnobSize=10

sliderKnobSize = pixelKnobSize * sliderTotal/pixelSize
pixelKnobPosition = sliderTop/(sliderTotal-sliderKnobSize+sliderVisible)
If (pixelKnobPosition+pixelKnobSize-1 > pixelSize) {
  pixelKnobPosition=pixelSize-pixelKnobSize-1
}

Wobei du immer artig auf DIV0 testen solltest.

Zeichnen des Körpers von 0 bis pixelSize-1
Zeichnen des Knobs von pixelKnobPosition bis pixelKnobPosition+pixelKnobSize-1

Oder einfach in den NTUI Sourcecode gucken.
--
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



[ Dieser Beitrag wurde von Der_Wanderer am 26.01.2009 um 15:42 Uhr geändert. ]

[ Dieser Beitrag wurde von Der_Wanderer am 26.01.2009 um 16:02 Uhr geändert. ]

[ Dieser Beitrag wurde von Der_Wanderer am 26.01.2009 um 16:03 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 15:55 Uhr

AGSzabo
Posts: 1663
Nutzer
@Der_Wanderer:

danke, aber mir ist nicht klar, welches in deinem beispiel pixelwerte und welches auf den inhalt bezogene werte sind.

:) andreas
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.PPC 060 50mhz 200mhz 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 - ]

26.01.2009, 16:03 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Habe es so geändert, dass alle Werte im Slider Raum mit "slider" anfangen und alle Werte in Pixeln mit "pixel".

Einen Sicherheitscheck bei Rundungsungenauigkeit habe ich auch noch eingebaut. Den Rest musst du selbst hinbekommen.



--
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 - ]

26.01.2009, 16:39 Uhr

AGSzabo
Posts: 1663
Nutzer
@Der_Wanderer:

großem dank du hast mich gerettet. allerdings ist jetzt ein weiteres problem des sliders aufgetaucht, das ich mal "notify" nenne. wenn ich nämlich dem slider als receiver die liste eintrage und umgekehrt, gibts eine endlosschleife beim refresh! was kann ich da machen?
--
e-uae 39bb2 - A4000d 39bb2 - Cyberst.PPC 060 50mhz 200mhz 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 - ]

26.01.2009, 17:47 Uhr

AGSzabo
Posts: 1663
Nutzer
Zitat:
Gegeben sei pixelSize:
code:
pixelKnobSize = (sliderVisible/sliderTotal * pixelSize) +1
If (pixelKnobSize<10) pixelKnobSize=10

sliderKnobSize = pixelKnobSize * sliderTotal/pixelSize
pixelKnobPosition = sliderTop/(sliderTotal-sliderKnobSize+sliderVisible)
If (pixelKnobPosition+pixelKnobSize-1 > pixelSize) {
  pixelKnobPosition=pixelSize-pixelKnobSize-1
}



was ist damit: knobPixPos = totalpixsize * topitems / items ? warum geht das nicht?

was ist der unterschied zwischen sliderVisible und sliderKnobSize?

--
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 26.01.2009 um 17:52 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 18:11 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von AGSzabo:
allerdings ist jetzt ein weiteres problem des sliders aufgetaucht, das ich mal "notify" nenne. wenn ich nämlich dem slider als receiver die liste eintrage und umgekehrt, gibts eine endlosschleife beim refresh! was kann ich da machen?

Da es bei Notifications wie sie das AmigaOS implementiert, kein solches Problem gibt, müssen wir wohl annehmen, dass es sich bei Deinem Problem um Dein eigenes AGSzabo-"notify" handelt, von dem niemand hier außer Dir selbst wissen kann, wie es funktioniert. Somit kann Dir auch niemand sagen, was Du falsch machst.

Außer dem offensichtlich, natürlich. Aber für notifications ohne Endlosschleifen gibt es unendlich viele mögliche Lösungen, und da Du ja bewusst die naheliegendsten ausschließt, lohnt es sich nicht, Dir irgendwelche Vorschläge zu machen.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 18:16 Uhr

AGSzabo
Posts: 1663
Nutzer
@Holger:

nein, ich interessiere mich primär für das prinzip von boopsi. es ist aber auch jede andere lösung willkommen. ein agszabo-notify gibts nicht, bzw es geht so nicht, das habe ich eingesehen. trotzdem will ich es selber machen, wobei ich aber die standardlösung(en) vestehen lerne.
--
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 26.01.2009 um 18:27 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 18:40 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von AGSzabo:
nein, ich interessiere mich primär für das prinzip von boopsi.

Dort gibt es aber normalerweise keine Endlosschleifen. Das liegt an dem kleinen aber feinen Unterschied in der Behandlung von OM_SET und OM_UPDATE Methoden.

Zitat:
trotzdem will ich es selber machen, wobei ich aber die standardlösung(en) vestehen lerne.

Die plattformübergreifende Standardlösung besteht darin, dass man bei Manipulationen, die keine Veränderung bewirken, sprich dem Versuch einen Wert auf seinen bereits aktuellen zu setzen, keine Nachricht an andere Objekte schickt, gibt ja keinen Grund dafür.

Das kann allerdings problematisch werden, wenn verschiedene Objekte einen Wert mit unterschiedlicher Genauigkeit behandeln und der Wert deshalb zwischen zwei Rundungsergebnissen oszilliert.

Beim AmigaOS bewirken OM_SET Methoden, bzw. Benutzereingaben, dass das veränderte Objekt eine OM_UPDATE Nachricht an das Target schickt, womit dieses Objekt keine Notification auslöst. Deshalb kann man direkt nur zwei Objekte miteinander koppeln, eine Ring-Konfiguration von Targets würde nicht funktionieren, da immer nur das direkte Target aktualisiert werden würde.
Stattdessen benötigt man bei mehr als zwei Objekten ein zusätzliches Objekt vom Typ modelclass. Das besitzt eine eigene Liste von zu benachrichtigenden Objekten. In der stehen alle Objekte, die wiederum das model als target besitzen. Schleifen entstehen wiederum nicht, da vom model benachrichtigte Objekte ein OM_UPDATE erhalten und nicht weiterversenden.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 19:00 Uhr

AGSzabo
Posts: 1663
Nutzer
ok, OM_SET und OM_UPDATE also. Und Target? was ist das alles? ich blicke irgendwie noch nicht ganz durch aber zwei zu verketten reicht mir, da ich schon eine gut funktionierende ringverkettung fuer die tabtaste gebaut habe.

es wuerde mir helfen, wenn ich die betieligten strukturen und routinen einsehen koennte! ich habe includes aber evtl nicht die neusten...ich meine, ich brauche die .i files. die .h bringen mir nicht so viel.

--
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 26.01.2009 um 19:02 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 19:49 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von AGSzabo:
ok, OM_SET und OM_UPDATE also. Und Target? was ist das alles? ich blicke irgendwie noch nicht ganz durch aber zwei zu verketten reicht mir, da ich schon eine gut funktionierende ringverkettung fuer die tabtaste gebaut habe.

Das sind verschiedene Baustellen.
Jedes BOOPSI-Objekt unterstützt ein notification target, frag mich nicht nach der exakten Benennung, ich schreib das gerade aus dem Kopf. Wenn das BOOPSI-Objekt sich verändert, wird an dieses target ein OM_UPDATE Methode geschickt, damit dieses sich anpassen kann. Der Unterschied zu einer OM_SET ist allerdings, dass dieses Objekt über solche abhängigen Änderungen keine Nachricht verschickt.

Die Verkettung, von der hier die Rede ist, hat nichts mit Fokus-Traversal via Tab oder ähnlichem zu tun. Es geht um Objekte, deren Zustände voneinander abhängen. Also z.B. ein String-Gadget, das den Wert eines Prop-Gadget (Slider) anzeigt. Wenn sich eines ändert, muss das andere aktualisiert werden. Kein Problem, wenn jeweils eines das target des anderen ist.

Interessanter wird es, wenn man drei Slider hat, die RGB-Werte anzeigen. Dann hängen alle voneinander ab.
Zitat:
es wuerde mir helfen, wenn ich die betieligten strukturen und routinen einsehen koennte! ich habe includes aber evtl nicht die neusten...ich meine, ich brauche die .i files. die .h bringen mir nicht so viel.
Du brauchst für das grundlegende Verständnis nur AOS2.0. Also, irgendwas zwischen AOS2.0 und AOS3.9 wirst Du doch haben, oder? Und .i files sind doch bei den meisten mit bei. Ich erinnere mich noch, als ich in Assembler programmiert habe, dass es trotzdem von Vorteil war, C code lesen zu können.

Ich glaube, die .i files der Amiga-Entwicklerunterlagen sind eh aus den .h files generiert worden. Ob das verwendete Programm publik gemacht wurde, weiß ich aber nicht.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 21:27 Uhr

AGSzabo
Posts: 1663
Nutzer
@Holger:

>Du brauchst für das grundlegende Verständnis nur AOS2.0.

und welche inc/doc dateien / strukturen genau?
--
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 26.01.2009 um 21:31 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 21:41 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Dann mache es so wie ich in NTUI:

Wenn ein Gadget ein Notify (wie du es nennst) abschickt, dann notiert es seine ID in dem Notify. Ein Notify wird so lange weitergeschickt, bis es wieder bei der gleichen ID ankommt. So kann man in NTUI beliebig grosse "Ringe" von Gadgets bilden.

Zu deiner Frage:

sliderKnobSize ist die Größe des Knobs, die möglicherweise größer ist als sliderVisible, da man dem Knob eine gewisse mindestgröße geben sollte. Sonst wird der so fuzzelig klein bis auf einem Pixel, wenn der Scrollbereich gross ist. Aber jetzt bitte ich dich wirklich, deinen Grips ein wenig zu bemühen.





--
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 - ]

26.01.2009, 22:03 Uhr

AGSzabo
Posts: 1663
Nutzer
@Der_Wanderer:

danke, tut mir leid in mathe kopfrechnen war ich immer eine flaute!
--
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 - ]

26.01.2009, 22:29 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von Der_Wanderer:
Dann mache es so wie ich in NTUI:

Wenn ein Gadget ein Notify (wie du es nennst) abschickt, dann notiert es seine ID in dem Notify. Ein Notify wird so lange weitergeschickt, bis es wieder bei der gleichen ID ankommt. So kann man in NTUI beliebig grosse "Ringe" von Gadgets bilden.

Da steckt aber ein Denkfehler drin.
Was passiert, wenn es zu einem Zyklus kommt, bei dem das Ursprungsgadget nicht beteiligt ist?

z.B. a->b->c->b->c->b->...

Zitat:
Original von AGSzabo:
und welche inc/doc dateien / strukturen genau?

Also 1.
http://www.haage-partner.de/download/AmigaOS/NDK39.lha
enthält auch .i Dateien.
2.
Include/include_i/intuition/classusr.i
Include/include_i/intuition/icclass.i

Das ICA_TARGET Attribut spezifiziert das notification-target und wird nicht nur von icclass, sondern auch von gadgetclass verstanden.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

26.01.2009, 22:41 Uhr

Der_Wanderer
Posts: 1229
Nutzer
In NTUI ist es immer ein Ring.

c->a->b->a

geht nicht. ntui_Bind(a,b) verbindet immer bidirectional und erhält die Ringstrukur, falls der a oder b bereits verbunden sind.

Also

a b c

ntui_Bind(a,b)

a<=>b c

ntui_Bind(b,c)

a->b->c->a

Wenn ich jetzt von aussen den Wert von b ändere, dann geht die Kette

b->c->a->STOP(b)


--
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 - ]

27.01.2009, 10:29 Uhr

Holger
Posts: 8038
Nutzer
Zitat:
Original von Der_Wanderer:
In NTUI ist es immer ein Ring.

c->a->b->a

geht nicht. ntui_Bind(a,b) verbindet immer bidirectional und erhält die Ringstrukur, falls der a oder b bereits verbunden sind.

Das muss man aber auch sagen, wenn man die technische Lösung zur Verhinderung von Endlosschleifen beschreibt. Sonst implementiert jemand die IDs im Notify und weiß nicht, dass das nur die halbe Miete ist.

Die AmigaOS-Struktur erscheint mir dennoch flexibler. Damit kann man auch komplexere Datenmodelle relativ aufbauen. Nimm nur mal als Beispiel die R/G/B/H/S/V Slider. Mit einer Ring-Notification kann man die nicht so einfach koppeln.

mfg

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

[ - Antworten - Zitieren - Direktlink - ]

27.01.2009, 11:48 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@Holger
Komplexere Dinge würde ich mit einem eigenen Widget lösen, dass die Slider als Kinder hat und Steuert, oder, wenn es eine einmalige Sache ist, über die Applikation lösen, d.h. die Slider senden eine Message an den Task, der dann eine beleibige Berechnugn vornimmt und die restlichen Slider setzt.



--
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 - ]

27.01.2009, 14:02 Uhr

AGSzabo
Posts: 1663
Nutzer
@Der_Wanderer:

hallo, ich habe deine formeln umgesetzt aber es geht nich. was mache ich falsch?

code:
move.w	xuiSl_pixsize(a3),d4
		mulu.w	xuiSl_body(a3),d4
		divu.w	xuiSl_max(a3),d4
		addq.w	#1,d4

		cmp.w	#10,d4
		bgt.b	.set_pixsize
		move.w	#10,d4

.set_pixsize	move.w	d4,xuiSl_knobpix(a3)

		mulu.w	xuiSl_max(a3),d4
		divu.w	xuiSl_pixsize(a3),d4		; d4 now "knobitems"

		move.w	xuiSl_max(a3),d0
		sub.w	d4,d0
		add.w	xuiSl_body(a3),d0
		move.w	xuiSl_pot(a3),d5
		divu.w	d0,d5

		move.w	d5,d0
		add.w	xuiSl_knobpix(a3),d0
		subq.w	#1,d0
		cmp.w	xuiSl_pixsize(a3),d0
		blt.b	.set_pixpos
		move.w	d0,d5

.set_pixpos	move.w	d5,xuiSl_pixpos(a3)


--
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 - ]

27.01.2009, 14:12 Uhr

Der_Wanderer
Posts: 1229
Nutzer
@AGSzabo

Du erwartest ernsthaft dass ich mich jetzt in deinen Assmbler Source reinlese? Sorry. Du hast die Formel, und du hast dich dazu entschieden Assmbler zu nutzen. Damit musst du alleine klarkommen.
Das einzige was meinen geröteten Augen sofort auffällt ist, dass du 16bit (.w) nutzt. Das führt seht schnell zu Overflows. Ich benutze für alle Werte 32bit, und während der Umrechnung 48bit, damit keine Overflows entstehen.


--
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



[ Dieser Beitrag wurde von Der_Wanderer am 27.01.2009 um 14:13 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]

27.01.2009, 14:15 Uhr

Der_Wanderer
Posts: 1229
Nutzer
... ausserdem ist die Beschreibung "geht nich" doch etwas wage. Was passiert denn?
--
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 - ]

27.01.2009, 14:40 Uhr

AGSzabo
Posts: 1663
Nutzer
@Der_Wanderer:

wegen "geht nicht": der knopf wird beim verschieben unterhalb außerhalb der box angezeigt und ruckelt auf und ab.

wegen assembler: selbstverständlich nur wenn du magst. schließlich ist es mein problem. :)
--
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 - ]

04.02.2009, 11:00 Uhr

AGSzabo
Posts: 1663
Nutzer
> knob size = total size * vis. items / items


hi nochmal hier. fuer meinen schieberegler berechne ich jetzt die größe des ziehknopfes mit obiger formel. abwer wie berechne ich die knopfposition wenn der knop mindestens 20pix groß sein 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 - ]

04.02.2009, 11:03 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Steht alles bereits in diesem Thread.


--
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 - ]

04.02.2009, 12:21 Uhr

AGSzabo
Posts: 1663
Nutzer
@Der_Wanderer:


ich habe nochmal das da aufgegriffen und nochmal umzusetzen versucht:

code:
sliderKnobSize = pixelKnobSize * sliderTotal/pixelSize
pixelKnobPosition = sliderTop/(sliderTotal-sliderKnobSize+sliderVisible)
If (pixelKnobPosition+pixelKnobSize-1 > pixelSize) {
  pixelKnobPosition=pixelSize-pixelKnobSize-1
}
;sliderKnobSize ist die Größe des Knobs, die möglicherweise größer ist als sliderVisible

aber es geht noch nicht. die bedeutung einiger variablen ist mir immernoch nicht klar. was meint es "möglicherweise größer?" ist das kein pixelwert? was dann?


ps: wo ist der ntui source?

--
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 04.02.2009 um 12:26 Uhr geändert. ]

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

[ - Antworten - Zitieren - Direktlink - ]

06.02.2009, 15:38 Uhr

Der_Wanderer
Posts: 1229
Nutzer
Der TUI Source ist in der neuesten Amiblitz3 Distribution auf amiblitz3.amiforce.de
Der wird dich aber auch nicht schlauer machen, denn der macht das gleiche wie oben geschrieben.


--
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 - ]

07.02.2009, 14:45 Uhr

Georg
Posts: 107
Nutzer
Wenn man als Ausgang POT und BODY hat (bzw. diese aus top/total/visible errechnet hat), dann kann man sich diese ähnlich wie Prozentwerte vorstellen. Nur dass nicht 100 die "Basis" ist, sondern MAXPOT, MAXBODY. Also dividiert man durch MAXPOT bzw. MAXBODY anstatt 100.

BODY gibt anteilmässig die Größe des Knobs an. POT anteilmässig die Position.

code:
knobsize = propgadgetsize * body / MAXBODY;
if (knobsize < MINKNOBSIZE) knobsize = MINKNOBSIZE;


code:
knobposition = propgadgetpos + (propgadgetsize - knobsize) * pot / MAXPOT;


"size" == Breite oder Höhe je nachdem ob es horizontales oder veritkales Prop Gadget ist.

"pos" == x1 bzw. y1 je nachdem ob es horizontales oder vertikales Prop Gadget ist.

propgadgetsize == Gesamtgröße (Breite bzw. Höhe) des Propgadgets worin sich der Knob bewegt.

Wenn man sich denkt MAXBODY bzw. MAXPOT wären 100 - und body und pot ein Wert zwischen 0 und 100 - dann ist es noch einfacher zu verstehen.

[ - Antworten - Zitieren - Direktlink - ]

08.02.2009, 11:04 Uhr

AGSzabo
Posts: 1663
Nutzer
@Georg:

hey, das sieht gut aus. aber eins hab ich noch nicht verstanden: was ist maxpot im unerschied zu maxbody? ein von beiden hab ich glaub ich garnicht.. (wo bekomme ich das her)?
--
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 08.02.2009 um 11:05 Uhr geändert. ]

[ Dieser Beitrag wurde von AGSzabo am 08.02.2009 um 11:11 Uhr geändert. ]

[ - Antworten - Zitieren - Direktlink - ]


-1- 2 [ - Beitrag schreiben - ]


amiga-news.de Forum > Programmierung > prop to pixel? [ - Suche - Neue Beiträge - Registrieren - Login - ]


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