ProgressBar zum Lautstärke regeln!
-
Hallo,
Ich will eine ProgressBar als Lautstärkeregler benutzen. Nun will ich mit der Maus die Eigentschaft ProgressBar::Position verändern.
Überlegung (Mit Frage versehen):
bool changing=false; [i]ProgressBar::OnMouseDown[/i] changing=true; int StartX=X; //X-Wert der Maus Position merken! (Ursprungspunkt) [i]ProgressBar::OnMouseMove[/i] if(changing){ int EndX=X; //X-Wert des Neuen 2.Punktes speichern! int diff=StartX-EndX; //X-Achsenverschiebung (Differenz) diff= //Wie wird jetzt in einen "POSITION-Wert" umgerechnet? if(StartX>EndX) //Wenn nach Links verschoben wurde ProgressBar->Position-=diff; else //Es wurde nach Rechts oder garnicht verschoben ProgressBar->Position+=diff; } [i]ProgressBar::OnMouseUp[/i] changing=false;Vielen Dank im Voraus!
mfg
cb
-
Warum nimmst du keinen TrackBar?
-
das sieht doch hübscher aus mit trackbar.

hab mal ein winamp mod gesehn, dass nur aus touchscreen elementen bestand
[edit] irgendwie bin ich heut durchn wind [edit]
-
int Range = ProgressBar->Max - ProgressBar->Min; // Bereich in POS. Werten (%?) int Step = ProgressBar->Width / Range; // Bereich in Pixeln diff /= Step; // Differenz von POS. zu Pixeln // oder in einer Zeile diff /= ( ProgressBar->Width / (ProgressBar->Max - ProgressBar->Min) );hoff da sind jetzt nicht wieder x fehler drin..
[edit] eben doch [/edit]
-
Hallo,
ne also das funzt noch nicht wirklich :DD Wenn ich jetzt versuche die Position der ProgressBar mit Hilfe der Maus zu verändern (Startwert=50 Max=100), ist es egal in welche Richtung ich diese bewege, der Positions-Wert nimmt ab bis zu 0 und fertig.
Weiß jemand Rat?
mfg cb
-
poste nochmal dein aktuellen code bitte
-
Hallo,
hier der aktuelle Code: (Vol = ProgressBar, und Variablen StartX EndX und changing im Header deklariert!)
void __fastcall TfrmPlayer::VolMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { changing=true; StartX=X; //X-Wert der Maus Position merken! (Ursprungspunkt) } //--------------------------------------------------------------------------- void __fastcall TfrmPlayer::VolMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { changing=false; } //--------------------------------------------------------------------------- void __fastcall TfrmPlayer::VolMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(changing){ EndX=X; //X-Wert des Neuen 2.Punktes speichern! int diff=StartX-EndX; //X-Achsenverschiebung (Differenz) diff /= ( Vol->Width / (Vol->Max - Vol->Min) ); if(StartX>EndX) //Wenn nach Links verschoben wurde Vol->Position-=diff; else //Es wurde nach Rechts oder garnicht verschoben Vol->Position+=diff; } } //---------------------------------------------------------------------------mfg
cb
-
OK also ein Fehler behoben! Jetzt gehts nach rechts und links, jedoch sehr rupig und auch teils verzögert. Außerderm kommt wenn ich als Max-Wert 1000 und Position auf 500 setzte, bei der ersten Bewegung Fehler wegen Division durch Null!:
void __fastcall TfrmPlayer::VolMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { changing=true; StartX=X; //X-Wert der Maus Position merken! (Ursprungspunkt) } //--------------------------------------------------------------------------- void __fastcall TfrmPlayer::VolMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { changing=false; } //--------------------------------------------------------------------------- void __fastcall TfrmPlayer::VolMouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(changing){ EndX=X; //X-Wert des Neuen 2.Punktes speichern! int diff=StartX-EndX; //X-Achsenverschiebung (Differenz) diff /= ( Vol->Width / (Vol->Max - Vol->Min) ); Vol->Position-=diff; } } //---------------------------------------------------------------------------mfg
cb
-
folgendes:
meine rechnung hatte nen Fehler
die pixel-pro-step muss man durch die anzahl pixel teilen, war grad verkehrt rum.
die zero division natürlcih abfangen
die startpos musste nach jedem move auf die aktuelle pos setztenEndX = X; diff=EndX-StartX; step = ( ProgressBar1->Width / (ProgressBar1->Max - ProgressBar1->Min) ); if( diff != 0 ) //<--- Hier diff = step/diff; //<--- Hier Label1->Caption = IntToStr( diff ); ProgressBar1->Position+=diff; StartX = X; //<--- Hierein problem hab ich noch, das verhältniss stimmt nicht..
in welcher einheit sind die X/Y koordinaten der mouse? Sind das nicht pixel?
-
Hallo,
Gute Frage! In der Hilfe steht zur Point-Struktur nur:
Stellt ein geordnetes Paar von x- und y-Koordinaten als Ganzzahlen dar, das einen Punkt in einem zweidimensionalen Raum definiert.mfg cb
-
1310-Logik schrieb:
in welcher einheit sind die X/Y koordinaten der mouse? Sind das nicht pixel?
Ja, das sind Pixel.