![]() |
AW: Knob value wie feiner abstimmen
Oder du wertest nicht die Pixel aus, die der User mit der Maus fährt, sondern löst das feiner auf. Aber das ist dann auch nicht mehr all zu toll, wenn ich 200 Pixel nach rechts z.B. fahren muss, dass sich da ein wenig was bewegt.
-- Edit: Schau mir mal das Bin.rar an. -- Edit: Also, wenn mich nicht alles täuscht ist das eine logrithmische Skala. Im unteren Bereich wird pro Pixel, die sich die Maus bewegt sehr fein aufgelöst, und ab 1.0db wird pro Pixel 0.2db hinzugezählt bzw. abgezogen. |
AW: Knob value wie feiner abstimmen
Vielleicht nur mal so als Denk-Ansatz:
Ich hatte mir vor ein paar Jährchen mal ein MIDI-Pult aus ein paar Microcontrollern, Touch-Motor-Fadern und echten "Knobs", also Endlos-Incremental-Encodern gebaut. Da war die Auflösung auch anfangs ein Problem (Die mittelpreislichen Encoder haben eine ähnliche miese Hardware-Auflösung mit ca. 32-64 Takten/Umdrehung, was man mit der niedrigen Pixel-Auflösung einer Maus vergleichen kann). Meine Lösung hat dann darauf basiert, dass ich die Auflösung / Wertesprünge, die über den Encoder z.B. an ein VST-Plugin übergeben werden, mit einem Beschleunigungsfaktor gesetzt habe, je nachdem, wie schnell jemand einen Knob / Encoder dreht. Bei langsamen Bewegungen sehr niedriges Increment / Decrement, bei schnellen, zackigen Bewegungen und gleichbleibender Greycode-Änderung dementsprechend weitere Wertesprünge. Diese Beschleunigungs-Tabellen (Greycode-Iterationen / Zeit => Sprungwert) waren dann im Pult auch änderbar. Das wird zwar denke ich mit der Maus in einer PC-Application generell ein wenig schwieriger werden (Zeit messen in einem extrem kurzen Zeitbereich ohne HW-Interrupts wie bei einer MCU ja nicht so ohne weiteres möglich...), aber ich will das mal als Ansatz stehen lassen :) Edit: Echte Studio-Geräte (z.B. die meisten EQs und Kompressoren) haben bei Einstellungen über Drehregler auch oft mehrere "Bereich"-Buttons unter oder neben dem Encoder, die nach Aktivierung eben die gerade aktive Auflösung des Encoders festlegen. So etwas könnte man bei einem GUI-Knob auch relativ userfreundlich gestalten, indem man z.B. durch Klick auf den Knopf (mouse down + up ohne zwischenzeitliches Ziehen) die Auflösungen durchschaltet / rotiert und zusätzlich dann die Auflösung / Pixel neben dem Encoder anzeigt, dessen Farbe ändert oder wie auch immer. Oder eben mit der rechten Maustaste durchschalten lassen. Zuätzliche Keys wie SHIFT oder CTRL abfragen halte ich nicht so für gut, kommt aber auf den Anwendungsfall an. Im Soundbereich ist so etwas eher lästig (meine Meinung), da man die andere Hand meistens eh für andere Aktionen benötigt. Aber das ist Geschmacksache :-) |
AW: Knob value wie feiner abstimmen
Jo, hört sich nicht all zu einfach an, ABER du hast ein super Stichwort genannt, welches, passend implementiert, natürlich auch funktionieren kann. Und zwar spiele ich hier auf das (Teil-)Wort Endlos an, wobei ich nicht einen Knob meine, den man endlos drehen können soll, aber warum sollte nicht mehr als 360 Grad möglich sein?
Beispiel: Wenn du die doppelte Auflösung brauchst, dann sollten halt 720 Grad möglich sein und nicht nur 360. |
AW: Knob value wie feiner abstimmen
Zitat:
Habe es jetzt so umgesetzt das man nach einem Klick oder Drehen des Knobs den Focus auf den Knob bekommt danach ist es dann möglich über Mousewheel die Feineinstellung vorzunehmen. Irgendwie ist das doppelt gemoppelt. Aber ne andere Idee hab ich da zur zeit auch nicht. gruss |
AW: Knob value wie feiner abstimmen
Kannst ja alle genannten mal umsetzen und dann einen Usability Test unter freiwilligen DP-Mitgliedern machen :mrgreen:
|
AW: Knob value wie feiner abstimmen
Du kannst dir auch mal die Demo-Versionen von virtuellen Instrumenten anschauen, oft finden sich dort in der Praxis sehr ansprechende Lösungswege.
Empfehlenswert sind z.B. die GUIs der Tools von ![]() P.S. Und wenn du bei der grafischen Gestaltung der Knobs ein wirklich nettes Tool suchst, das nichts kostet, schau dir mal den ![]() |
AW: Knob value wie feiner abstimmen
Zitat:
Den verwende ich schon seit Anbegin der zeit;) gruss |
AW: Knob value wie feiner abstimmen
Zitat:
Muss jetzt nur mal sehen wo ich meinen alten TollTip Text wieder aktiviere nach dem MouseWeel. Das ist etwas kompliziert da ich ja kein up/down habe wie bei Buttons
Delphi-Quellcode:
Habe meinen alten ToolTip zwischen gespeichert.
WM_MOUSEWHEEL:
begin if not MouseWeel then begin // hole den aktuellen ToolTip und speichere // ihn in die Variable sOldTip hToolTip := ToolTipData(0, 0); sOldTip := SkinEngine.GetCTLText(hToolTip); MouseWeel:= True; end; If wP > 0 then direction := 1 else direction := -1; // Aktuelle Value einlesen WasValue := SkinEngine.GetProperty(WinHandle, KNOB_WAS_VALUE); if direction = 1 then // Neue Value um eins incrementieren tVal := WasValue + 1 else // Neue Value um eins decrementieren tVal := WasValue - 1; // Poperties der aktuellen Value speichern SkinEngine.SetProperty(WinHandle, KNOB_VALUE, tVal); SkinEngine.SetProperty(WinHandle, KNOB_WAS_VALUE, tVal); // Aktuelle Value an die Anwendung schicken SendMessage(GetParent(WinHandle), WM_COMMAND, MAKELONG(GetDlgCtrlID(WinHandle), 0), SkinEngine.GetProperty(WinHandle, KNOB_VALUE)); // Frame Aktualisieren FFrame := tVal; // Value ToolTip setzen SetToolTipText(WinHandle, PWideChar(IntToStr(tVal))); // XOffset Aktualisieren UpdateFramePosition(WinHandle); // Knob Neuzeichnen SkinEngine.FUpdateWindow(WinHandle, False); end; Nur wo soll ich diesen wieder aktivieren ?? HEheheheee
Delphi-Quellcode:
grrrrummel..
// Setze den alten ToolTip für den Knob
SetToolTipText(WinHandle, PWideChar(sOldTip)); Hat sich erledigt :)
Delphi-Quellcode:
gruss
WM_KILLFOCUS:
begin if MouseWeel then begin // Setze den alten ToolTip für den Knob SetToolTipText(WinHandle, PWideChar(sOldTip)); MouseWeel:= False; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz