Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Komponente auf Client verschieben (https://www.delphipraxis.net/159834-komponente-auf-client-verschieben.html)

thomas2009 14. Apr 2011 16:58

Komponente auf Client verschieben
 
Hallo
ich möchte für mein Preview eine kleine Bitmap auf eine andere Komponente (z.B. Image auf Panel) Mit der Maus verschieben, aber das Object (Image) was ich verschiebe, soll immer 100% sichtbar
d.h. Left Object.left kann nicht < 0 und Object.Top kann nicht <0
Und so weiter
Oder kann man die Eigenschaften in ObjectInspector irgendwie einstellen
wie im Anhang
http://www.delphipraxis.net/attachme..._preview_1-jpg

roga 14. Apr 2011 20:47

AW: Komponente auf Client verschieben
 
Evtl. findest Du hier http://www.swissdelphicenter.ch/de/showcode.php?id=122 eine Anregung.

:gruebel:Weshalb gibt es eigentlich so eine tolle Erfindung wie die Suchfunktion?

thomas2009 14. Apr 2011 22:01

AW: Komponente auf Client verschieben
 
Liste der Anhänge anzeigen (Anzahl: 1)
ich habe die Funktion getestet
OK aber das Objekt soll beim verschieben nicht die die Client-Grenzen überschreitten :(
Delphi-Quellcode:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
MoveControl(Sender,Button,Shift,X,Y);
end;

Luckie 14. Apr 2011 22:11

AW: Komponente auf Client verschieben
 
Dann überprüfe eben, wenn es an den Clientgrenze angekommen ist.

Daniel 14. Apr 2011 22:13

AW: Komponente auf Client verschieben
 
Naja, mit der auf SDC verlinkten Methode ist das nicht ganz trivial, da er die Kontrolle an Windows abgibt, sofern das zu bewegende Control ein Handle hat.

Ich fürchte, dass dies eine der Aufgabenstellungen ist, die sich nicht per Copy & Paste lösen lassen. :roll:

himitsu 14. Apr 2011 22:20

AW: Komponente auf Client verschieben
 
Man könnte zumindestens zwischen
Delphi-Quellcode:
MoveControl(Sender,Button,Shift,X,Y);
und
Delphi-Quellcode:
end;
, also nach dem Loslassen der Maustaste, die Position so anpassen, daß es innerhalb der Grenzen zum Erliegen kommt.

roga 14. Apr 2011 22:28

AW: Komponente auf Client verschieben
 
Ich habe Dir mal etwas aus meiner Komponente für eine elektronische Pinnwand rauskopiert - um Dir nicht die Arbeit abzunehmen, musst Du den Weg selber finden. Programmieren ist oft auch Kopfzerbrechen...

Delphi-Quellcode:
  private
    FDownX,
    FDownY: integer;
    FDragging: Boolean;

procedure TPinItem.MouseDown(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  BringToFront;
  if (ssDouble in Shift) then Exit; // Doppelklick abfangen
  if (Button = mbLeft) then
  begin
    FDownX := X;
    FDownY := Y;
    FDragging := True;
    MouseCapture := True;
  end;
end;

procedure TPinItem.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
  pw: Integer;
begin
  if (Button = mbLeft) and FDragging then
  begin
    FDragging := False;
    MouseCapture := False;
    if (Left < 0) then Left := 0;
    if (Top < 0) then Top := 0;
    pw := Parent.Width - Width - 4;
    if (Left > pw) then Left := pw;
  end;
end;

procedure TPinItem.MouseMove(Shift: TShiftState; X, Y: Integer);
begin
  if FDragging then
  begin
    Left := X - FDownX + Left;
    Top := Y - FDownY + Top;
  end;
end;
Daniel hat natürlich Recht, bei der vorher genannten Methode wird einem das Zepter quasi aus der Hand genommen, deshalb habe ich damals auch diese Methode mit Erfolg angewendet.

s.h.a.r.k 15. Apr 2011 00:03

AW: Komponente auf Client verschieben
 
Zitat:

Zitat von Daniel (Beitrag 1095243)
Ich fürchte, dass dies eine der Aufgabenstellungen ist, die sich nicht per Copy & Paste lösen lassen. :roll:

Ich kann es mir einfach nicht verkneifen: wie kann man nur so bissig werden, wie ein Hai?! :mrgreen: :mrgreen: :mrgreen:


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