Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponente vertikal verschieben (https://www.delphipraxis.net/89948-komponente-vertikal-verschieben.html)

Delphi Star 9. Apr 2007 08:01


Komponente vertikal verschieben
 
Guten Morgen,
wie kann ich eine Komponente mit der Maus nur vertikal und nur in einem bestimmten Bereich verschieben?

Delphi Star 9. Apr 2007 08:30

Re: Komponente vertikal verschieben
 
Ich habe es selbst geschafft:
Delphi-Quellcode:
var mouseposi: integer;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  bitbtn1.top:=Mouse.CursorPos.y-top-(height-clientheight)-mouseposi;
end;

procedure TForm1.BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
mouseposi:=Mouse.CursorPos.y-(height-clientheight)-top-bitbtn1.Top;
timer1.Enabled:=true;
end;

procedure TForm1.BitBtn1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
timer1.Enabled:=false;
end;
[edit=Admin] Mfg, Daniel[/edit]

bitsetter 9. Apr 2007 09:36

Re: Komponente vertikal verschieben
 
Hi,

mit dem Timer ist ja nicht gerade optimal, würde es nicht auch so gehen?

Delphi-Quellcode:
procedure TForm1.BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Sender is TBitBtn then
    TBitBtn(Sender).Tag := Y;
end;

procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  NewPos: integer;
const
  MinTop = 10;
  MaxTop = 300;
begin
  if Sender is TBitBtn then
    if ssLeft in Shift then
    begin
      NewPos:= TBitBtn(Sender).Top + Y - TBitBtn(Sender).Tag;
      if (NewPos > MinTop) and (NewPos < MaxTop) then
        TBitBtn(Sender).Top:= TBitBtn(Sender).Top + Y - TBitBtn(Sender).Tag;
    end;
end;

Delphi Star 9. Apr 2007 11:32

Re: Komponente vertikal verschieben
 
Cool, Danke!

Guido Eisenbeis 10. Apr 2007 19:49

Re: Komponente vertikal verschieben
 
Verschiebt man den BitBtn schnell, kann er schonmal an einer Stelle hängen bleiben. Das wird im folgenden abgefangen.

Delphi-Quellcode:
procedure TForm1.BitBtn1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if Sender is TBitBtn then
    TBitBtn(Sender).Tag := Y;
end;

procedure TForm1.BitBtn1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  NewPos: integer;
const
  MinTop = 10;
  MaxTop = 300;
begin
  if Sender is TBitBtn then
    if ssLeft in Shift then
    begin
      NewPos:= TBitBtn(Sender).Top + Y - TBitBtn(Sender).Tag;

      if (NewPos < MinTop) then
        TBitBtn(Sender).Top := MinTop
      else if (NewPos > MaxTop) then
        TBitBtn(Sender).Top := MaxTop
      else
        TBitBtn(Sender).Top := NewPos;
    end;
end;
Gruß,
Guido.

Delphi Star 10. Apr 2007 19:57

Re: Komponente vertikal verschieben
 
:thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:37 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 by Thomas Breitkreuz