Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Knob Value berrechnungs problem (https://www.delphipraxis.net/195942-knob-value-berrechnungs-problem.html)

EWeiss 10. Apr 2018 01:47


Knob Value berrechnungs problem
 
Meine Funktion

Delphi-Quellcode:
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;
Mein Problem ist dies, wenn ich in die untere Hälfte des Knob klicke ist die Value 0
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:
  KNOB_GAP = 45 * pi / 180;
  KNOB_ANGLE_RANGE = 2 * pi - KNOB_GAP;
  KNOB_OFFSET_ANGLE = 0.5 * pi + 0.5 * KNOB_GAP;
gruss

KodeZwerg 10. Apr 2018 06:40

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]

EWeiss 10. Apr 2018 13:58

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398599)
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]

Das teil ist von mir und Silhwan wir haben es zusammen Entwickelt.
Aber das hilf mir nicht bei meinem Problem.

Zitat:

// uAARotate_Fast v1.2
//
// This unit is based on the VB code written by Lefteris Eleftheriades.
// Please visit "http://www2.cs.ucy.ac.cy/~cs06ee1/", if you want to know more
// about the background of this unit.

// v1.24 : 31 Dez 2017
// Fixed cpu last after change sec to next Min (was allways 6% now 0%)
// Changed FastAARotatedBitmap from TBitmap to HBitmap
// v1.23 : 3 Apr 2009
// Fixed floating point exception (occured at Transparent = true) (ver 1.20)
// Added a parameter : Scale (ver 1.20)
// Added a parameter : ApplySrcAlpha (ver 1.21)
// Fixed bug at caculating transparency (ver 1.22)
// Fixed bug at caculating color with alpha (ver 1.23)
//
// v1.1 : 23 Mar 2009
// Added a parameter : Transparent
//
// v1.0 : 17 Mar 2009
// Initial release
//
// written by Silhwan Hyun (hyunsh@hanafos.com)
// Co-worker(s) Emil Weiss

unit uAARotateFast;

gruss

KodeZwerg 10. Apr 2018 16:09

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!

EWeiss 10. Apr 2018 16:17

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398652)
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!

Diese Komponente arbeitet auf einer ganz anderen weise das kann man nicht mit dieser hier vergleichen.
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

KodeZwerg 10. Apr 2018 16:25

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.

EWeiss 10. Apr 2018 16:34

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398654)
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.

Sorry auch wenn du helfen möchtest aber die Informationen sind nicht sonderlich hilfreich.
Die Mathematik hat bei mir nachgelassen ;)

Na egal muss mich da irgendwie durchbeißen.

gruss

KodeZwerg 10. Apr 2018 16:39

AW: Knob Value berrechnungs problem
 
Erdbahn, das Mathe Prinzip müsste bei Dir anwendbar sein.

EWeiss 10. Apr 2018 18:28

AW: Knob Value berrechnungs problem
 
Zitat:

Zitat von KodeZwerg (Beitrag 1398656)
Erdbahn, das Mathe Prinzip müsste bei Dir anwendbar sein.

Hmmm...
Die Gradzahl stimmt jetzt.

Delphi-Quellcode:
    Value := ValueFromAngle(Angle) * 360;
    Result := (round(Value) mod 360;
Wenn der Zeiger oben dann 359°
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

EWeiss 10. Apr 2018 21:29

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:
sPercent := (((ptNMHDR.code + 180) mod 360) / 360) * 100;
Percent := round(sPercent);
Hab noch ein paar Zahlen zur besseren Kontrolle addiert.
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 13:52 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz