| Autor | Beitrag | 
| matzerg 
          Beiträge: 70
 
 Win XP
 D6 Pers
 
 | 
Verfasst: Do 21.10.04 16:10 
 
		                       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:
 
 | varForm1: TForm1;
 xold, yold: integer;
 implementation
 
 {$R *.dfm}
 
 procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
 begin
 X := X-(2*(x-xold));
 Y := Y-(2*(Y-yold));
 xold:=X;
 yold:=Y;
 setcursorpos(x, y);
 end;
 
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 xold:=400;
 yold:=400;
 end;
 |  ich hab mal so probiert ist aber nichts weiter rausgekommen als das die maus in der unteren rechten ecke landete.... | 
|  | 
| uall@ogc 
          Beiträge: 1826
 Erhaltene Danke: 11
 
 Win 2000 & VMware
 Delphi 3 Prof, Delphi 7 Prof
 
 | 
Verfasst: Do 21.10.04 18:33 
 
zuerst bekommst du in x und x den wert von der form, mit setcursorpos setzt du den wert vom ganzen deskatop, ausserdem gibbet nen flackern da wenn du setcurospos aufruft direkt wieder in on mousemove gesprugen wird, also so ne art endlosschleife | 
|  | 
| matzerg  
          Beiträge: 70
 
 Win XP
 D6 Pers
 
 | 
Verfasst: Fr 22.10.04 10:52 
 
ok ich glaube verstanden zu haben was du meinst aber habe kp wie besser geht...
 hat irgendwer ne idee mit verständlichem bsp???
 | 
|  | 
| .Chef 
          Beiträge: 1112
 
 
 
 
 | 
Verfasst: Fr 22.10.04 20:38 
 
Du musst das OnMouseMove vorm SetCursorPos auf nil setzen, und danach erst wieder zuweisen. _________________Die Antworten auf die 5 häufigsten Fragen: 1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
 | 
|  | 
| matzerg  
          Beiträge: 70
 
 Win XP
 D6 Pers
 
 | 
Verfasst: Sa 23.10.04 14:59 
 
wenne damit meinst ich soll den onmousemove deaktivieren bevor ich setcursorpos mache dann hab ich verstanden aber wie????
wie nur???
 | 
|  | 
| BenBE 
          Beiträge: 8721
 Erhaltene Danke: 191
 
 Win95, Win98SE, Win2K, WinXP
 D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
 
 | 
Verfasst: Sa 23.10.04 18:11 
 
		                       Delphi-Quelltext 
 									| 1:2:
 3:
 
 | OnMouseMove := nil;SetCursorPos(...);
 OnMouseMove := DeineProc;
 | _________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
 | 
|  | 
| matzerg  
          Beiträge: 70
 
 Win XP
 D6 Pers
 
 | 
Verfasst: Sa 23.10.04 23:11 
 
wenn ichs so mache funzt es nit...    		                       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:
 
 | varForm1: TForm1;
 xold, yold :integer;
 implementation
 
 {$R *.dfm}
 
 procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
 begin
 X := X-(2*(x-xold));
 Y := Y-(2*(Y-yold));
 xold:=X;
 yold:=Y;
 OnMouseMove := nil;
 setcursorpos(x, y);
 OnMouseMove := FormMouseMove;
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 xold:=400;
 yold:=400;
 end;
 |  bzw. die maus ist wieder unten rechts... | 
|  | 
| .Chef 
          Beiträge: 1112
 
 
 
 
 | 
Verfasst: So 24.10.04 21:51 
 
Du musst zwei Probleme lösen:
 - Du brauchst einen korrekten Anfangswert innerhalb des Formulars!
 - Du musst den Fall berücksichtigen, dass die Maus das Formular verlässt und an einer anderen Stelle wieder eintritt!
 Dieser Code funktioniert, solange die Maus über dem Formular bleibt:
 		                       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:
 
 | implementationvar
 yold, xold : Integer;
 pt : TPoint;
 
 {$R *.dfm}
 
 procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
 Y: Integer);
 begin
 OnMouseMove:=nil;
 GetCursorPos(pt);
 pt.X:=pt.X-2*(pt.X-xold);
 pt.Y:=pt.Y-2*(pt.Y-yold);
 xold:=pt.X;
 yold:=pt.Y;
 Setcursorpos(pt.X,pt.Y);
 OnMouseMove:=FormMouseMove;
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
 pt.X:=Form1.Left+100;
 pt.Y:=Form1.Top+50;
 SetCursorPos(pt.X,pt.Y);
 xold:=pt.X;
 yold:=pt.Y;
 end;
 | _________________Die Antworten auf die 5 häufigsten Fragen: 1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
 | 
|  | 
| matzerg  
          Beiträge: 70
 
 Win XP
 D6 Pers
 
 | 
Verfasst: So 24.10.04 22:56 
 
danke es funzt aber wirklich NUR wenn die Maus von ANFANG AN auf form1 ist..
 ich würds daher nur weiterempfehlen für leute die in ihrem programm mit vollbild arbeiten...
 | 
|  | 
| .Chef 
          Beiträge: 1112
 
 
 
 
 | 
Verfasst: So 24.10.04 23:04 
 
Ich hab nie behauptet, dass es für alle Fälle gilt. Es ist nur ein Beispiel, das du  weiter ausbauen musst . Und zwar mit den Features, die ich oberhalb des Quellcodes angesprochen habe.
 Edit: Was glaubst du, warum ich die Maus am Anfang auf das Formular gesetzt habe?  _________________Die Antworten auf die 5 häufigsten Fragen: 1. Copy(), Pos(), Length() --- 2. DoubleBuffered:=True; --- 3. Application.ProcessMessages bzw. TThread --- 4. ShellExecute() --- 5. Keine Vergleiche von Real-Typen mit "="!
 | 
|  | 
| matzerg  
          Beiträge: 70
 
 Win XP
 D6 Pers
 
 | 
Verfasst: So 24.10.04 23:08 
 
mir kanns ja egal sein weil ich im vollbild programmiere das richtete sich eher an alle "kommenden Generationen" die in den (bis dahin) verstaubten bits und bytes des archiv von diesem Forum nach solchen sachen suchen.... ^^
 achja hab ich mich schon bedankt???
 
 danke danke danke
 | 
|  |