AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Maus Position ändern??

Ein Thema von TitanNano · begonnen am 20. Jul 2010 · letzter Beitrag vom 20. Jul 2010
Antwort Antwort
Seite 1 von 3  1 23      
TitanNano
(Gast)

n/a Beiträge
 
#1

Maus Position ändern??

  Alt 20. Jul 2010, 16:23
Hallo,
ich möchte ein kleines Programm schreiben, das beim druck auf W, A, S oder D die Maus verschiebt. Ich habe mit der Taste W angefangen. Um die Maus zu verschiebe habe ich die aktuelle Maus Position abgespeichert, 5 dazu addiert und mit setCursorPos die Position neu gesetzt. Das klappt auch denn wenn ich die Position abfrage ändert diese sich doch auf dem Bildschirm ändert sich nichts wieso??

Delphi-Quellcode:
 m.X:= Mouse.cursorPos.X;
 m.y:= Mouse.cursorpos.Y;
 m.Y:= m.y+100;
 Windows.SetCursorPos(m.X, m.Y);
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#2

AW: Maus Position ändern??

  Alt 20. Jul 2010, 16:33
Bei mir klappt das einwandfrei.
Was für ein System hast du?
  Mit Zitat antworten Zitat
TitanNano
(Gast)

n/a Beiträge
 
#3

AW: Maus Position ändern??

  Alt 20. Jul 2010, 16:37
das Programm läuft zurzeit auf
win 2000
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: Maus Position ändern??

  Alt 20. Jul 2010, 16:44
Mhm, wenns auf XP geht, müsste es auf W2000 auch gehen.
Wie hast du denn den Keypress eingebunden?

Das hier funktioniert z.B. bei mir im FormKeyDown:

Delphi-Quellcode:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
var
  m: TPoint ;
begin
 m.X:= Mouse.cursorPos.X;
 m.y:= Mouse.cursorpos.Y;

 case Key of
    Ord('W') : m.Y:= m.Y-5;
    Ord('A') : m.X:= m.X-5;
    Ord('S') : m.Y:= m.Y+5;
    Ord('D') : m.X:= m.X+5;
 end;

 Windows.SetCursorPos(m.X, m.Y);

end;
  Mit Zitat antworten Zitat
TitanNano
(Gast)

n/a Beiträge
 
#5

AW: Maus Position ändern??

  Alt 20. Jul 2010, 16:55
ich habe es auch in Form.KeyDown!!
Delphi-Quellcode:
procedure TForm1.keyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
//showmessage(IntToStr(Mouse.cursorpos.x));
if (char(key) = 'W') then
begin
 m.X:= Mouse.cursorPos.X;
 m.y:= Mouse.cursorpos.Y;
 up.Enabled:= true;
 end else
 begin
  end;
end;

procedure TForm1.UpTimer(Sender: TObject);
begin
//Mouse.CursorPos:= Point(Mouse.CursorPos.X, Mouse.CursorPos.Y+100);
m.Y:= m.y+5;
Windows.SetCursorPos(m.X, m.Y);
end;
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#6

AW: Maus Position ändern??

  Alt 20. Jul 2010, 17:04
Ähm, so kann das irgendwie nicht richtig funktionieren....

FormKeyDown wird immer wieder aufgerufen, während du die Taste drückst, und in der Routine setzt du m.Y dauernd auf die aktuelle Position der Maus.
Wenn dein Timer dann zuschlägt, kann es sein, dass die Routine bereits inzwischen wieder auf Mouse.cursorPos.Y zurückgesetzt hat.
Ausserdem wird der Timer gar nicht abgeschaltet, so dass die Maus dauernd nach oben fliegt.
Das ist nicht unbedingt ein guter Ansatz
Wenn du es unbedingt mit einem Timer machen willst, lass das FormKeyDown ganz weg und schreib deinen UpTimer so:

Delphi-Quellcode:
procedure TForm1.UpTimer(Sender: TObject);
var
  m: TPoint ;
begin
  m.X := Mouse.cursorPos.X;
  m.Y := Mouse.cursorpos.Y;

  if self.Active then
  begin
    if (GetAsyncKeyState(Ord('W')) <> 0) then m.Y := m.Y-5;
    if (GetAsyncKeyState(Ord('A')) <> 0) then m.X := m.X-5;
    if (GetAsyncKeyState(Ord('S')) <> 0) then m.Y := m.Y+5;
    if (GetAsyncKeyState(Ord('D')) <> 0) then m.X := m.X+5;

    Windows.SetCursorPos(m.X, m.Y);
  end;

end;
Das hat den Vorteil, dass du auch gleichzeitiges Drücken von mehreren Tasten handelst.
  Mit Zitat antworten Zitat
TitanNano
(Gast)

n/a Beiträge
 
#7

AW: Maus Position ändern??

  Alt 20. Jul 2010, 17:07
nein, es muss nicht unbedingt ein Timer sein ich wusste nur nicht dass es auch ohne geht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#8

AW: Maus Position ändern??

  Alt 20. Jul 2010, 17:07
Wenn der Timer nur eine Verlegenheitslösung war, würde ich das ähnlich wie blackfin weiter oben machen. Evtl. musst Du aber noch die KeyPreview-Eigenschaft der Form auf true stellen.
Delphi-Quellcode:
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
const Offset = 5;
var OldPos: TPoint;
begin
  OldPos := Mouse.CursorPos;
  case Key of
    Ord('W'): OldPos.Y := OldPos.Y - Offset;
    Ord('S'): OldPos.Y := OldPos.Y + Offset;
    Ord('A'): OldPos.X := OldPos.X - Offset;
    Ord('D'): OldPos.X := OldPos.X + Offset;
  end;
  SetCursorPos(OldPos.X,OldPos.Y);
end;
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
TitanNano
(Gast)

n/a Beiträge
 
#9

AW: Maus Position ändern??

  Alt 20. Jul 2010, 17:14
so ich habe jetzt folgenden Code:
Delphi-Quellcode:
procedure TForm1.keyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
begin
if start then
begin
 m.X:= Mouse.cursorPos.X;
 m.y:= Mouse.cursorpos.Y;
 case Key of
    Ord('W') : m.Y:= m.Y-5;
    Ord('A') : m.X:= m.X-5;
    Ord('S') : m.Y:= m.Y+5;
    Ord('D') : m.X:= m.X+5;
    end;
 Windows.SetCursorPos(m.X, m.Y);
 end else
 begin
  if char(key) = 'Jthen
   begin
    start:= true;;
    showmessage('Steureung gestartet!!');
    end;
  end;
end;
Doch bewegen tut die Maus sich immer noch nicht.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#10

AW: Maus Position ändern??

  Alt 20. Jul 2010, 17:16
Bist Du mal durchgesteppt? Wird der Code überhaupt ausgeführt?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:01 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