Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Maus beschränken (https://www.delphipraxis.net/86918-maus-beschraenken.html)

himitsu 24. Feb 2007 12:05

Re: Maus beschränken
 
Nee, eigentlich ist es egal welchen Style die Form hat
denn die Beschränkung hat ja nichts mit der Form selber zu tun.
Es wird ja schließlich nur die Position der Form und sonst nichts weiter davon verwendet.

Wie genau hast du es denn aktuell gelöst?

SaFu 24. Feb 2007 12:21

Re: Maus beschränken
 
Hab es erstmal test weise über ein Button auf der Ersten Form realiesiert.

Soll aber eigentlich so funktionieren das wenn ich die Form2 Schließe das die Maus wieder auf Form8,Form9 und Form10 beschränkt ist.

Könnte das ja über das OnClose Ereignis der Form2 machen aber wie gesagt habe da einwenig probleme.
Ich glaube das Problem ist das die Form8,Form9 und Form10 immer zu sehen sind die Laufen Extern auf einen LCD Monitor den man interaktiv bedienen kann.
Das heist mein Monitor ist eigentlich erweitert um den LCD Monitor jetzt kann man aber immoment die Maus vom LCD auf den Normal Monitor ziehen und etwas bedienen was aber nicht sein soll.

Erst wenn man auf das normale programm auf dem Monitor zugreift soll die Maus vom LCD verschwinden. nach der bedienung des Programms soll die Maus auf dem LCD wieder zu verfühgung stehen und auch nur da. das heist ich muss die Maus danach wieder beschränken und das Funktionier nicht

Wenn iches so schreibe
Delphi-Quellcode:
procedure TForm1.MausbesClick(Sender: TObject);
var   maus :tRect;
begin
  maus.Left:= Form8.Left;
  maus.Top:= Form8.Top;
  maus.Right:= Form8.Left + Width;
  maus.Bottom:= Form8.Top + Height;
  ClipCursor(@maus);
end;
ist die Maus auf Form1 beschränkt

himitsu 28. Feb 2007 02:52

Re: Maus beschränken
 
hmmm, wenn das so ist, wie wäre es dann, wenn du die Maus nicht versuchst auf die verschiedenen Forms zu beschränken, sondern gleich auf das LCD?

Das würde dann vorallem die Verwaltung der Maus vereinfachen (statt auf mehrere Forms nur noch auf einen Monitor)

Derzeit versuchst du ja sozusagen die Mausbeschränkung auf mehrere Positionen (Forms) abzugleichenund, wobei es dann doch auch mehrere Zustände gäbe, welche sich gegenseitig beeinflussen könnten.
So gäbe es dann aber nur noch 2 Zustände ... Maus beshränkt, oder nicht.

vermutlich etwa so
Delphi-Quellcode:
ClipCursor(@Screen.Monitors[1].WorkareaRect);
Über Screen und Screen.Monitors (Unit Forms) müsstest du dann vorher nur noch das LCD finden.


Delphi-Quellcode:
nach der bedienung des Programms ...
Dieses soll jetzt aber nicht bedeuten, daß sich dein Programm beendet?
Jedenfalls konnte ich feststellen, das die Beschränkung beim Beenden des Programms ebenfalls mit aufgehoben wird.

Luckie 28. Feb 2007 06:31

Re: Maus beschränken
 
Zitat:

Zitat von himitsu
Jedenfalls konnte ich feststellen, das die Beschränkung beim Beenden des Programms ebenfalls mit aufgehoben wird.

Nur aus Neugier: Ist das auch so, wenn man das Programm mit dem Taskmanager abschieest?

SaFu 28. Feb 2007 07:15

Re: Maus beschränken
 
Das hört sich ja ganz gut an habe auch schon in der Delphi Hilfe nachgeschaut, wie ermittel ich denn den Aktuellen Monitor und den LCD.
Noch eine Anmerkung, der LCD ist über eine 2 Grafikkarte angesteuert.

himitsu 28. Feb 2007 07:36

Re: Maus beschränken
 
Liste der Anhänge anzeigen (Anzahl: 2)
Was die Monitore angeht, da kann ich nicht helfen ... hab ja nur einen Monitor ;(

Allerdings ist dieses ja schon 'ne neue Frage ... also in 'nem eigenem/neuen Thread nochmals nachfragen ... falls die Suche nicht schon irgendwo was dazu ausspuckt ^^


Ich denk mal mit Screen.MonitorFromWindow(Form1) sollte es gehn.
Man könnte ja auch mal prüfen welchen Monitor man direkt über Screen (nicht Screen.Monitors) bekommt?

Bei 2 Monitoren könnte es vermutlich aber auch schon ausreichen, wenn du den (sekundären) Monitor suchst.

Delphi-Quellcode:
If not Screen.Monitors[...].Primary Then ...
Der "normale" Monitort wird ja bestimmt als Primärer eingerichtet sein. :stupid:


@Luckie:

Hmm, ich hätt jetzt zwar gedacht, daß es da auch so ist, da sich ja anscheinend Windows um das Freigeben kümmert ... schließlich wird doch nichts für's Freigeben im Programm registriert, aber


Erstmal zu SirThornberry's "Strg + Alt + Entf"-Thease:
anscheinend kommt es wohl nicht (unbedingt) auf's Drücken von "Strg + Alt + Entf" an, sondern der WindowsTaskManager gibt den Bereich immer frei, wenn er den Eingabefokus bekommt. :gruebel:

Daher kann man das mit diesem TaskManager nicht versuchen.


Also ein Versuch mit'm Process Explorer, welcher nicht von sich aus den Bereich freigibt.
Und da war es genauso, sobald der Versuchsprozess abgeschoßen wurde war auch der Mauszeiger wieder frei.


In der Konsole scheint es genauso, nur daß dort auch so schon recht schnell der Bereich wieder freigegeben wird ... z.B. auch dann wenn die Konsole "nur" den Eingabefokus zurückbekommt.


Auf WinXP getestet.


QuellCode zu den Anhängen: :angel:
Delphi-Quellcode:
// Project1

Procedure TForm1.Button1Click(Sender: TObject); // einsperren
  Var Maus: TRect;

  Begin
    Maus.Left  := Left;
    Maus.Top   := Top;
    Maus.Right := Left + Width;
    Maus.Bottom := Top + Height;
    ClipCursor(@Maus);
  End;

Procedure TForm1.Button2Click(Sender: TObject); // freigeben
  Begin
    ClipCursor(nil);
  End;
Delphi-Quellcode:
Program Project2;

{$APPTYPE CONSOLE}

Uses Windows;

Var Maus: TRect;

Begin
  Maus.Left  := 100;
  Maus.Top   := 100;
  Maus.Right := 500;
  Maus.Bottom := 400;
  ClipCursor(@Maus);
  ReadLn;
  WriteLn('end');
End.

SaFu 28. Feb 2007 07:42

Re: Maus beschränken
 
Naja und sonnst gibt es keine einfacheren Lösungen :dance:

Das hört sich für mich eigentlich Kompliziert an.


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz