Hilfe mit Slidern und Canvas

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

 

danielos

Betreff: Hilfe mit Slidern und Canvas

BeitragMi, Feb 17, 2010 19:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

ich arbeite gerade an einer MultiColumn Listbox (mit Sortieren, Editieren, usw.. Smile ) komm eig. ganz gut voran, sieht bisher so aus:

user posted image
(werd den Sourcecode auch hier veröffentlichen, wenn die mal fertig ist ^^)

Das ganze wird auf einen Canvas gezeichnet. Nun hab ich zwei Probleme mit den Slidern:

1) Ich möchte, dass sich die SliderRange anpasst an die (theoretische) Länge der Listbox. Hab das bisher aber nicht richtig hingekriegt, der Slider war immer ganz unten obwohl noch Einträge nicht angezeigt wurden.

2) (Wenn das überhaupt geht) Es wäre praktisch, dass sich, wenn der Slider verschoben würde, alle Einträge nur um die Höhe eines einzelnen Eintrags (z.B. 20 Pixel) verschieben würden.

Ich probier da jetzt schon länger rum, aber komm noch auf keinen grünen Zweig Confused

Für Hilfe wär ich sehr dankbar!

Grüße,

Danielos
 

OldSkool90

BeitragMi, Feb 17, 2010 20:01
Antworten mit Zitat
Benutzer-Profile anzeigen
keine ahnung wie ich drauf komme und hatte keine zeit es selber zu testen, aber geht das mit der sliderrange vielleicht mit: (AnzahlDerEinträge*HöheEinesEintragsInPixel)/HöheDerScrolleisteInPixel??
HöheDerScrollleiste auf der der Slider sich auch bewegen kan also die Freifläche...nur mal so eine Idee xD

EDIT: UPPS!! kann sein dass ich dich falsch verstanden habe^^sry...es sei denn du meinst mit slider dieses gedöhns auf der scrollleiste?!

d-bug

BeitragMi, Feb 17, 2010 20:09
Antworten mit Zitat
Benutzer-Profile anzeigen
zu 1: Ich nehme mal an du übergibst als Range die Höhe aller Einträge minus der Höhe des Canvas. Übergib lieber
Anzahl Listeneinträge - Canvashöhe / Listeneintraghöhe, und gib dem Canvas eben -(SliderRange*Eintragshöhe) als Y Koordinate. Wenn der Wert zu hoch wird, wird die Knopf-Länge nicht mehr automatisch angepasst, weil sie im Verhältnis zur Höhe der gesamten Slider eh schon zu klein ist. So ist zumindest meine Annahme.

zu 2: Indem du der SliderRange die Listeneinträge - (Canvashöhe / Listeneintraghöhe) übergibst, statt der kompletten Höhe aller Einträge. Dem Canvas gibst du dann als Y Wert -(SliderValue*Eintraghöhe).

So hab ichs zumindest bei meinem Tile-Canvas gemacht, den ich bei einem Editor mal brauchte.
 

danielos

BeitragMi, Feb 17, 2010 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für die Antworten!

@OldSkool90:

Mit Slider meinte ich die Scrollleiste rechts Wink

@d-bug

Sorry aber so ganz versteh ichs noch nicht, vor allem weil ich für die SliderRange doch ZWEI werte übergeben muss (?)

Bisher hatte ich: SetSliderRange Slider , HöhedesCanvas , (Anzahl der Einträge * Eintraghöhe + Höhe der Höhe der Columns)

wobei das mit den Columns noch dazu kommt, weil die ja nicht verschoben werden (aber vllt ist das auch Quatsch Rolling Eyes )

Ich weiß vor allem nie, obs jetzt an der SliderRange liegt, oder daran, dass ich bei SetSliderValue was falsch mach Mad
 

OldSkool90

BeitragMi, Feb 17, 2010 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm dann hab ich dich also richtig verstanden. naja die höhe der columns dürfte dabei doch keine rolle spielen da sie innerhalb des fensters feste objekte sind oder nicht?

also mit (anzahldereinträge * einzeleintraghöhe)/höhederfreiflächederscrollleiste müsstet du doch die größe des sliders einstellen können.

wie man jetz scrollintensität und relative slidergröße in einklang bringt...tja da bin ich überfragt Very Happy

d-bug

BeitragMi, Feb 17, 2010 21:15
Antworten mit Zitat
Benutzer-Profile anzeigen
mal langsamer mit Pseudocode und ohne Rücksichtnahme auf die Header-Zeile:

BlitzMax: [AUSKLAPPEN]
SetSliderRange (Slider, 0, AnzahlDerEinträge - (GadgetHeight(Canvas)/HöheEinesEintrags))


Wenn du jetzt den Canvas zeichnest, ich nehme mal an, du machst das beim triggern von Events:

BlitzMax: [AUSKLAPPEN]
Select EventID()
Case EVENT_GADGETACTION
Select EventSource()
Case Slider
CanvasStartYZumZeichnen = -(SliderValue(Slider) * HöheEinesEintrags)
RedrawGadget(Canvas)
End Select
End Select


Das Arbeiten mit der Anzahl der Einträge statt der Höhe aller Einträge sorgt zumindest schon mal für deinen gewünschten Höhen-Sprung der Einträge statt weich im 1 Pixeltakt zu scrollen.

Wenn du einen neuen Eintrag in die Liste packen möchstest musst du dann natürlich die SliderRange wieder anpassen. Natürlich auch, wenn du einen Eintrag entfernst.
 

OldSkool90

BeitragMi, Feb 17, 2010 21:21
Antworten mit Zitat
Benutzer-Profile anzeigen
ehm ja ich dachte es reicht wenn man alles rein theoretisch betrachtet und er coded sich das alles selber Very Happy

d-bug

BeitragMi, Feb 17, 2010 21:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Deswegen auch nur pseudocode! "Rein theoretisch" hat ers ja nicht wirklich verstanden. :>
 

OldSkool90

BeitragMi, Feb 17, 2010 21:30
Antworten mit Zitat
Benutzer-Profile anzeigen
xD okay jetz musste ich tatsächlich schmunzeln^^ naja ich überlass den echten code den erfahrenen proggern^^
 

danielos

BeitragMi, Feb 17, 2010 21:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich hab leider immer noch Probleme damit... (tut mir wirklich Leid, mir fehlt einfach die Erfahrung mit Slidern Embarassed )

Nur um das kurz klarzustellen:

Der Canvas an sich wird nicht verschoben oder resized, sondern nur sämtliche Einträge der Liste.

Naja ich will nicht weiter rumnerven, vielen Dank für die Hilfe trotzdem!

Werd mich die nächsten Tage eh weiter damit beschäftigen, hab bisher noch alles hingekriegt irgendwann Smile

(Ist schon erstaunlich, wie man die Uni-Klausur am nächsten Tag wegen Slidern so völlig verdrängen kann Very Happy )

Grüße,

Danielos

d-bug

BeitragDo, Feb 18, 2010 8:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Du sollst auch nicht das Canvas verschieben sondern die Zeichen-Position der Einträge
 

danielos

Betreff: Soooo

BeitragDo, Feb 18, 2010 20:12
Antworten mit Zitat
Benutzer-Profile anzeigen
So habs jetzt selbst geschafft, lag glaub ich daran, dass meine Nummerierung der Einträge bei Null begann, nicht bei Eins Wink

Danke für die Hilfen! Very Happy

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group