Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 30.12.2006, 12:05 Titel: Mausanzeige in einem bestimmten Bereich |
|
|
Hallo Jungs!
Ich habe ein Problem mit der Maus!
Ich besitze am Bildschirm ein Feld mit
Code: |
Y 45
X 210 ***********************
X 210 * *
X 210 * * X 616
X 210 * * X 616
X 210 * *
X 210 * *
X 210 ***********************
Y 420
|
das da oben sind die Koordianten.
Und ich möchte das der Mauszeiger nicht in dieses Feld kann/darf.
Aber der Mauszeiger soll jederzeit aussen herum frei bewegt werden können.
Ich habe schon mal ein paar Versuche gestartet aber leider sind meine Versuche fehlgeschlagen.
Wenn ein Mauszeiger sich im Kasten befindet und nicht heraus soll konnte ich bereits programmieren, aber das andere das er nicht hinein darf nicht!
Ich verwende MAUSMODL.BAS das man bei www.Qbasic.de download/Maus&Tastatur/Maus.zip herunterladen kann.
Bei einem meiner Test waren gleich zwei Mauszeiger zu sehen, wobei man den Mauszeiger nicht mehr bewegen konnte.
Ich hoffe ihr könnt mir helfen!
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Flo aka kleiner_hacker
Anmeldungsdatum: 23.06.2006 Beiträge: 1210
|
Verfasst am: 30.12.2006, 12:52 Titel: |
|
|
hm
vllt machstes mal so:
Code: |
alte koordinaten sichern
maus einlesen
WENN die maus im bereich ist DANN:
maus abschalten
zu den alten koordinaten setzen
maus aktivieren
|
_________________ MFG
Flo
Satoru Iwata: Wer Spaß am Spielen hat, fragt nicht nach Grafik.
zum korrekten Verstaendnis meiner Beitraege ist die regelmaessige Wartung des Ironiedetektors unerlaesslich. |
|
Nach oben |
|
 |
Lutz Ifer Grillmeister

Anmeldungsdatum: 23.09.2005 Beiträge: 555
|
Verfasst am: 01.01.2007, 23:18 Titel: |
|
|
wenn ich mich recht erinnere gab es da auch einen interrupt / eine funktion, um die maus in ihrer bewegungsfreiheit einzugrenzen, also einen bereich zu definieren, in dem die maus sich bewegen kann, aber ansonsten nicht. quasi wie am bildschirmrand, dass es halt net weiter geht.
wenn dem so ist, musst du deinen bildschirm in 9 felder unterteilen, (wie ein tic-tac-toe feld, nur nicht alle gleich groß). das feld in der mitte ist das, in das die maus nicht darf. und nun immer abfragen:
wenn die maus in einem eck-feld ist, darf sie in jedes andere feld.
wenn die maus in einem seitenfeld ist, darf sie nur in die angrenzenden eckfelder, also die grenzen halt auf bildschirmrand und trennlinie zu mittelfeld setzen.
sollte soweit funktionieren, mit der kleinen einschränkung, dass es möglich ist, über das exakte eckpixel in die mitte "einzubrechen".
ansonsten die lösung von "kleiner hacker": letzte bekannte mausposition immer speichern, aktuelle überprüfen, ob innerhalb vom "verbotenen bereich", wenn ja, zurück zu gespeicherten alten koordinaten, ansonsten koordinaten speichern und fertig. abschalten des cursors sollte nicht nötig sein.
Lutz Ifer
ps: bei der mausroutine, die ich verwendet habe, war es hilfreich, vor zeichenoperationen (circle, line, pset etc.) den mauscursor immer abzuschalten, weil sich so grafikfehler vermeiden ließen. _________________ Wahnsinn ist nur die Antwort einer gesunden Psyche auf eine kranke Gesellschaft. |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 02.01.2007, 11:34 Titel: |
|
|
Lutz Ifer hat Folgendes geschrieben: | wenn ich mich recht erinnere gab es da auch einen interrupt / eine funktion, um die maus in ihrer bewegungsfreiheit einzugrenzen, also einen bereich zu definieren, in dem die maus sich bewegen kann, aber ansonsten nicht. quasi wie am bildschirmrand, dass es halt net weiter geht. |
Fensterbereich setzen: INT 33h, AX=0007h (horizontal) und INT 33h, AX=0008h (vertikal), d.h. danach lässt sich die Maus nur noch in einem "Gefängnis"-Bereich bewegen.
Lutz Ifer hat Folgendes geschrieben: | ansonsten die lösung von "kleiner hacker": letzte bekannte mausposition immer speichern, aktuelle überprüfen, ob innerhalb vom "verbotenen bereich", wenn ja, zurück zu gespeicherten alten koordinaten, ansonsten koordinaten speichern und fertig. abschalten des cursors sollte nicht nötig sein. |
Alternative: Man kann es auch wie Windows machen, also Maus kann sich überall bewegen, aber man ändert das Symbol (INT 33h, AX=0009h) in eine "Verbotstafel" und ignoriert Klicks.
Lutz Ifer hat Folgendes geschrieben: | ps: bei der mausroutine, die ich verwendet habe, war es hilfreich, vor zeichenoperationen (circle, line, pset etc.) den mauscursor immer abzuschalten, weil sich so grafikfehler vermeiden ließen. |
Das ist nichts library-Spezifisches, sondern eine allgemeine Eigenschaft der Mausunterstützung. Auch bei http://www.dreael.ch/QB/mini_des.zip musste ich jeweils vor Veränderungen ein INT 33h/AX=0002h aufrufen, dann meine Veränderungen vornehmen und am Schluss wieder INT 33h/AX=0001h aufrufen.
Ursache dieses Problems: Die traditionellen PC-Grafikkarten unterstützen keinerlei Hardware-Sprites im Gegensatz zur Commodore-Rechnerfamilie, womit der DOS-Maustreiber den Cursor direkt ins Video-RAM zeichnen muss. Beim C 64 als auch Amiga liess sich ein Grafikcursor als Hardware-Sprite programmieren, womit das Video-RAM nicht verändert werden musste. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
ytwinky

Anmeldungsdatum: 28.05.2005 Beiträge: 2624 Wohnort: Machteburch
|
Verfasst am: 02.01.2007, 22:22 Titel: |
|
|
Hi,
auch auf die Gefahr hin, daß dies schon bekannt ist:
Mathias Harbeck hat eine gute Zusammenstellung der MausInterrupts geschrieben(hat mir bei Pascal viel geholfen..)
Gruß
ytwinky _________________
v1ctor hat Folgendes geschrieben: | Yeah, i like INPUT$(n) as much as PRINT USING.. | ..also ungefähr so, wie ich GOTO.. |
|
Nach oben |
|
 |
Bad_King gesperrt

Anmeldungsdatum: 15.04.2006 Beiträge: 455 Wohnort: nähe Stuttgart
|
Verfasst am: 02.01.2007, 22:55 Titel: |
|
|
@ALWIM:
Meinst du dass wenn man mit der Maus über das Feld geht, dass dann der Mauszeiger ausgeblendet wird oder dass die Maus sich nicht in dieses Feld hineinziehen lässt.
Wenn 1. : Das ist glauob die Methode von kliner_hacker.
2. : Code: |
IF mauszeiger_über_dem_gesperrten_bereich=true
THEN mauszeiger_einen_schritt_zurück() |
Also wenn der mauszeiger über einen "verbotenen Pixel" drauf gegangen ist, wird der Mauszeiger zur voherigen Position zurückgesetzt. |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.01.2007, 00:01 Titel: |
|
|
Die methode habe nwir schon weiter oben. du musst sie doch nicht noch 100x schreiben, er kann sich doch die beste selbst aussuchen....  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 03.01.2007, 02:04 Titel: |
|
|
Hallo!
Ich meine, dass man die Maus nicht in dieses Feld hinein ziehen kann.
Aber man müsste es so machen, dass das Programm erkennt von welcher Seite aus man mit der Maus hinein möchte.
Bis jetzt habe ich nicht das was ich wollte
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.01.2007, 02:19 Titel: |
|
|
also die idee mit dem "verboten-cursor" find ich eig toll. für was brauchst du dass denn genau? _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 03.01.2007, 12:14 Titel: |
|
|
Hallo!
Ich brauche das für mein STOP!
Mit freundlichen Grüßen
Alexander Lenhard _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 03.01.2007, 12:51 Titel: |
|
|
Jaaah, das konnte ich mir ausdenken. Ich meine aber, was du damcht MACHEN willst. Wenn du z.B. willst, dass man irgendwelche Sachen in einem bestimmten Feld nicht anklicken darf, wäre die Anderer-Cursor-Methode besser. Und ich sage dir mal, was ich von der Cursor-Zurücksetzen-Methode halte:
Ich bin jemand, der die Maus ziemlich schnell über den Bildschirm zieht - von einer Ecke in die andere, durch die Mitte, ... Und da ist es wirkilch verdammt blöd, wenn ich mich da durch einen Hindernisparcour von nicht ansteuerbaren Koordinaten schlagen muss  _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 03.01.2007, 12:58 Titel: |
|
|
Hallo!
In diesem Kasten steht ein Text drin und der kann von dem Mauszeiger unlesbar gemacht werden. (Bei unsachgemäßer Behandlung!)
Darum will ich das man mit dem Mauszeiger nicht dahinein darf! Ganz rechts ist sowieso kein Button mehr für die Maus also kann man ruhig mal ein Hinderniss mit einbauen!
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
Eisbaer

Anmeldungsdatum: 16.10.2004 Beiträge: 354 Wohnort: Deutschland,Bayern
|
Verfasst am: 03.01.2007, 13:18 Titel: |
|
|
Naja dann zeichne halt den text neu wenn die Maus drauf war, also alte Kordinaten Speichern Maus bewegen, Kordinaten wieder hinpixeln. _________________ Eigene Webseite:
http://www.eisbaer-studios.de |
|
Nach oben |
|
 |
ALWIM

Anmeldungsdatum: 08.08.2006 Beiträge: 1048 Wohnort: Niederbayern
|
Verfasst am: 03.01.2007, 13:22 Titel: |
|
|
Hallo!
Genau das will ich ja nicht!
Naja egal wenn ich es nicht hinkriege!
Muss jetzt zur Arbeit. Um ca. 23.00 Uhr komme ich dann wieder!
Mit freundlichen Grüßen
ALWIM _________________ SHELL SHUTDOWN -s -t 05 |
|
Nach oben |
|
 |
dreael Administrator

Anmeldungsdatum: 10.09.2004 Beiträge: 2529 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 03.01.2007, 22:44 Titel: |
|
|
Habe ein kleines Beispiel zusammengestellt:
http://beilagen.dreael.ch/QB/MAUSSCRO.ZIP
Stellt ein ganz einfaches Info-Fenster dar, wo man meinetwegen die "Credits" einblenden würde und welches man mit "OK" wegklicken kann.
@ALWIN: Version MAUSSC_A.BAS entspricht in etwa Deiner Ausgangslage: Typisches Problem, dass sich der Scrollinhalt "verschmiert", wann man mit dem Zeiger darüberrollt.
Wir wollen das Ganze nun systematisch verbessern: Das Verschmieren lässt sich durch kurzzeitiges Zeiger aus- und einblenden vermeiden. Version MAUSSC_B.BAS tut dies exakt. Aber auch diese Version ist noch nicht perfekt: Zeiger flimmert ständig im Zehntelssekundentakt!
Aus diesem Grund optimieren wir es noch einen Schritt: Ausblendung nur noch dort, wo sich die Grafik verändert. Ist in Version MAUSSC_C.BAS so implementiert. Jetzt tritt das Flimmern nur noch auf, wenn sich der Mauszeiger über einem bewegten Bereich befindet.
Übrigens kann man teilweilse auch bei Windows (zumindest früher in 3.1x) diesen Effekt beobachten, speziell, wenn nur der Standard-VGA-Bildschirmtreiber aktiv ist, denn moderne Grafikkarten implementieren teilweise ebenfalls einen Hardware-Sprite-Mauszeiger, der die zuvor diskutierten Video-RAM-Zugriffsprobleme löst.
@ALWIN: Ich würde es an Deiner Stelle wie mein letztes Beispiel lösen. _________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
 |
|