Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Fenster verschieben: Form1.top ins Minus (https://www.delphipraxis.net/153015-fenster-verschieben-form1-top-ins-minus.html)

erich.wanker 17. Jul 2010 13:41

Fenster verschieben: Form1.top ins Minus
 
Hallo Leute,

hab ein kleines Problem:
Wenn ich ein Fenster manuell verschiebe, klappt fast alles. Nur wenn Form1.top kleiner -25 ist, springt das Fenster immer auf Form1.top:=-25 (Die Höhe der nicht sichtbaren Titelbar)..

Dieser Effekt passiert VOR MouseUP und versaut mir das Positionieren..

Hat jemand eine Idee?

Vielen Dank

Erich


Form1.OnMouseDown:
Delphi-Quellcode:
        if Button = mbLeft then
        begin
         ReleaseCapture;
         SendMessage(Handle, WM_SYSCOMMAND, 61458, 0);
         if Assigned(OnMouseUp) then //MouseUp brauch ich noch
            OnMouseUp(Sender, Button, Shift, X, Y);
        end;

Das Fenster

Delphi-Quellcode:
object Form1: TForm1
  Left = 561
  Top = 341
  HorzScrollBar.Visible = False
  VertScrollBar.Visible = False
  AlphaBlend = True
  AlphaBlendValue = 220
  BorderIcons = [B][][/B]
  BorderStyle = [B]bsNone[/B]
  ClientHeight = 107
  ClientWidth = 288
  Color = clYellow
  TransparentColor = True
  TransparentColorValue = clYellow
  Ctl3D = False
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'MS Sans Serif'
  Font.Style = []
  FormStyle = [B]fsStayOnTop[/B]
  OldCreateOrder = False
  Scaled = False
  ScreenSnap = True // hab ich schon verändert - bringt nix
  OnCreate = FormCreate
  OnMouseDown = image_mainmenMouseDown
  OnMouseMove = image_mainmenMouseMove
  OnMouseUp = image_mainmenMouseUp
  OnShow = FormShow
  PixelsPerInch = 96
  TextHeight = 13

DeddyH 17. Jul 2010 14:18

AW: Fenster verschieben: Form1.top ins Minus
 
Wenn man die neue Position selbst berechnet, dann geht es. Ich habe mir dazu 2 private Variablen deklariert (OldX und OldY):
Delphi-Quellcode:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Button = mbLeft then
    begin
      OldX := X;
      OldY := Y;
    end;
end;

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if ssLeft in Shift then
    begin
      Left := Left + (X - OldX);
      Top := Top + (Y - OldY);
    end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:11 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