eigener slider mit image
-
das geht soweit schonmal.
mein code
void __fastcall TForm1::Image7MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Tag = 1; } //--------------------------------------------------------------------------- void __fastcall TForm1::Image7MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if (Tag == 1) Image7->Left = X; } //--------------------------------------------------------------------------- void __fastcall TForm1::Image7MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Tag = 0; } //---------------------------------------------------------------------------jetzt hab ich nur das problem, das das image, was ich verschiebe sehr stark flackert. form1->doublebuffered hab ich auf true.
-
Flackert es auch noch, wenn Du es auf Panel legst, anstatt direkt auf das Form? (beim Panel DoubleBuffered auf true setzen.)
-
Hallo,
ich habe das gleiche Problem, habt jemand eine gute Lösung gefunden?
Habe das Image jetzt auf ein Panel gelegt, nun geht es aber gar nicht mehr.
-
Es funktioniert natürlich trotzdem noch!
Allerdings wackelt es immer noch stark!!void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { switch(Pressed) { case true: Image1->Left = X; Image1->Top = Y; } }So funktioniert es natürlich nicht, weil ja die Maus-Position nicht gleich Left,Top ist.
Jemand einen Plan?
-
Hallo
das wird daran liegen, das MouseMove einfach zu oft aufgerufen wird.
Eventuell hilft eine Überprüfung, ob die Position sich wirklich verändert hat, bevor du diese als Koordinaten übergibst. Außerdem kannst du mit SetBounds() beide Koordinaten gleichzeitig setzen.bis bald
akari
-
Das Problem ist aber, das ich die Mausposition auf dem Bild abfragen und dann das Bild verschiebe. Ich müsste die Position auf dem Formular wissen, aber da ist ja das Bild drüber.
Irgend eine Idee,oder vielleicht muss ich ja das Bild nicht verschieben, sondern nur den Inhalt neu zeichnen. Habe aber momentan keinen Plan.
-
Hallo
Ich müsste die Position auf dem Formular wissen, aber da ist ja das Bild drüber.Dann kannst du doch die "globale Position" berechnen :
XForm = LeftImage + XMouse; // X-koordinate auf Form umrechnen YForm = TopImage + YMouse; // Y-koordinate auf Form umrechnenbis bald
akari
-
Vielen Dank dafür,
jetzt sieht es schon etwas besser aus!
void __fastcall TForm1::Image1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { int XForm,YForm; switch(Pressed) { case true: XForm = Image1->Left + X; // X-koordinate auf Form umrechnen YForm = Image1->Top + Y; // Y-koordinate auf Form umrechnen Image1->Left =X+XForm; Image1->Top = Y+YForm; char xPos[10]; char yPos[10]; itoa(X, xPos, 10); itoa(Y, yPos, 10); lbHorz->Caption = xPos; lbVert->Caption = yPos; } }ich habe mir jetzt immer die X,Y Maus-Daten mit ausgeben lassen,
die wechseln ständig ihr Vorzeichen.
Ich kann mir das nicht erklären, deshalb flackert es auch so extrem!
Weiß auch dazu noch jemand Hilfe?
Ich wollte noch sagen Ihr seid die Besten
-
Hallo
char xPos[10]; char yPos[10]; itoa(X, xPos, 10); itoa(Y, yPos, 10); lbHorz->Caption = xPos; lbVert->Caption = yPos;ist nicht dein Ernst, oder?
schau mal :lbHorz->Caption = IntToStr(X); lbVert->Caption = IntToStr(Y);bis bald
akari
-
Hallo akari,
vielen Dank für die schnelle Antwort, aber das ist momentan nicht mein Problem, sondern das Flackern!
Aber ich werde es ändern.