Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Maus abschalten je nach Form (https://www.delphipraxis.net/36849-maus-abschalten-je-nach-form.html)

Hansa 27. Dez 2004 01:31


Maus abschalten je nach Form
 
Hi,

die Maus wird mir für eine Tastaturanwendung langsam zu kompliziert. Wie immer im Leben, gibt es aber Formulare, in denen sie schon Sinn macht. Ich müßte nun also die Maus in bestimmten Formularen abschalten können, aber nicht immer. Also brauche ich den Befehl, wie das geht und wo ich ihn am besten einbaue.

Da ich formularweit viel OOP eingebaut habe genügt es eventuell, nur den WinAPI Befehl zentral einzubauen.

Joe24 27. Dez 2004 01:52

Re: Maus abschalten je nach Form
 
Eine einfache Lösung wäre einen leeren=transparenten Cursur dem
Formular mit den API-Befehlen LoadCursor und SetCursor zuzuweisen;

Hansa 27. Dez 2004 01:58

Re: Maus abschalten je nach Form
 
Zitat:

Zitat von Joe24
Eine einfache Lösung wäre einen leeren=transparenten Cursor...

Wenn man den Cursor nicht sieht, kommt man dann auf der Form nicht mehr an irgendwas dran ? Ist das so ?

Joe24 27. Dez 2004 02:01

Re: Maus abschalten je nach Form
 
Bei dem Cursor darf halt keit Hotspot definiert sein, soviel ich weis
durfte er dann auch keine Aktion auslösen.

Hansa 27. Dez 2004 02:08

Re: Maus abschalten je nach Form
 
Die Maus muß weg sein als Eingabemedium. Was auf dem bildschirm zu sehen ist, das ist mir egal. Eventuell ist es sogar besser der Mauscursor ist zu sehen und macht nur nichts.

Wenn man eine Endlosschleife einbaut, dann ist von der Maus auch nichts zu sehen. Insofern gehe ich davon aus, daß es eine WinApi-Funktion gibt, die das regelt. Und die muß ich dann eben einbauen.

Joe24 27. Dez 2004 02:13

Re: Maus abschalten je nach Form
 
Ich habe das gerade mal mit der API-Funktion ShowCursor( FALSE) ausprobiert.
Der Cursor ist so zwar nicht sichtbar aber die Cursor-Aktionen leider nicht deaktiviert.

Sprint 27. Dez 2004 02:14

Re: Maus abschalten je nach Form
 
Zitat:

Zitat von Hansa
Ich müßte nun also die Maus in bestimmten Formularen abschalten können, aber nicht immer.

Kannst es ja so machen das wenn Tastatureingaben kommen die Maus ausgeblendet wird und beim Bewegen der Maus der Mauszeiger wieder eingeblendet wird.

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{--------------------------------------------------------------------------------------------------}

procedure TForm1.FormCreate(Sender: TObject);
begin

  Self.KeyPreview := True;

end;

{--------------------------------------------------------------------------------------------------}

procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin

  with Screen do
    if Cursor = crDefault then
      Cursor := crNone;

end;

{--------------------------------------------------------------------------------------------------}

procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
begin

  with Screen do
    if Cursor = crNone then
      Cursor := crDefault;

end;

{--------------------------------------------------------------------------------------------------}

end.

Joe24 27. Dez 2004 02:19

Re: Maus abschalten je nach Form
 
So funktioniert es:

Delphi-Quellcode:
var
  r : TRect;
begin
  r := Rect( Left, Top, Right, Bottom);
  ClipCursor( @r);
end;
mit Right = Left
und Bottom = Top.

ClipCursor ist eine API-Funktion.


Oder ander Variante über OnMouseMove-Event

Delphi-Quellcode:
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState;
    X, Y: Integer);
var
  CurPos : TPoint;
begin
  CurPos := Mouse.CursorPos;
  if ( X < Width div 2) and
     ( Y > X) and
     ( Y < Height -X) then
    CurPos := Point( Left , CurPos.Y) else
  if not ( X < Width div 2) and
     ( Y > Width -X) and
     ( Y < Height -( Width -X)) then
    CurPos := Point( Left +Width , CurPos.Y) else
  if ( Y < Height div 2) and
     ( X > Y) and
     ( X < Width -Y) then
    CurPos := Point( CurPos.X, Top) else
  if not ( Y < Height div 2) and
     ( X > Height -Y) and
     ( X < Width -( Height -Y)) then
    CurPos := Point( CurPos.X, Top +Height);
  if ( CurPos.X = Mouse.CursorPos.X) and
     ( CurPos.Y = Mouse.CursorPos.Y) then
    ShowCursor( TRUE) else
    begin
      CurPos := Mouse.CursorPos;
      ShowCursor( FALSE);
    end;
end;


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