![]() |
form über Image verschieben
Hi,
wie kann ich ein Formular am besten über ein Image verschieben (z.B. um eigene Programmbalken zu machen). viele Grüße Stephan |
Wie ist das gemeint? Daß sich dein TImage genauso verhält wie die Titelleiste der Form?
Dann musst du im OnMouseMove-Event des Images folgendes machen:
Delphi-Quellcode:
if ssLeft in Shift then
begin Form1.Left := X - Image1.Left + Form1.Left; Form1.Top := Y - Image1.Top + Form1.Top; end; |
Moin Stephan,
schau doch mal hier in der Code Library unter VCL-Komponenten. Dort gibt's einen Eintrag: Fenster ohne Titelzeile verschieben. (was nicht heisst, dass das Fenster keine Titelzeile haben darf) |
Oder meine 2 Zeilen Code :roll:
|
Moin tommie-lie,
nur bei Deinem Beispiel würde das Fenster immer verschoben werden, sobald die Shifttaste gedrückt ist und sich der Cursor über das Image bewegt. Es fehlt also auf jeden Fall noch die Abfrage, ob die Linke Maustaste gedrückt ist (dafür darf Shift nicht gedrückt sein), damit sich das Image so verhält, wie eine Titelzeile. |
Wieso?
Mal abgesehen davon, daß mein Code vollkommen falsch ist (sorry, aber um die Uhrzeit ;-) ), was du aber nicht bemängelst, frage ich vorher mit "if ssLeft in Shift" ab, ob die linke Maustaste gedrückt wurde. Und wenn ich bei mir die Shift-, Alt- oder Strg-Taste drücke und versuche, ein Fenster zu verschieben, klappt das immer noch, weil Windows (meins zumindest) nur nach der linken Maustaste guckt. Richtigerweise wäre mein Code aber folgender:
Delphi-Quellcode:
und zwar mit globaler Variable MousePos: TPoint und im MouseDown-Event folgendes:
if ssLeft in Shift then
begin Form1.Left := Mouse.CursorPos.X - MousePos.X; Form1.Top := Mouse.CursorPos.Y - MousePos.Y; end;
Delphi-Quellcode:
Das dürfte besser klappen als mein erster *g*
MousePos.X := Mouse.CursorPos.X - Form1.Left;
MousePos.Y := Mouse.CursorPos.Y - Form1.Top; |
Moin tommie-lie,
sorry :oops: Da hast Du auch wieder recht. Ich würde allerdings den anderen Weg vorziehen, da man hier alles an einem Punkt konzentriert hat, und nicht, wie in Deinem Beispiel an dreien, ausserdem wird so das Fenster beim Verschieben angezeigt, wie es im System eingestellt ist (SystemParametersInfo/SPI_GETDRAGFULLWINDOWS). |
Hmm, stimmt, das Fenster wird immer vollständig gezeigt und nicht nur mit Rahmen. Daran habe ich nicht gedacht, weil ich sowieso immer den Inhalt beim Verscieben anzeigen lasse...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:07 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz