ScrollAreaGadget IM Screen
ScrollAreaGadget IM Screen
Hallo.
Nun hab ich da mal ein kleines Problem und die Suche hat mir nicht wirklich geholfen.
Ich möchte gerne ein ScrollAreaGadget IN einem (per OpenWindowedScreen()) Screen machen.
Um z.B. einen Textblock (auf einem Sprite gezeichnet) in einem bestimmten Bereich des Screens
anzeigen zu können. (Mit Scrollbalken)
Ich steh da absolut auf dem Schlauch, hab noch nicht einmal eine Ahnung wie ich an das ganze herangehen soll...
Bitte um Hilfe.
Nun hab ich da mal ein kleines Problem und die Suche hat mir nicht wirklich geholfen.
Ich möchte gerne ein ScrollAreaGadget IN einem (per OpenWindowedScreen()) Screen machen.
Um z.B. einen Textblock (auf einem Sprite gezeichnet) in einem bestimmten Bereich des Screens
anzeigen zu können. (Mit Scrollbalken)
Ich steh da absolut auf dem Schlauch, hab noch nicht einmal eine Ahnung wie ich an das ganze herangehen soll...
Bitte um Hilfe.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: ScrollAreaGadget IM Screen
ich habe hier nen kleinen demo-code in meinem archiv, der zumindest schonmal das clipping zeigt. einen simplen scrollbar zu programmieren, der dann die koordinaten steuert ist auch nicht sehr kompliziert
Code: Alles auswählen
InitSprite()
InitMouse()
InitKeyboard()
ww=1024
wh=768
;OpenWindowedScreen(OpenWindow(0,0,0,ww,wh,"..", #PB_Window_BorderLess|#PB_Window_ScreenCentered), 0,0,ww,wh,0,0,0)
OpenScreen(1024,768,32,"fllscrn")
sprw=300
sprh=300
spr=CreateSprite(#PB_Any, sprw,sprh)
StartDrawing(SpriteOutput(spr)) :: DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
For i=0 To 200
Circle(Random(sprw),Random(sprh),Random(32),Random($ffffff))
Next
Box(0,0,8,8,$0000ff)
StopDrawing()
rx1 = 300
ry1 = 250
rx2 = rx1+450
ry2 = ry1+150
Repeat
ems=ElapsedMilliseconds()
If timer < ems
timer=ems+300
fps$=Str(fps)
EndIf
ExamineMouse()
mx=MouseX()
my=MouseY()
; get left clipping border
If mx<rx1
x=rx1-mx
Else
x=0
EndIf
; get top clipping border
If my<ry1
y=ry1-my
Else
y=0
EndIf
; get right clipping border
If mx<rx2
If mx>rx1
w=rx2-mx
Else
w=rx2-rx1
EndIf
Else
w=0
EndIf
; get left clipping border
If my<ry2
If my>ry1
h=ry2-my
Else
h=ry2-ry1
EndIf
Else
h=0
EndIf
ClipSprite(spr,x,y,w,h)
ExamineKeyboard()
StartDrawing( ScreenOutput() )
DrawingMode(#PB_2DDrawing_Outlined|#PB_2DDrawing_Transparent)
Circle(mx,my,10,$00aa00)
Box(mx,my,sprw,sprh)
Box(rx1,ry1,rx2-rx1,ry2-ry1)
StopDrawing()
DisplayTransparentSprite(spr, mx+x, my+y)
FlipBuffers()
ClearScreen($333333)
;Delay(10)
Until KeyboardPushed(#PB_Key_Escape) Or (IsWindow(0) And WindowEvent()=#PB_Event_CloseWindow)
Re: ScrollAreaGadget IM Screen
Danke schonmal... aber genau dieser bucklige Scrollbalken macht mir die meisten Kopfschmerzen
Die Berechnungen der Koordinaten des Clipbereiches, Scrollbalkenposition
und die "Mausbedienung".
Aber diese kleine Demo ist sehr nett anzuschauen

Die Berechnungen der Koordinaten des Clipbereiches, Scrollbalkenposition
und die "Mausbedienung".
Aber diese kleine Demo ist sehr nett anzuschauen

PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
Re: ScrollAreaGadget IM Screen
Du brauchst doch nur mit relativen Werten Spielen:
Anzeigebereich / Gesamtbereich = Balkenhöhe / Gesamtscrollhöhe
Anzeigeposition / Gesamtbereich = Balkenposition / Gesamtscrollhöhe
Dann noch n paar Mausfunktionen wie: Erster Anschalg, und loslassen um das ziehen zu ermöglichen ...
Anzeigebereich / Gesamtbereich = Balkenhöhe / Gesamtscrollhöhe
Anzeigeposition / Gesamtbereich = Balkenposition / Gesamtscrollhöhe
Dann noch n paar Mausfunktionen wie: Erster Anschalg, und loslassen um das ziehen zu ermöglichen ...
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: ScrollAreaGadget IM Screen
Hmmm .... hab' ich da was in Deiner Anfrage überlesen, oder was spricht gegen ein ScrollAreaGadget3D()?Bisonte hat geschrieben:Ich möchte gerne ein ScrollAreaGadget IN einem (per OpenWindowedScreen()) Screen machen.
Um z.B. einen Textblock (auf einem Sprite gezeichnet) in einem bestimmten Bereich des Screens
anzeigen zu können. (Mit Scrollbalken)
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: ScrollAreaGadget IM Screen
Das würde ja die ganze 3D Maschinerie nach sich ziehen, oder nicht ?... und von dem ganzen 3D Krams mit Enti... oder wie das alles heisst hab ich nun überhaupt keinen blassen Schimmer.PureLust hat geschrieben:Hmmm .... hab' ich da was in Deiner Anfrage überlesen, oder warum benutzt Du nicht einfach ein ScrollAreaGadget3D()?Bisonte hat geschrieben:Ich möchte gerne ein ScrollAreaGadget IN einem (per OpenWindowedScreen()) Screen machen.
Um z.B. einen Textblock (auf einem Sprite gezeichnet) in einem bestimmten Bereich des Screens
anzeigen zu können. (Mit Scrollbalken)
Edit: Und soviel ich weiss bin ich dann an das CEGUI gebunden,
wobei ich weniger grafische Gestaltungsmöglichkeiten habe, wenn ich das richtig gelesen habe.
Zuletzt geändert von Bisonte am 07.11.2010 22:13, insgesamt 1-mal geändert.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: ScrollAreaGadget IM Screen
Hab da auch noch nie was mit gemacht, aber hier mal das lauffähige Beispiel aus der PB-Hilfe.Bisonte hat geschrieben:Das würde ja die ganze 3D Maschinerie nach sich ziehen, oder nicht ?... und von dem ganzen 3D Krams mit Enti... oder wie das alles heisst hab ich nun überhaupt keinen blassen Schimmer.
(Müsstest dann halt einfach mal ein ScrollAreaGadget3D() einfügen.)
Code: Alles auswählen
#CameraSpeed = 10
#MainWindow = 0
#CloseButton = 0
Define.f KeyX, KeyY, MouseX, MouseY
If InitEngine3D()
Add3DArchive("Data/", #PB_3DArchive_FileSystem)
Add3DArchive("GUI/", #PB_3DArchive_FileSystem)
Add3DArchive("Data/skybox.zip", #PB_3DArchive_Zip)
InitSprite()
InitKeyboard()
InitMouse()
If OpenWindow(0,0,0,800,600,"3D GUI-Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
If OpenWindowedScreen(WindowID(0),0,0,800, 600, 0,0,0)
SkyBox("desert07.jpg")
CreateCamera(0, 0, 0, 100, 100) ; Front camera
CameraLocate(0,0,100,100)
OpenWindow3D(#MainWindow, 100, 100, 300, 300, "Hello in 3D !")
ButtonGadget3D(#CloseButton, 10, 260, 120, 25, "Close")
ShowGUI(128, 1) ; Display the GUI, semi-transparent and display the mouse cursor
Repeat
Event = WindowEvent()
If ExamineKeyboard()
Input$ = KeyboardInkey()
EndIf
If ExamineMouse()
MouseX = -(MouseDeltaX()/10)*#CameraSpeed
MouseY = -(MouseDeltaY()/10)*#CameraSpeed
InputEvent3D(MouseX(), MouseY(), MouseButton(#PB_MouseButton_Left), Input$)
EndIf
; Handle the GUI 3D events, it's similar to regular GUI events
;
Repeat
Event = WindowEvent3D()
Select Event
Case #PB_Event3D_Gadget
If EventGadget3D() = #CloseButton
CloseWindow3D(#MainWindow)
EndIf
EndSelect
Until Event = 0
RenderWorld()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf
Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf
EndIf
[EDIt:] Hab den Code mal ein wenig von unnötigem Ballast bereinigt.
Zuletzt geändert von PureLust am 07.11.2010 22:34, insgesamt 2-mal geändert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: ScrollAreaGadget IM Screen
Ich sach ja... irgendwas ist bei mir nicht zu sowas fähig
Bei dem Code bekomme ich einen "Assertion failed!" Error...
Expression: !ms_Singleton
Was dass heisst ? Keine Ahnung. Aber diese 3D Windowgeschichten hab ich noch nie wirklich zum laufen bekommen.

Bei dem Code bekomme ich einen "Assertion failed!" Error...
Expression: !ms_Singleton
Was dass heisst ? Keine Ahnung. Aber diese 3D Windowgeschichten hab ich noch nie wirklich zum laufen bekommen.
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom
- PureLust
- Beiträge: 1145
- Registriert: 21.07.2005 00:02
- Computerausstattung: Hab aktuell im Grunde nur noch 'nen Lenovo Yoga 2 Pro im Einsatz.
- Wohnort: am schönen Niederrhein
Re: ScrollAreaGadget IM Screen
Hatte ich eben auch bei meinem ersten Test.Bisonte hat geschrieben:Ich sach ja... irgendwas ist bei mir nicht zu sowas fähig![]()
Bei dem Code bekomme ich einen "Assertion failed!" Error...
Expression: !ms_Singleton
Was dass heisst ? Keine Ahnung. Aber diese 3D Windowgeschichten hab ich noch nie wirklich zum laufen bekommen.
DIESER THREAD hat mir weiter geholfen.
(Im Grunde hab ich nur in den "PB-Einstellungen => Compiler => Standards" das "Aktuelle Verzeichnis" auf das PB-Verzeichnis ("D:\Programme\PureBasic_x64\Examples\Sources\") gesetzt und dann PB nochmal neu gestartet.
Danach hatte es dann auf Anhieb geklappt.)
Hinweis: Habe das vorherige Beispiel inzwischen noch ein wenig reduziert.
[Dynamic-Dialogs] - komplexe dynamische GUIs einfach erstellen
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
[DeFlicker] - Fenster flimmerfrei resizen
[WinFX] - Window Effekte (inkl. 'durchklickbares' Window)
Re: ScrollAreaGadget IM Screen
Jo so funktioniert das beispiel... Aber wie bereits erwähnt, ist das 3D Zeugs nicht wirklich was für mich...
Ist ja nochmehr Mathematik drin
Das muss ja vor dem Windows3D Zeug auch funktioniert haben. Ich probier es mit Stargates "Formeln" grade,
obwohl ich noch nich so ganz rausgefunden hab wie er das meint...
Ist ja nochmehr Mathematik drin

Das muss ja vor dem Windows3D Zeug auch funktioniert haben. Ich probier es mit Stargates "Formeln" grade,
obwohl ich noch nich so ganz rausgefunden hab wie er das meint...
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom