Autor Beitrag
fbkreon
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Do 15.05.03 14:58 
Hallo,

bei mir funktioniert aus irgendeinem grund diese funktion nicht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; 
  Shift: TShiftState; X, Y: Integer); 
begin 
     if Button = mbLeft then 
     begin 
          ReleaseCapture; 
          Perform(WM_SYSCOMMAND,$F0120); 
     end
end;

es klappt lediglich die funktion (dafür reagieren dann aber keinerlei buttons mehr auf einen klick):
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure WMNCHitTest(var M: TWMNCHitTest); message wm_NCHitTest;

procedure TForm1.WMNCHitTest (var M: TWMNCHitTest);
begin
  inherited;
  if M.Result = htClient then M.Result := htCaption;
end;

kann mir da jemand helfen?
JacFab
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 111



BeitragVerfasst: Do 15.05.03 17:31 
Ich habs so gemacht:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TfrmMain.FormMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     releasecapture;
     sendmessage(self.Handle, WM_NCLBUTTONDOWN, 20);
end;

_________________
Nur Sitte und Moral sind Anker im Strom der Verrohung!
;)
fbkreon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Do 15.05.03 19:35 
und das funktioniert auch nicht. es interessiert das teil einfach überhaupt nicht.
O'rallY
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 563



BeitragVerfasst: Do 15.05.03 20:59 
Guck mal im EDH. Bekommst du unter www.delphi-treff.de. Dort suchst du dann nach Winamp Easy Move (oder so ähnlich).

Habs grad gefunden:
Easy Delphi Helper Online hat folgendes geschrieben:

Diese Procedure musst Du im Private-Abschnitt deklarieren:
ausblenden Delphi-Quelltext
1:
2:
procedure WMNCHitTest(var M: TWMNCHitTest); 
  message wm_NCHitTest;

Und hier die eigentliche Implementation der Procedure:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.WMNCHitTest (var M: TWMNCHitTest);
begin
  inherited;
  if M.Result = htClient then 
    M.Result := htCaption;
end;

htClient gibt an, dass Du dich im normalen Bereich Deiner Anwendung befindest, also nicht die Titelleiste bewegst. Mit htCaption wird die Titelleiste angesprochen und diese soll emuliert werden.

_________________
.oO'rallY
Linux is like a tipi: No gates, no windows and a gnu-eating apache inside...
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Do 15.05.03 21:36 
Hi,

folgenden Code kannst du in das OnMouseMove-Ereignis jeglicher Komponente schreiben. Dann kannst du mit dieser Komponente das Fenster bewegen. Auch mit Form selber wenn du es in das OnmouseMove-Ereignis der Form schreibst. Das geht auch bei Formularen ohne Titelleiste und die restlichen komponenten auf den Formular funktionieren ganz normal. So gehts:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  if (ssLeft in Shift) then
  begin
    ReleaseCapture;
    SendMessage(Form1.Handle,WM_SYSCOMMAND,SC_MOVE+1,0);
  end;
end;

MFG

- Ernesto -
fbkreon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Do 15.05.03 22:57 
das ist verrückt, aber auch das, lieber ernesto, läßt delphi komplett kalt. wenn ich das nem button1 z.B. zuweise, und auf den klicke und dann ziehe passiert nix.....
ErnestoChe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 528

Win 2000 pro, CRUX 2.0
Delphi 6 Pers, Open K3
BeitragVerfasst: Do 15.05.03 23:50 
Hi,

komisch. Bei mir funktionierts einwandfrei. Sowohl unter Delphi 6 auch unter Delphi 3. Ich weiss nicht ob du es schon gemacht hast, aber probier mal den Code in einer neuen, leeren Anwendung aus und nicht in deinem aktuellen Projekt.

Wenn es klappt, dann liegt der Fehler irgendwo in deiner Anwendung. Kannst ja dann bisschen mehr Code posten.

MFG

- Ernesto -
christoph
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 28

Win XP(SPack1),Win 2000(Spack3)
Delphi 6(Spack2)
BeitragVerfasst: Fr 16.05.03 21:27 
Zitat:
bei mir funktioniert aus irgendeinem grund diese funktion nicht:
Sourcecode:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;  
  Shift: TShiftState; X, Y: Integer);  
begin  
     if Button = mbLeft then  
     begin  
          ReleaseCapture;  
          Perform(WM_SYSCOMMAND,$F0120);  
     end;  
end;

Dein Fehler liegt daran das du ein MouseDown Ereigniss nimmst
du musst ein MouseMove Ereigniss nehmen
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
procedure TForm1.FormMouseMove(Sender: TObject; Button: TMouseButton;  
  Shift: TShiftState; X, Y: Integer);  
begin  
     if Button = mbLeft then  
     begin  
          ReleaseCapture;  
          Perform(WM_SYSCOMMAND,$F0120);  
     end;  
end;


Chris

Moderiert von user profile iconTino: Delphi-Tags hinzugefügt.
fbkreon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Sa 17.05.03 13:07 
also das funzt dennoch nicht......der gesamte code heißt:
ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  procedure Form1MouseMove(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Form1MouseMove(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
     if Button = mbLeft then
     begin
          ReleaseCapture;
          Perform(WM_SYSCOMMAND,$F0120);
     end;
end;

end.

und der form1 hab ich den borderstyle=bsNone verpasst um die titelleiste loszuwerden.

Moderiert von user profile iconTino: Delphi-Tags eingefügt.
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Sa 17.05.03 14:27 
O'rally hat die lösung doch schon hingeschrieben.
Musst mal etwas weiter oben gucken.

Gruß
Ken
fbkreon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: Sa 17.05.03 15:22 
CenBells: Die Lösung klappt ja auch, nur wie man auch exakt rauslesen kann stellt die routine fest, ob man sich im client-bereich aufhält und wenn ja, dann tut es so, als würde man die leiste berühren......aber dann funzt kein Button mehr!!! Was nützt mir ne verschiebbare form, wenn ich keinen button mehr drücken kann....jedenfalls ohne resultat. sind übrigens nur buttons von betroffen, keine anderen eingabefelder
KyroxX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: Sa 17.05.03 22:50 
Titel: hmm
Hatte das problemmauch ... ich bin fast verzweifelt ..
hab ich des ganze form neu gemacht, den alten source reingebaut unfd schon gings ... da muss irgendwas mit den Properties der Form durcheinandergekommen sein ;)
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
if Button = mbLeft then 
     begin 
          ReleaseCapture; 

          Perform(WM_SYSCOMMAND,$F0120); 
     end;

_________________
KyroxX :: Have a lot of Fun !
fbkreon Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 50



BeitragVerfasst: So 18.05.03 13:31 
HURRAAAAAAA!!!! Endlich, es ist vollbracht:

Ich hatte einfach nur vergessen, über den Event-Manager auf "onmousemove" zu klicken. man sieht einfach manchmal den wald vor lauter bäumen nicht mehr.

hab jetzt n button genommen, und den mit folgender procedure verknüpft:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
 if (ssLeft in Shift) then 
  begin 
    ReleaseCapture; 
    SendMessage(Form1.Handle,WM_SYSCOMMAND,SC_MOVE+1,0); 
  end

end;
KyroxX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 18



BeitragVerfasst: So 18.05.03 15:38 
Titel: ;)
hehe *gg*
Das war mir auch mal passiert 8)

_________________
KyroxX :: Have a lot of Fun !