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/)
-   -   Delphi Nur horizontal verschiebbar machen (https://www.delphipraxis.net/43457-nur-horizontal-verschiebbar-machen.html)

CalganX 4. Apr 2005 14:21


Nur horizontal verschiebbar machen
 
Hi,
mit Hilfe von
Delphi-Quellcode:
  {Label mit Programm verschiebbar machen}
  ReleaseCapture;
  lbFileOpen.Perform(WM_SYSCOMMAND, $F012, 0);
mache ich einen TStaticText mit der Maus verschiebbar.
Gibt es eine Möglichkeit das nur für horizontale Verschiebungen zulässig zu machen?

Ich habe versucht das mit Hilfe von Koordinatenabfragen/-änderungen in OnMouseMove zu machen, aber das Ereignis scheint aufgerufen zu werden. :?

Chris

shmia 4. Apr 2005 14:53

Re: Nur horizontal verschiebbar machen
 
Zitat:

Zitat von Chakotay1308
Hi,
mit Hilfe von
Delphi-Quellcode:
  {Label mit Programm verschiebbar machen}
  ReleaseCapture;
  lbFileOpen.Perform(WM_SYSCOMMAND, $F012, 0);
mache ich einen TStaticText mit der Maus verschiebbar.
Gibt es eine Möglichkeit das nur für horizontale Verschiebungen zulässig zu machen?

Manchmal denkt man nicht an die einfachsten Dinge:
Delphi-Quellcode:
  y := lbFileOpen.Top;
lbFileOpen.Perform(WM_SYSCOMMAND, $F012, 0);
lbFileOpen.Top := y;
Du verwendest ja eine undokumentierte WM_SYSCOMMAND.
Siehe auch die Konstante SC_MOVE aus Windows.pas mit dem Wert $F010.
Ich würde mal mit diesem Wert experimentieren (die niedrigsten 4 Bits ändern); könnte sein,
dass dein gewünschter Effekt auftritt.

CalganX 4. Apr 2005 15:14

Re: Nur horizontal verschiebbar machen
 
Hi,
danke. :)
Der Tipp mit der Variable ist schonmal gut. ;) Zwar kann man jetzt immer noch das Label außerhalb des sichtbaren Bereichs rauf- und runterschieben, aber es wird ja auf den Standardwert zurückgesetzt. :)

Danke!
Chris

Nogge 7. Apr 2005 16:23

Re: Nur horizontal verschiebbar machen
 
Hallo Chakotay1308,
Diese Variante ist meiner Meinung nach besser, da es unter anderem verständlicher ist, als die 2 Zeilen.
Delphi-Quellcode:
var
  Form1: TForm1;
  { -- Moving -- }
           Moving : Boolean;
  Pressed_Y_Koord : Integer;

implementation

{$R *.dfm}

procedure TForm1.StaticText1MouseDown(Sender: TObject;
  Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  Pressed_Y_Koord:=Y;
  Moving:=true;
end;

procedure TForm1.StaticText1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Moving:=false;
end;

procedure TForm1.StaticText1MouseMove(Sender: TObject; Shift: TShiftState;
  X, Y: Integer);
begin
  if Moving then
  begin
    StaticText1.Top:=StaticText1.Top+(Y-Pressed_Y_Koord);
  end;
end;


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