Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi form über Image verschieben (https://www.delphipraxis.net/4541-form-ueber-image-verschieben.html)

Stephan 3. Mai 2003 21:22


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

tommie-lie 3. Mai 2003 22:27

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;

Christian Seehase 4. Mai 2003 01:20

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)

tommie-lie 4. Mai 2003 11:43

Oder meine 2 Zeilen Code :roll:

Christian Seehase 4. Mai 2003 12:21

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.

tommie-lie 4. Mai 2003 14:30

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:
  if ssLeft in Shift then
  begin
    Form1.Left := Mouse.CursorPos.X - MousePos.X;
    Form1.Top := Mouse.CursorPos.Y - MousePos.Y;
  end;
und zwar mit globaler Variable MousePos: TPoint und im MouseDown-Event folgendes:
Delphi-Quellcode:
  MousePos.X := Mouse.CursorPos.X - Form1.Left;
  MousePos.Y := Mouse.CursorPos.Y - Form1.Top;
Das dürfte besser klappen als mein erster *g*

Christian Seehase 4. Mai 2003 15:14

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).

tommie-lie 4. Mai 2003 15:18

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 01:10 Uhr.

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