gelöst: Form verschieben
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
gelöst: Form verschieben
Ich möchte die beiden einstellungen Form.Top und Form.Left exakt im selben moment ändern. ist das möglich?
edit: post umbenannt in "Form verschieben" am 3.3.11 um 22:54
edit: post umbenannt in "Form verschieben" am 3.3.11 um 22:54
Zuletzt geändert von Bauer321 am So 6. Mär 2011, 17:45, insgesamt 3-mal geändert.
www.mcpatcher.net | www.hoeper.me
Re: 2 Sachen gleichzeitig machen
Ich weiss zwar mal wieder nicht wie du das genau meinst, aber mit SetBounds geht sowas in einem Kommando.
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: 2 Sachen gleichzeitig machen
hmm...
habe ich anscheinend die fehlerursache doch nicht richtig erkannt ich möchte, das meine fenster ohne rand wenn man auf es klickt und gedrückt hält verschoben werden kann.
jedoch wackelt dieses dann immer so komisch hin und her woran liegt das?
[/size]
Da einfach mal zum test auf die FOrm klicken, gedrückt halten und den Zeiger ein wenig bewegen und dann fällt auf das die Form immer hin und her hüpft was mir nicht so gefällt.
habe ich anscheinend die fehlerursache doch nicht richtig erkannt ich möchte, das meine fenster ohne rand wenn man auf es klickt und gedrückt hält verschoben werden kann.
jedoch wackelt dieses dann immer so komisch hin und her woran liegt das?
[/size]
Da einfach mal zum test auf die FOrm klicken, gedrückt halten und den Zeiger ein wenig bewegen und dann fällt auf das die Form immer hin und her hüpft was mir nicht so gefällt.
www.mcpatcher.net | www.hoeper.me
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: 2 Sachen gleichzeitig machen
Vielleicht hättest du besser den entsprechenden Quellcode zur Verfügung gestellt. Die Dateien, die mir mein Archivierungsprogramm bei deiner Dateianbietet sind nämlich keine Text-Dateien... 

MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: 2 Sachen gleichzeitig machen
das sollte ja auch nur zur veranschaukichung des fehlers sein 
also ich verwende das mousedown, das mouseup ereignis und einen timer, welcher bei mousedown gestratet bzw bei mouseup beendet wird.
der Timer hat das intervall 100 und führt diesen code aus:
das geht ja auch alles nur ist es sehr unschön das die Form immer so hin und her "springt"

also ich verwende das mousedown, das mouseup ereignis und einen timer, welcher bei mousedown gestratet bzw bei mouseup beendet wird.
der Timer hat das intervall 100 und führt diesen code aus:
Code: Alles auswählen
//timerformpostion = ein Timer
//z = TPoint
//das man evtl ja gut nen timer nehmen kann hab ich mir einfach so ausgedacht^^
procedure TFMain.timerformpostionTimer(Sender: TObject);
begin
//ScreenToClient(Point(Mouse.CursorPos.X,Mouse.CursorPos.Y)) hab ich hier im Forum gefunden
z := ScreenToClient(Point(Mouse.CursorPos.X,Mouse.CursorPos.Y));
//Hier war vorher FMain.Top := z.x, FMain.Left := z.y;
//habe ich aber siehe oben durch SetBounds erstzt da ich vemutet hatte das der fehler durch den zeitunterschied entsteht was aber leider nciht der fall war
FMain.SetBounds(z.x,z.y,FMain.Width,FMain.Height);
end;
//zur ergänzung hier der rest
//das hab ich mir auch einfach so überlegt^^
procedure TFMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
timerformpostion.enabled := true;
end;
procedure TFMain.FormMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
timerformpostion.enabled := false;
end;
das geht ja auch alles nur ist es sehr unschön das die Form immer so hin und her "springt"
www.mcpatcher.net | www.hoeper.me
Re: 2 Sachen gleichzeitig machen
TThread
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!
it´s not a bug, it´s a feature!
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: 2 Sachen gleichzeitig machen
nach den ergebnissen weiter oben denke ich eher das ich das nicht brauchen werdefelix96 hat geschrieben:TThread
www.mcpatcher.net | www.hoeper.me
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Form verschieben
Wärs nicht einfach im MouseMove die Differenz zur letzten Mausposition zu berechnen?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Form verschieben
und wie soll man dann das fenster nach oben links bekommen?
edit: hast recht müsste auch gehen kann ich ja morgen sonst auch nochmal ausprobieren...
die positionen werden ja alle richtig "übernommen" nur irgendwie wird entwerder der eine oder der andere wert versetzt übernommen
edit: ich hab gerade mal nen kleinen test gemacht und der hat ergeben das ich die korrdinaten anscheinend flasch bestimme
ich habe einfach mal an einer stelle gehalten und das ganze in ein memo protokollieren lassen dabei kam folgendes raus:
außerdem habe ich hier eine kleine änderung vorgenommen:
(ich hatte vorher vergessen einzuberechnen das man ja irgendwo auf der form klicken kann)
edit: hast recht müsste auch gehen kann ich ja morgen sonst auch nochmal ausprobieren...
die positionen werden ja alle richtig "übernommen" nur irgendwie wird entwerder der eine oder der andere wert versetzt übernommen
edit: ich hab gerade mal nen kleinen test gemacht und der hat ergeben das ich die korrdinaten anscheinend flasch bestimme
ich habe einfach mal an einer stelle gehalten und das ganze in ein memo protokollieren lassen dabei kam folgendes raus:
Code: Alles auswählen
x | y
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
633 | 249
422 | 694
...usw
Code: Alles auswählen
//xc und yc geben die position der maus auf der form an(das ist ja dann ab der oberen ecke)
procedure TFMain.timerformpostionTimer(Sender: TObject);
begin
z := ScreenToClient(Point(Mouse.CursorPos.X,Mouse.CursorPos.Y));
FMain.SetBounds((z.x+xc),(z.y+yc),FMain.Width,FMain.Height);
mevent.lines.add(inttostr(z.x+xc)+' | '+inttostr(z.y+yc));
end;
Zuletzt geändert von Bauer321 am Do 3. Mär 2011, 23:34, insgesamt 1-mal geändert.
www.mcpatcher.net | www.hoeper.me
-
- Lazarusforum e. V.
- Beiträge: 3178
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Form verschieben
Das ist dann kein programmiertechnisches sondern ein rein mathematisches Problem. Nimm dir mal ein großes und ein kleineres Stück Papier (analog, nicht digital) und verschiebe das Kleinere auf dem Größeren und früher oder später wirst du erkennen, dass es egal ist, ob du die linke obere oder die rechte untere Ecke verschiebst. Es kommt nur auf den Betrag an, um den du verschiebst.Bauer321 hat geschrieben:und wie soll man dann das fenster nach oben links bekommen?
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Form verschieben
ist mir eben dann auch aufgefallen... hatte nen kleinen denkfehler drinne^^Socke hat geschrieben:Das ist dann kein programmiertechnisches sondern ein rein mathematisches Problem. Nimm dir mal ein großes und ein kleineres Stück Papier (analog, nicht digital) und verschiebe das Kleinere auf dem Größeren und früher oder später wirst du erkennen, dass es egal ist, ob du die linke obere oder die rechte untere Ecke verschiebst. Es kommt nur auf den Betrag an, um den du verschiebst.Bauer321 hat geschrieben:und wie soll man dann das fenster nach oben links bekommen?
www.mcpatcher.net | www.hoeper.me
-
- Beiträge: 770
- Registriert: Sa 21. Feb 2009, 13:46
- OS, Lazarus, FPC: Windows 7 (L 1.3 Built 43666 FPC 2.6.2)
- CPU-Target: 32Bit
Re: Form verschieben
ich mach das immer volgendermaßen:
Beim OnMouseDown speichere ich mir die aktuelle Position der maus. (altesx := x,altesy := y)
Beim OnMouseMove mach ich dann
Form1.Left := Form1.Left + x - altesx;
Das klappt bei mir ohne diese großen Sprünge...
Beim OnMouseDown speichere ich mir die aktuelle Position der maus. (altesx := x,altesy := y)
Beim OnMouseMove mach ich dann
Form1.Left := Form1.Left + x - altesx;
Das klappt bei mir ohne diese großen Sprünge...
Code: Alles auswählen
Signatur := nil;
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Form verschieben
hab das mal ausprobiert, aber das geht bei mir auch nicht:
Code: Alles auswählen
procedure TFMain.FormCreate(Sender: TObject);
begin
xc := -1;
yc := -1;
end;
procedure TFMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
xc := x;
yc := y;
label4.caption := (inttostr(xc) + ' | ' + inttostr(yc));
end;
procedure TFMain.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
if (xc > -1) and (yc > -1)
then begin
FMain.Top := FMain.Top+x-xc;
FMain.Left := FMain.Left+y-yc;
mevent.lines.add(inttostr(FMain.Top+x-xc)+' | '+inttostr(FMain.Left+y-yc));
end;
end;
www.mcpatcher.net | www.hoeper.me
Re: Form verschieben
Muss es nicht OnMouseUp sein?
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!
it´s not a bug, it´s a feature!
-
- Beiträge: 465
- Registriert: Sa 21. Aug 2010, 21:30
- OS, Lazarus, FPC: Windows 7 Ultimate (L 1.2.2 FPC 2.6.4 32-bit)
- CPU-Target: 64-Bit
- Wohnort: nahe Bremen
- Kontaktdaten:
Re: Form verschieben
ne das soll ja nur gehen wenn man die maustaste gedrückt hält
also bei mousedown anfangen und bei mouseup aufhören
also bei mousedown anfangen und bei mouseup aufhören
www.mcpatcher.net | www.hoeper.me