Breite von Scrollbars ändern (evtl. per SetSystemMetric ???)
- 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
Breite von Scrollbars ändern (evtl. per SetSystemMetric ???)
Hallo zusammen, ...
ich versuche, für eine TouchScreen-Anwendung die vertikalen Scrollbars von z.B. einem ListIconGadget oder einem ComboBoxGadget zu verbreitern, damit die Anwender diese besser auf dem Touchscreen treffen und auch verschieben können.
Meine Forensuche hat leider nur eine Möglichkeit für das ScrollBarGadget selber zu Tage gebracht (Link), nicht jedoch für die Scrollbars anderer Gadgets.
Per GetSystemMetric_() kann man ja z.B. die generelle (systemweite) Breite von vertikalen Scrollbars auslesen.
Ist es denn ggfl. auch irgendwie möglich, diese SystemMetrics zu setzen, oder eben für die o.g. Gadgets die Breite des vertikalen Scrollers zu verändern?
Wäre toll wenn mir da jemand einen Tip geben könnte.
ThanX und Gruß, PL.
ich versuche, für eine TouchScreen-Anwendung die vertikalen Scrollbars von z.B. einem ListIconGadget oder einem ComboBoxGadget zu verbreitern, damit die Anwender diese besser auf dem Touchscreen treffen und auch verschieben können.
Meine Forensuche hat leider nur eine Möglichkeit für das ScrollBarGadget selber zu Tage gebracht (Link), nicht jedoch für die Scrollbars anderer Gadgets.
Per GetSystemMetric_() kann man ja z.B. die generelle (systemweite) Breite von vertikalen Scrollbars auslesen.
Ist es denn ggfl. auch irgendwie möglich, diese SystemMetrics zu setzen, oder eben für die o.g. Gadgets die Breite des vertikalen Scrollers zu verändern?
Wäre toll wenn mir da jemand einen Tip geben könnte.
ThanX und Gruß, PL.
Zuletzt geändert von PureLust am 13.08.2006 18:46, insgesamt 1-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)
- 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
Hallöchen nochmal, ...
hätte denn niemand eine Idee, wie man vielleicht die SystemMetrics verändern könnte?
Oder weiss jemand, ob man sowas vielleicht über ein eigenes Windows-Theme (halt mit breiten Scrollbalken) machen könnte und wie man ein solches Themes verändern bzw. komplett eigene erstellen könnte?
Gibt es da evtl. Windows Themes-Editoren für?
ThanX, PL.
hätte denn niemand eine Idee, wie man vielleicht die SystemMetrics verändern könnte?

Oder weiss jemand, ob man sowas vielleicht über ein eigenes Windows-Theme (halt mit breiten Scrollbalken) machen könnte und wie man ein solches Themes verändern bzw. komplett eigene erstellen könnte?
Gibt es da evtl. Windows Themes-Editoren für?
ThanX, PL.
[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)
- 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
Hmmm .... was genau meinst Du, könnte mir denn ein ScrollAreaGadget bringen?#NULL hat geschrieben:da du ScrollAreaGadget() noch nich erwähnt hast, mach ich das hiermit mal,...
Latürnich. Die Treibersoftware eines Touchscreens setzt natürlich die Touches direkt in Mausmoves und Klicks um ... das ist also nicht das Problem.#NULL hat geschrieben:könntest du nicht die daten vom touchscreen einfach benutzten um die maus zu setzten und maus-clicks simulieren?
Das Problem das es im Grunde zu lösen gilt, sind die dicken Finger der Bediener !!!
Ein Touchscreen (und natürlich auch die menschlichen Finger) sind nunmal leider nicht so präzise wie eine 1200 DPI Maus - daher ist es über einen Touchscreen recht schwierig kleinere Dinge (oder eben schmale Dinge wie einen Scrollbalken) punktgenau zu treffen.
Ich suche also irgend eine generelle (oder auch Gadget spezifische) Möglichkeit die Breite der Scrollbalken zu erhöhen, damit man diese besser treffen kann.
(Fast) Alles andere (Zeilenhöhe von ListIconGadgets, ButtonGröße, etc.) sind natürlich bereits auf die besonderen Bedürfnisse einer TouchScreen-Anwendung angepasst.
Das einzig wirklich große Problem was ich habe und was die Bedienung doch recht erschwert, sind die zu schmalen Scrollbalken.
So zur Info: Das System läuft auf einem IP54 zertifizierten 17" Industrie-TFT bei einer Auflösung von 1280 x 1024 Punkten und verwendet einen kapazitiven IntelliTouch.
Bei der verwendeten Auflösung (die auch nicht verringert werden kann/darf) sind die Scrollbalken mit den blossen Fingern halt nur sehr schwer zu treffen.
Vielleicht noch jemand 'ne Idee, wie man das lösen könnte?

Zuletzt geändert von PureLust am 13.08.2006 18:40, insgesamt 1-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)
- 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
Falls Du auf "GestSystemMetrics()" ansprichst ... das wäre natürlich zu einfach und zu schön um wahr zu sein !!!Dr. Shrek hat geschrieben:Zu einem Get....() gibt es oft auch eine Set...()
Leider gibt es dazu (laut MSDN) aber kein passendes "SetSystemMetrics()" (oder ich hab' es nicht gefunden).

Auch bei SystemParametersInfo() hab ich keine passenden Einstellungsmöglichkieten gefunden.
[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)
vorsicht , geht systemweit und sieht scheisse aus
.

Code: Alles auswählen
ncm.NONCLIENTMETRICS\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS,0,@ncm,0)
ncm\iScrollWidth = 30
ncm\iScrollHeight = 30
SystemParametersInfo_(#SPI_SETNONCLIENTMETRICS,0,@ncm,0)
- 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
That's it !!!
@#Null:
SetWindowLong_() und auch der Link hat mich leider nicht wirklich weiter gebracht - aber dennoch vielen Danke für den Versuch.
@edel :
WOW !!! Das war genau, was ich gesucht hatte !!! Vielen, vielen Dank !!!
Die systemweite Veränderung ist ja wie gesagt kein Problem, da es sich ja ohnehin um ein reines Touchscreen-System handelt und die Anwendung die einzige ist und noch dazu im FullScreen arbeitet.
Damit ich's am Ende des Programms aber dennoch wieder auf die ursprünglichen Werte zurückstellen kann, hab ich mir das ganze noch in zwei kleine Prozeduren gepackt.
Für den, den's interessiert wie sowas dann aussieht (nur mal ein kleines Testbeispiel):
Einziger kleiner Schönheitsfehler: Die Systray-Icons bleiben bis zum nächsten Neustart verhundst - aber damit kann man wohl leben. 
Also nochmals tausend Dank an Alle für die Hilfe - hätte ich aus eigener Kraft wohl keine Lösung für gefunden.
Biiiiiiiig ThanXXX !!!
PL.
SetWindowLong_() und auch der Link hat mich leider nicht wirklich weiter gebracht - aber dennoch vielen Danke für den Versuch.

@edel :
WOW !!! Das war genau, was ich gesucht hatte !!! Vielen, vielen Dank !!!





Die systemweite Veränderung ist ja wie gesagt kein Problem, da es sich ja ohnehin um ein reines Touchscreen-System handelt und die Anwendung die einzige ist und noch dazu im FullScreen arbeitet.
Damit ich's am Ende des Programms aber dennoch wieder auf die ursprünglichen Werte zurückstellen kann, hab ich mir das ganze noch in zwei kleine Prozeduren gepackt.
Für den, den's interessiert wie sowas dann aussieht (nur mal ein kleines Testbeispiel):
Code: Alles auswählen
Procedure SetSystemScrollBarSize(Width,Height)
Shared OrigScrollBarWidth, OrigScrollBarHeight
Protected ncm.NONCLIENTMETRICS\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS,0,@ncm,0)
If OrigScrollBarWidth < 1 : OrigScrollBarWidth = ncm\iScrollWidth : EndIf
If OrigScrollBarHeight < 1 : OrigScrollBarHeight = ncm\iScrollHeight : EndIf
If Width > 0 : ncm\iScrollWidth = Width : EndIf
If Height > 0 : ncm\iScrollHeight = Height : EndIf
SystemParametersInfo_(#SPI_SETNONCLIENTMETRICS,0,@ncm,0)
EndProcedure
Procedure RestoreSystemScrollBarSize()
Shared OrigScrollBarWidth, OrigScrollBarHeight
Protected ncm.NONCLIENTMETRICS\cbSize = SizeOf(NONCLIENTMETRICS)
SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS,0,@ncm,0)
If OrigScrollBarWidth > 1 : ncm\iScrollWidth = OrigScrollBarWidth : EndIf
If OrigScrollBarHeight > 1 : ncm\iScrollHeight = OrigScrollBarHeight : EndIf
SystemParametersInfo_(#SPI_SETNONCLIENTMETRICS,0,@ncm,0)
EndProcedure
If OpenWindow(0,0,0,400,300,"BIG Scrollbars",#PB_Window_ScreenCentered | #PB_Window_SystemMenu)
SetSystemScrollBarSize(30,30)
ExamineDesktops()
LoadFont(0,"Arial",18)
If CreateGadgetList(WindowID(0))
ListIconGadget(1, 2, 2, WindowWidth(0)-4, WindowHeight(0)-46, "Testspalte", WindowWidth(0)*2)
ComboBoxGadget(2, 2, WindowHeight(0)-40, WindowWidth(0)-4, DesktopHeight(0))
EndIf
SetGadgetFont(1,FontID(0))
SetGadgetFont(2,FontID(0))
For Counter = 1 To 100
If Counter < 20 : AddGadgetItem(1, -1,"Dies ist Testeintrag "+Str(Counter)) : EndIf
AddGadgetItem(2, -1,"Eintrag "+Str(Counter))
Next Counter
SetGadgetState(2, 53)
Repeat
Event = WaitWindowEvent()
Until Event = #PB_Event_CloseWindow
CloseWindow(0)
RestoreSystemScrollBarSize()
EndIf

Also nochmals tausend Dank an Alle für die Hilfe - hätte ich aus eigener Kraft wohl keine Lösung für gefunden.
Biiiiiiiig ThanXXX !!!

PL.
[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)