Autor Beitrag
sCrAPt
Gast
Erhaltene Danke: 1



BeitragVerfasst: So 10.08.03 17:15 
Halli hallo hallöchen :D
Wie kann ich einen Button während der Laufzeit mit der Maus verschieben? Im OI gibt es da zwar ne funktion nur dann ist der in nem neuen Fenster...


Zuletzt bearbeitet von sCrAPt am Mo 11.08.03 12:50, insgesamt 1-mal bearbeitet
MSCH
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1448
Erhaltene Danke: 3

W7 64
XE2, SQL, DevExpress, DevArt, Oracle, SQLServer
BeitragVerfasst: So 10.08.03 17:25 
imho überhaupt nicht, weil du müsstest OnMouseDown() und OnMouseUp() und OnMouseClick() überschreiben und deine eigene D&D Methode erstellen.

grez
msch
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: So 10.08.03 18:57 
Wie immer die gleiche Lösung:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Button1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
const
  SC_DRAGMOVE = $F012;
begin
  Assert(Sender is TWinControl, 'SC_DRAGMOVE nur mit TWinControls !');
  ReleaseCapture;
  TWinControl(Sender).Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
end;


Funzt nicht nur für TForm (in dem Zusammenhang oft gepostet) sondern für alle TWinControl-Nachfahren.

MfG,
Tryer
Andreas_Sans
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Di 12.08.03 02:05 
Kannst mir jemand die folgenden Zeilen erklären ?

ausblenden Delphi-Quelltext
1:
2:
  const 
  SC_DRAGMOVE = $F012;


ausblenden Delphi-Quelltext
1:
2:
  ReleaseCapture; 
  TWinControl(Sender).Perform(WM_SYSCOMMAND, SC_DRAGMOVE, 0);
Tryer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 226
Erhaltene Danke: 7



BeitragVerfasst: Di 12.08.03 07:28 
Schau Dir einfach mal die Hilfe zu ReleaseCapture, TWinControl.Perform und WM_SYSCOMMAND an, dann sollte so einiges klarer sein.

Aus Sicht des Buttons sieht´s so aus:
    - Ich vergesse das ich gerade runtergedrückt wurde, schliesslich will ich mich wenn schon dann aufrecht bewegen. (Ein niedergedrückter Button wartet erstmal darauf wieder losgelassen zu werden und wäre also nicht in der Lage die folgende Botschaft zu verarbeiten.)
    - Ich schicke mir selber ne Nachricht ans eigene Fenster um mich in den Modus "Bewegen durch Drag-Operation" zu bringen. Perform ist halt einfach die schnellste Variant, ein PostMessage würde es aber auch tun.
Die hier als SC_DRAGMOVE deklarierte Konstante entspricht dem WParam-Wert der WM_SYSCOMMAND-Botschaft die versendet wird wenn ein Fenster per Drag&Drop verschoben werden sollen.
Irgendjemand hat die mal SC_DRAGMOVE genannt, das hat sich durchgesetzt. Der Wert entspricht SC_MOVE + 2 und ist leider nicht in der Win-API dokumentiert, läst sich aber mit WinSight leicht ermitteln.


MfG,
Tryer
Ist die Frage beantwortet? Das Problem gelöst?

Dann klicke hier, um das Thema entsprechend zu markieren!