Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Strecke, die die Maus zurücklegt messen (https://www.delphipraxis.net/6117-strecke-die-die-maus-zuruecklegt-messen.html)

dopeline 30. Jun 2003 12:04


Strecke, die die Maus zurücklegt messen
 
ich möchte was kleines progen, was die entfernung misst, die die maus zurücklegt (in metern). wie stelle ich das an?

Grüße, dopeline

RomanK 30. Jun 2003 12:24

Hab mal nen bissle gesucht, also hier in der DP, und hab da was gefunden wo zwei unterschiedliche Lösungsansätze gezeigt werden:
http://www.delphipraxis.net/internal...highlight=hook

Wenn du nicht weiterkommst dann melde dich.

tommie-lie 30. Jun 2003 14:16

Was der Antirassist nur überlesen hat: "(in metern)"
Das ist ohne weiteres nicht möglich, weil der Cursor auf dem Bildschirm ja nicht den Bewegungen der Maus auf dem Tisch entspricht, sondern durch die Geschwindigkeitseinstellungen im Treiber beschleunigt oder verlangsamt werden.
Dann gibt es noch eine nette Sache namens Mausbeschleunigung, die eine sinnvolle Messung der Strecke der Maus auf dem Schreibtisch per Software schlichtweg unmöglich macht, wenn man nicht die genauen Daten der Beschleunigungskurve im Treiber hat. Und da darf man den Treiberhersteller fragen, ob der antwortet, ist was anderes...
Aber theoretisch (ohne Beschleunigung) müsste man das Programm vorher kalibrieren, z.B. den Anwender auffordern 10 cm abzufahren und gucken, wieviele Pixel das waren und dann immer damit rechnen.
Wie's aber mit Hooks aussieht, wenn der Cursor am Bildrand ist und er noch weiter vom Bildschirm wegbewegt wird, weiß ich nicht. Wahrscheinlich wird das dann aber abgeschnitten, Fehlbereiche würden also wieder nicht in der Messung sein.

dopeline 30. Jun 2003 14:25

ich habe ein programm installiert (workrave) das misst die arbeitszeit am computer und mach noch ein paar sachen. unteranderem zeigt er die zurückgelegte entfehrnung (der maus auf dem bildschirm und der maus in echt auf dem tisch) in metern, die zeit, wieviel/wielange die maus bewegt wurde, mausklicks und tastenanschläge. und alles in echtzeit (aktuallisiert sich alle halbe sekunde)

und wie machen die das? das muss doch auch irgentwie mit delphi gehen!

Gruß, dopeline

Sanchez 30. Jun 2003 14:28

Ich denke mal, das Programm misst die Bewegung des Mauszeigers am Bildschirm. Das wäre nicht so problematisch zu realisieren.

mfg Daniel

[EDIT]Sorry hab das mit der Entfernung am Monitor und der Entfernung am Tisch überlesen. Also war das ein relativ sinnloses Posting[/EDIT]

tommie-lie 30. Jun 2003 15:46

Evtl, aber wirklich nur vielleicht, geht das über DirectInput.
Aber davon habe ich zu wenig Ahnung von nativem DirectX, um dir sagen zu können ob das geht und womit genau...

Luckie 30. Jun 2003 18:24

Man kann aber die zurückgelegte Strecke in Pixel in Meter umrechnen.

tommie-lie 30. Jun 2003 20:11

Warum das nicht geht, habe ich versucht zu erklären:
Man weiß nicht wieviel ein Pixel in Metern ist. Dieser Wert hängt von verschiedenen Einstellungen ab, zu denen man nicht immer Zugang hat.

Luckie 30. Jun 2003 20:14

Ich meine im Petzold steht drin, wie es geht. Ich habe ihn nur leider nicht zur Hand.

Gast 30. Jun 2003 20:21

IMHO nur möglich wenn man einen eigenen Maustreiber programmiert. Kann auch nur eine Art Miniport sein, welcher das dann an den Orginaltreiber weiterreicht, aber jedenfalls sind die Probleme da, welche von tommie-lie beschrieben wurden, solange man "oberhalb" des Treibers arbeitet (also etwas allgemeiner: im Usermode).

@Luckie: Damals gab es IMHO noch keine Treiber mit Beschleunigungsfunktion.

Luckie 30. Jun 2003 20:23

OK, ich gebe mich geschlagen.

tommie-lie 30. Jun 2003 20:23

Dann schnapp' ihn dir mal.
Ich brauche es zwar, nicht, aber es würde mich interessieren, wie sowas geht. Immerhin dürfte schon die Kurve der Beschleunigung schwierig genug sein, auch noch dafür zu sorgen, daß wenn die Maus über den Rand hinausgeschoben wird, man die Strecke erfassen kann, müsste genau auf den Maustreiber abgestimmt sein, der von Nagetier zu Nagetier anders ist.

edit: mist, umsonst geschrieben.
Ich sollte mir angewöhnen meine Beiträge genauso kurz zu fassen wie Luckie, dann brauch' ich nicht so lange dazu... :roll:

Luckie 30. Jun 2003 20:25

Zitat:

Zitat von tommie-lie
Dann schnapp' ihn dir mal.

Mein Arm ist leider keine 150 km lang. Und das e-book finde ich irgendwie nicht im Moment. Aber Assarbad hat es.

Christian Seehase 30. Jun 2003 22:12

Moin dopeline,

Zitat:

Zitat von dopeline
und wie machen die das? das muss doch auch irgentwie mit delphi gehen!

Gegenfrage:
Hast Du die Angaben des Programmes mal nachgemessen, und weisst, dass sie stimmen?

glkgereon 28. Aug 2005 11:14

Re: Strecke, die die Maus zurücklegt messen
 
ich hol den Thread mal wieder hoch...mir würde es zum beispiel reichen nur die zurückgelegte strecke in pixeln (habbich als Integer vorliegen) in meter umzurechnen...

dafür brauche ich ja offensichtlich die info, mit wieviel dpi der monitor läuft...wir komm ich da dran?

ManuMF 28. Aug 2005 11:24

Re: Strecke, die die Maus zurücklegt messen
 
und wieviel Zentimeter der Maus wieviel Pixel entsprechen.
Am besten nachmessen! ;-)
Das funktioniert natürlich dann nur bei deinem PC.

Ach, und der Monitor sollte mit 96dpi laufen. (Eigenschaften von Anzeige -> Einstellungen -> Erweitert)

Delphi-Freak 28. Aug 2005 11:32

Re: Strecke, die die Maus zurücklegt messen
 
Vielleicht hilft dir GetDeviceCaps (HORZSIZE bzw. VERTSIZE) oder DEVMODE (dmYResolution) weiter.
LG, ich

glkgereon 28. Aug 2005 11:39

Re: Strecke, die die Maus zurücklegt messen
 
also wenn ich nur die strecke will, die der mauszeiger aufm bildschirm zurücklegt....da könnte ich ja Screen.PixelsPerInch nehmen...oder?

stimmen diese umrechnungssachen?

Delphi-Quellcode:
{ *** Umrechnen ***}

function Inch2MM(Val: Extended):Extended;
begin
  Result:=Val*25.4
end;

function MM2Inch(Val: Extended):Extended;
begin
  Result:=Val/25.4
end;

function Px2Inch(Val: Int64):Extended;
begin
  Result:=Val/Screen.PixelsPerInch;
end;

function Inch2Px(Val: Extended):Int64;
begin
  Result:=Round(Val*Screen.PixelsPerInch);
end;

function Px2MM(Val: Int64):Extended;
begin
  Result:=Inch2MM(Val/Screen.PixelsPerInch);
end;

function MM2Px(Val: Extended):Int64;
begin
  Result:=Round(MM2Inch(Val)*Screen.PixelsPerInch);
end;

{ *** Ende Umrechnen *** }

tommie-lie 28. Aug 2005 11:45

Re: Strecke, die die Maus zurücklegt messen
 
Zitat:

Zitat von glkgereon
dafür brauche ich ja offensichtlich die info, mit wieviel dpi der monitor läuft...wir komm ich da dran?

Ausschließlich über Messen, never ever auf einem anderen Weg.
Lass vom Benutzer einen Streifen von 100 Pixeln länge abmessen, dann weißt du, wieviele Zentimeter hundert Pixel sind nd kannst damit rechnen. Eine andere Möglichkeit existiert nicht und kann auch nicht existieren.

Delphi-Freak 28. Aug 2005 12:15

Re: Strecke, die die Maus zurücklegt messen
 
Andererseits: Warum stimmt es dann z.B. bei Word? Wenn man da 100% einstellt, dann kann man ein Blatt Papier vor den Bildschirm halten und es geht sich genau aus...

Edit: @glkgeron: Die Umrechnungen stimmen glaube ich so weit, nur die letzten beiden würde ich etwas anders machen:
Delphi-Quellcode:
function Px2MM(Val: Int64):Extended;
begin
  Result:=Inch2MM(Px2Inch(Val));
end;

function MM2Px(Val: Extended):Int64;
begin
  Result:=Inch2Px(MM2Inch(Val));
end;
LG

glkgereon 28. Aug 2005 12:20

Re: Strecke, die die Maus zurücklegt messen
 
Zitat:

Zitat von Delphi-Freak
Andererseits: Warum stimmt es dann z.B. bei Word? Wenn man da 100% einstellt, dann kann man ein Blatt Papier vor den Bildschirm halten und es geht sich genau aus...

das stimmt, habs grad nochmal ausprobiert...ich glaub ich schreib microsoft mal ne mail^^

Zitat:

Zitat von Delphi-Freak
Edit: @glkgeron: Die Umrechnungen stimmen glaube ich so weit, nur die letzten beiden würde ich etwas anders machen:
Delphi-Quellcode:
function Px2MM(Val: Int64):Extended;
begin
  Result:=Inch2MM(Px2Inch(Val));
end;

function MM2Px(Val: Extended):Int64;
begin
  Result:=Inch2Px(MM2Inch(Val));
end;

ja, wär sicherlich irgendwo logischer...

tommie-lie 28. Aug 2005 12:24

Re: Strecke, die die Maus zurücklegt messen
 
Zitat:

Zitat von Delphi-Freak
Andererseits: Warum stimmt es dann z.B. bei Word? Wenn man da 100% einstellt, dann kann man ein Blatt Papier vor den Bildschirm halten und es geht sich genau aus...

Stell die Auflösung auf einen für deinen Monitor untypischen Wert ein oder verändere über das OSD die Bildbreite des Bildschirms. Stimmt's immer noch?

glkgereon 28. Aug 2005 12:40

Re: Strecke, die die Maus zurücklegt messen
 
ich hab nen ganz normalen monitor (also ich denk mal 4:3) und ne auflösung von 1280:1025 (5:4)

das format stimmt!!!

tommie-lie 28. Aug 2005 12:47

Re: Strecke, die die Maus zurücklegt messen
 
Zitat:

Zitat von glkgereon
ich hab nen ganz normalen monitor (also ich denk mal 4:3) und ne auflösung von 1280:1025 (5:4)

das format stimmt!!!

Dann hast du vermutlich einen 19"-Monitor, für den sind 1280 eine "normale" horizontale Auflösung. Aber stimmt die Word-Seite bei dir denn auch in der Höhe?

Delphi-Freak 28. Aug 2005 14:38

Re: Strecke, die die Maus zurücklegt messen
 
Vielleicht geht das ganze auf die native Auflösung (zumindestens bei TFTs). Das kann man ja als Standard verwenden und dem Benutzer anbieten, es genau zu justieren...

glkgereon 28. Aug 2005 19:18

Re: Strecke, die die Maus zurücklegt messen
 
Zitat:

Zitat von tommie-lie
Zitat:

Zitat von glkgereon
ich hab nen ganz normalen monitor (also ich denk mal 4:3) und ne auflösung von 1280:1025 (5:4)

das format stimmt!!!

Dann hast du vermutlich einen 19"-Monitor, für den sind 1280 eine "normale" horizontale Auflösung. Aber stimmt die Word-Seite bei dir denn auch in der Höhe?

nein, es ist ein 17"er

ja, auch die höhe stimmt (also ich hab A5 genommen, und dann die breite on A4, sind ja identisch)

schöni 29. Aug 2005 21:54

Re: Strecke, die die Maus zurücklegt messen
 
Hallo!

[quote="glkgereon"]
ja, auch die höhe stimmt (also ich hab A5 genommen, und dann die breite on A4, sind ja identisch)
[quote]

Wenn das schon mal klappt, dann müßte sich die Problemstellung des Threads hier lösen lassen.

Mit den Umrechnungsformeln, die glkgereon hier aufzeigt, dürfte dann alles geklärt sein. Bei Verwendung einer anderen Auflösung ändert sich ja auch der Wert für PixelsPerInch.

Gruß

schöni

hanselmansel 29. Aug 2005 22:35

Re: Strecke, die die Maus zurücklegt messen
 
HiHo,

Ihr redet hier doch von zwei verschiedenen Paar Schuh'! Die einen wollen berechnen, wie viele Meter/Pixel sich der Mauszeiger auf dem Bildschirm bewegt hat. Die anderen wollen aber wissen, wieviel meter sich das Hardwaregerät "Maus" auf seinem Pad bewegt hat. Dass zweiteres ungleich schwieriger ist, dürfte klar sein.

Ich hoffe, dass ich mich nicht selbst verlesen habe, sondern zum Problemlösen beitragen konnte.

lG,

hanselmansel


P.S.: Ich habe mal in so nem' Tutorial etwas mit Mausgeschwindigkeit gesehen. Habe aber keine Zeit es durchzulesen. Hier der LINK.

glkgereon 30. Aug 2005 12:37

Re: Strecke, die die Maus zurücklegt messen
 
Zitat:

Zitat von hanselmansel
HiHo,

Ihr redet hier doch von zwei verschiedenen Paar Schuh'! Die einen wollen berechnen, wie viele Meter/Pixel sich der Mauszeiger auf dem Bildschirm bewegt hat. Die anderen wollen aber wissen, wieviel meter sich das Hardwaregerät "Maus" auf seinem Pad bewegt hat. Dass zweiteres ungleich schwieriger ist, dürfte klar sein.

Ich hoffe, dass ich mich nicht selbst verlesen habe, sondern zum Problemlösen beitragen konnte.

Genau das habe ich auch gerade eben erst kapiert...
ich möchte die Strecke auf dem Bildschirm haben...

hanselmansel 30. Aug 2005 13:00

Re: Strecke, die die Maus zurücklegt messen
 
Die Frage ist nun, ob du die Strecke brauchst, die der Zeiger auf der Form zurücklegt (= einfach), oder die Strecke die der im Lauf der Windows-Session auf dem gersamten Bildschirm zurücklegt (= nicht mehr ganz so einfach...)?

ghost007 19. Mai 2007 14:01

Re: Strecke, die die Maus zurücklegt messen
 
also, ich denk mal, die strecke, die der zeiger auf dem bildschirm während der gesamten windows session zurück legt (was mich auch interessieren würde).

MfG - Ghost007


[EDIT]
also meine frage: wie rechne ich die pixel, in zurückgelegte cm auf dem bildschirm um?
[/EDIT]


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