Autor Beitrag
justblue
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Di 18.03.08 23:58 
Hallo,

ich verwende ein TImage als "Unterlage" für das Erstellen von Leveln zu einem Spiel. Unter bestimmten Bedingungen (z.B. wenn eine aus mehreren Schritten bestehende Aktion noch nicht vollständig abgeschlossen ist) möchte ich verhindern, dass der Mauszeiger das TImage verlassen kann. Wie kann ich das realisieren?

Vielen Dank
jb
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 19.03.08 00:01 
Hi und :welcome: im Delphi-Forum,

Ob das denn so sinnvoll ist... :?
Mach lieber einen Bestätigen-Button, bei dem du dann nur Akzeptierst, wenn die Aktion abgeschlossen ist!

Letztlich wirst du das übrigens nie verhindern können, da dein Fenster den Fokus verlieren kann. Und das ist auch gut so!(irgendwo war doch heute schonmal so ein Fall von "Schadsoftware", die den Benutzer behindert :gruebel: )...

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
justblue Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 19.03.08 09:39 
Danke für die Antwort, dann werde ich mal konkreter:

Das Zeichnen einer Linie läuft so ab: Linksklick auf das Feld, an dem die Linie beginnen soll, dann Rechtsklick auf das Feld, an dem die Linie enden soll. So weit, so gut. Das Problem ist: Sobald ich am Rand arbeite und mal aus Versehen das TImage mit dem Mauszeiger verlasse, wird alles resettet, weil es sich um eine Methode des TImage handelt. Ich muss nochmal das erste Feld markieren und von vorne anfangen. Daher wäre es für mich sehr viel angenehmer, wenn dieses unabsichtliche Hinausfahren so lange verhindert wird, bis die rechte Maustaste geklickt wurde.

Schöne Grüße
jb
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19339
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 19.03.08 10:54 
Es gibt zu dem Zweck den Befehl ClipCursor, der allerdings bei mir einen Firewall-Alarm auslöst, da die Maus kontrolliert werden soll. ;-)
Xentar
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Mi 19.03.08 11:00 
Wieso resettest du alles, wenn man das Image verlässt?
Wäre es nicht einfacher, die Einstellungen dann zu behalten?

Also, in deinem Beispiel:
Man möchte einen Endpunkt am Rand setzen, und bewegt dabei die Maus aus dem Bereich. -> Nicht schlimm, bewegt man die Maus ein paar Pixel zurück, klickt nochtmal mit der rechten Maustaste, und diesmal gehts.
Wieso muss man dann wieder von vorne anfangen?
justblue Threadstarter
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Mi 19.03.08 13:29 
user profile iconXentar hat folgendes geschrieben:
Wieso resettest du alles, wenn man das Image verlässt?
Wäre es nicht einfacher, die Einstellungen dann zu behalten?


Nein. Wenn - in meinem Beispiel - der erste Punkt der Linie gesetzt ist und kein Reset erfolgt, dann kann der Benutzer jede Menge Blödsinn machen. Er kann in einen anderen Modus umschalten, eine Datei laden, eine Datei speichern und so weiter. Das führt dann in der Folge zu undefinierten Zuständen und weiteren Nettigkeiten. Deshalb habe ich das Problem so gelöst, dass bei "OnMouseLeave" alles in einen definierten und stabilen Zustand zurückgesetzt wird.

Deshalb habe ich mir gedacht, ich kann irgendeinen Schalter oder sonstwas setzen oder ein Ereignis so bearbeiten, dass der Zeiger einfach an den Grenzen des TImage "kleben" bleibt, so lange die Sequenz nicht vollständig abgearbeitet ist. Ich kann zwar die Maus und den Zeiger weiterhin frei bewegen, aber nur innerhalb der definierten Grenzen. Sobald auch der zweite Punkt definiert ist, ist wieder alles freigegeben. War vielleicht etwas naiv von mir... ;)

Schöne Grüße
jb
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mi 19.03.08 16:41 
user profile iconjustblue hat folgendes geschrieben:
user profile iconXentar hat folgendes geschrieben:
Wieso resettest du alles, wenn man das Image verlässt?
Wäre es nicht einfacher, die Einstellungen dann zu behalten?


Nein. Wenn - in meinem Beispiel - der erste Punkt der Linie gesetzt ist und kein Reset erfolgt, dann kann der Benutzer jede Menge Blödsinn machen. Er kann in einen anderen Modus umschalten, eine Datei laden, eine Datei speichern und so weiter. Das führt dann in der Folge zu undefinierten Zuständen und weiteren Nettigkeiten. Deshalb habe ich das Problem so gelöst, dass bei "OnMouseLeave" alles in einen definierten und stabilen Zustand zurückgesetzt wird.

Deshalb habe ich mir gedacht, ich kann irgendeinen Schalter oder sonstwas setzen oder ein Ereignis so bearbeiten, dass der Zeiger einfach an den Grenzen des TImage "kleben" bleibt, so lange die Sequenz nicht vollständig abgearbeitet ist. Ich kann zwar die Maus und den Zeiger weiterhin frei bewegen, aber nur innerhalb der definierten Grenzen. Sobald auch der zweite Punkt definiert ist, ist wieder alles freigegeben. War vielleicht etwas naiv von mir... ;)

Schöne Grüße
jb


Hi,

Das ist doch mal ein Ansatz :wink: .

Wenn das Zeichnen beginnt, disablest du die Umschalt-Buttons und insgesammt "allen diesen Blödsinn"^^.

mfG,

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)