![]() |
Knob Value berrechnungs problem
Meine Funktion
Delphi-Quellcode:
Mein Problem ist dies, wenn ich in die untere Hälfte des Knob klicke ist die Value 0
function TSkinSpriteContainer.XXX(ObjID, X, Y: Integer): Integer;
var Item: Integer; Angle: Single; Value: single; Width, Height: Integer; Frames: Integer; function ValueFromAngle(Angle: single): single; var RelativeAngle: single; begin RelativeAngle := Angle - KNOB_OFFSET_ANGLE; if RelativeAngle < 0 then RelativeAngle := RelativeAngle + 2 * pi; Result := (RelativeAngle) / KNOB_ANGLE_RANGE; if Result > 1.0 then begin if RelativeAngle < 0.5 * KNOB_ANGLE_RANGE + pi then Result := 1 else Result := 0; end; end; begin Result := 0; Item := gItemFromID(ObjID); if (Item > -1) then begin Frames := g_Obj[Item].x2 div g_Obj[Item].y2; Height := g_Obj[Item].y2; Width := g_Obj[Item].x2 div Frames; X := x - g_Obj[Item].x1; Y := Y - g_Obj[Item].y1; Angle := arctan2(Y - (Height div 2), X - (Width div 2)); Value := ValueFromAngle(Angle) * 360; Result := round(Value); OutputDebugStringW(PWideChar(IntToStr(Result))); end; end; klicke ich in die obere hälfte ist sie 180. Was ich aber erreichen möchte ist das sie oben bei 0 anfängt egal wo ich im Knob klicke. Wenn ich nach rechts drehe soll sie inkrementieren und nach links von 360 ab dekrementieren. Bekomme das im Moment nicht gebacken was läuft bei meiner Berechnung falsch?
Delphi-Quellcode:
gruss
KNOB_GAP = 45 * pi / 180;
KNOB_ANGLE_RANGE = 2 * pi - KNOB_GAP; KNOB_OFFSET_ANGLE = 0.5 * pi + 0.5 * KNOB_GAP; |
AW: Knob Value berrechnungs problem
Liste der Anhänge anzeigen (Anzahl: 1)
Im Anhang ein Knob von Delphi Area, ich mag ihn.
[Edit] Ich weiß das Dir das so nicht weiterhilft weil der VCL ist und so, aber als Grundlage für eine Portierung nach deinem Style wäre der Hilfreich da bereits sehr komplex ausgebaut. [/Edit] |
AW: Knob Value berrechnungs problem
Zitat:
Aber das hilf mir nicht bei meinem Problem. Zitat:
gruss |
AW: Knob Value berrechnungs problem
Hat ich noch gar nicht bemerkt, war nur in der Knob.pas gucken, na wenn's von Dir kommt muss es ja gefallen :thumb:
Aber mal im Ernst, wenn ich 'nen Knob brauchte hab ich immer das verwendet weil's einfach nur gut ist. Und Schade das es Dir selbst nicht hilft! |
AW: Knob Value berrechnungs problem
Zitat:
Und die AARotateFast hat nichts mit der Value sondern mit dem Drehen von Objekten zu tun.. nur das hat nichts mit meinen Problem zu tun! Mein Problem ist nicht das zeichnen sondern die Berechnung der value. Ich werte es jetzt in meiner Anwendung so aus.
Delphi-Quellcode:
Percent := round(((ptNMHDR.code + 180) mod 360) / 360) * 100;
es funktioniert jetzt egal wo sich die Maus befindet das Problem ist nur ich komme nicht über 180 grad hinaus. Irgendwas stimmt noch nicht. Man wird Alt und viele Fähigkeiten gehen verloren. LOL gruss |
AW: Knob Value berrechnungs problem
Ohne das ich mich je selbst an so etwas rangewagt habe, ich würde mir wahrscheinlich sowas wie eine unsichtbare Trackbar auf ein Shape legen, und anhand dessen Position einen Wert zwischen 0-360 geben lassen um mit dem Wert ein Shape rotieren zu lassen, je nach Trackbar Style halt mit Maus links/rechts oder hoch/runter, aber ich geh da bestimmt völlig falsch ran.
|
AW: Knob Value berrechnungs problem
Zitat:
Die Mathematik hat bei mir nachgelassen ;) Na egal muss mich da irgendwie durchbeißen. gruss |
AW: Knob Value berrechnungs problem
![]() |
AW: Knob Value berrechnungs problem
Zitat:
Die Gradzahl stimmt jetzt.
Delphi-Quellcode:
Wenn der Zeiger oben dann 359°
Value := ValueFromAngle(Angle) * 360;
Result := (round(Value) mod 360; Wenn der Zeiger unten dann 180° Wie muss ich jetzt auf Prozent umrechnen damit ich bei 359° = 50% bekomme?
Delphi-Quellcode:
Percent := round(((ptNMHDR.code + 180) mod 360) / 360) * 100;
Dachte so, funktioniert aber nicht richtig. ptNMHDR.code := GradZahl Scheiße wenn man so viel vergisst. ;) :duck: gruss |
AW: Knob Value berrechnungs problem
Liste der Anhänge anzeigen (Anzahl: 1)
Ok geht jetzt. :)
Berechnung war schon richtig nur mein Daten Typ nicht. Erst Single anschließend zu Integer sonst wird das nix.
Delphi-Quellcode:
Hab noch ein paar Zahlen zur besseren Kontrolle addiert.
sPercent := (((ptNMHDR.code + 180) mod 360) / 360) * 100;
Percent := round(sPercent); Und die ZOrder stimmt immer noch nicht kommt aber noch, ärgerlich wenn man selbst einen Fehler produziert hat und findet ihn nicht.. Lustig! Selbst ist der Mann. gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:04 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