Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Kleines rechnen problem (https://www.delphipraxis.net/160258-kleines-rechnen-problem.html)

EWeiss 4. Mai 2011 22:55

Kleines rechnen problem
 
opps .. ja vielleicht ist es auch schon zu spät für mich

Habe 16 Trackbars [0..15] und eine MasterTrackbar
Beide haben eine Maxvalue von 100.

Wenn ich bei der ersten Trackbar[0] eine value von 65 habe
und die anderen alle eine Value von 35.

Wie berechne ich das jetzt am besten das beim verschieben der MasterTrackbar
alle Trackbars abhängig von der aktuellen MasterTrackbar value verschoben werden
aber ohne die maximale value von 100 zu überschreiten aber die alte Value der TrackBars[0..15] zu behalten (quasi zur MasterTrackbar addieren).


gruss

Aphton 4. Mai 2011 23:03

AW: Kleines rechnen problem
 
Zitat:

Zitat von EWeiss (Beitrag 1098915)
Wenn ich bei der ersten Trackbar[0] eine value von 65 habe und die anderen alle eine Value von 35.

Dann?

Edit: Dein Problem ist schwer verständlich!

EWeiss 4. Mai 2011 23:11

AW: Kleines rechnen problem
 
Zitat:

Zitat von Aphton (Beitrag 1098917)
Zitat:

Zitat von EWeiss (Beitrag 1098915)
Wenn ich bei der ersten Trackbar[0] eine value von 65 habe und die anderen alle eine Value von 35.

Dann?

Edit: Dein Problem ist schwer verständlich!

Ok sagen wir mal so

Meine MasterTrackbar hat eine aktuelle Value von 50.
Meine anderen Trackbars[0..15] haben auch eine Value von 50.

Dann mache ich folgendes!
Delphi-Quellcode:
For IntI := 0 to 15
 Trackbars[IntI] := MasterTrackbar.Value;
Damit verschiebe ich jetzt alle Trackbars von 0..15 abhängig von der MasterTrackbar.Value

Wenn ich aber nun Trackbars[0] > 50 habe bsp. 75
wäre dann beim verschieben der MasterTrackbar wenn diese die maximale Value erreicht hat
bei der Trackbars[0] eine Value von 125 oder?

Das darf aber nicht sein da die Hundert nicht überschritten werden darf.
Ich möchte die alten value's behalten wenn die MasterTrackbar verschoben wird.
Aber mit
Delphi-Quellcode:
Trackbars[0] := Trackbars[0] + MasterTrackbar.Value

komme ich nicht klar das es ja auch negative werte gibt wenn ich die MasterTrackbar nach links scrolle.

Vielleicht ist das verständlicher.

gruss

Aphton 4. Mai 2011 23:18

AW: Kleines rechnen problem
 
Bei deinem Pseudocode verschiebst du nichts, du weißt allen Trackbars Elementen denselben Wert zu.

Aber zum angesprochenen Problem:
Schau dir mal die Funktion Math.Min an!

Min(a, b) liefert dir den kleineren Wert aus der Menge {a, b}
Also wenn a < b, dann a, ansonsten b!

Du könntest dann, falls du verschiebst (also einen Wert auf den aktuellen draufaddierst) bei der Zuweisung per Min(NeuerWert, 100) dafür sorgen, dass der Wert 100 nicht überschritten wird.

Ich schätze mal dein Pseudocode war so gemeint:
Delphi-Quellcode:
For IntI := 0 to 15 do
 Trackbars[IntI] := Trackbars[IntI] + MasterTrackbar.Value;
Dann solltest du folgendes machen:
Delphi-Quellcode:
For IntI := 0 to 15 do
 Trackbars[IntI] := Min(Trackbars[IntI] + MasterTrackbar.Value, 100);
Btw. bin mir nicht ganz sicher, was Min für einen Typ zurückliefert. Falls es ein Fließkommawert ist, müsste noch ein Round vornedran!

Edit: Faaalllss ich dein Problem richtig verstanden habe...

EWeiss 4. Mai 2011 23:22

AW: Kleines rechnen problem
 
Hier mal der originale Code
hab ihn geändert.
Delphi-Quellcode:
        ID_TRACK_MASTERVOL:
        begin
          TempVal := SKAERO_GetTrackValue(SKAERO_GetMainItem(MainHandle, wp));
          for IntI := 0 to 15 do
          begin
            Volume[IntI] := Min(Volume[IntI] + TempVal, 100);
            SKAERO_SetTrackValue(SKAERO_GetMainItem(MainHandle, ID_VOLUME_FIRST + IntI), Volume[IntI]);
          end;
        end;
Aber auch das funktioniert nicht. :(

EDIT:
Wenn ich nur 3 pixel weiterfahre habe ich schon 100% bei allen 16 Trackbars.
Dürfen sie aber erst haben wenn TempVal ebenfalls 100% hat

Beim runterscrollen der (TempVal) bleiben alle Trackbars auf 100%

gruss

Aphton 4. Mai 2011 23:26

AW: Kleines rechnen problem
 
Was genau funktioniert nicht? Mit Min kannst du den Wert 100 nie überschreiten.
Könntest du den Fehler genauer beschreiben?
Poste mal welche Werte welche Variablen annehmen und welche sie annehmen sollten!

EWeiss 4. Mai 2011 23:29

AW: Kleines rechnen problem
 
Zitat:

Zitat von Aphton (Beitrag 1098921)
Was genau funktioniert nicht? Mit Min kannst du den Wert 100 nie überschreiten.
Könntest du den Fehler genauer beschreiben?
Poste mal welche Werte welche Variablen annehmen und welche sie annehmen sollten!

Schau mal mein Pic..

Volume[IntI] Min = 0; Max 100
Das selbe bei der MasterVolume

gruss

Aphton 4. Mai 2011 23:31

AW: Kleines rechnen problem
 
Willst du, dass die 1..16 Regler den Wert des Masterreglers nicht überschreiten?

EWeiss 4. Mai 2011 23:33

AW: Kleines rechnen problem
 
Zitat:

Zitat von Aphton (Beitrag 1098923)
Willst du, dass die 1..16 Regler den Wert des Masterreglers nicht überschreiten?

Ich möchte das die Regler ihren wert behalten aber komplett mit dem Masterregler verschoben werden.
Qasi eine inc/decrementierung aller aktuellen Valus abhängig vom Masterregler.

EDIT:
Ohne das der Regler mit der höchsten Value die Hundert überschreitet.
Bzw.. der mit der niedrigsten Value die 0 unterschreitet.

Alle anderen sollen dann solange inc/dec bis der mit der höchsten/niedrigsten Value 0 oder 100 erreicht hat.

gruss

BUG 4. Mai 2011 23:39

AW: Kleines rechnen problem
 
Du könntest für jeden Regler die Position relativ zum Masterregler speichern und dabei aufpassen, das die absoluten Werten im gewünschten Bereich bleiben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:24 Uhr.
Seite 1 von 3  1 23      

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