Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mauszeiger nach 3 Sekunden verschwinden lassen (https://www.delphipraxis.net/30092-mauszeiger-nach-3-sekunden-verschwinden-lassen.html)

zappel 19. Sep 2004 21:35


Mauszeiger nach 3 Sekunden verschwinden lassen
 
Hallo!

Ich bin gerade dabei, einen kleinen Bildschirmschoner mit Diashow zu basteln. Nun möchte ich einbauen, dass die Maus unsichtbar wird, wenn man sie 3 Sekunden lang nicht bewegt. Dazu habe ich einen Timer eingebaut, der TForm.Cursor:=crNone setzt. Bei FormMouseMove folgt TForm.Cursor:=crDefault. Das klappt auch alles bis dahin super. (Nach dem auslösen der Timers wird er disabled und wieder bei FormMouseMove enabled, aerb das nur nebenbei.)

Das Gleiche möchte ich nun mit einem Image machen, da der Zeiger auch verschwinden soll, wenn er sich unbewegt auf dem Bild befindet. Das klappt allerdings nicht, der Zeiger bleibt sichtbar. Ich habe schon herausgefunden, dass er, wenn ich ihn nach mehr als 3 Sekunden wieder bewege, ganz kurz unsichtbar wird, dann aber sofort wieder erscheint...

Kann mir irgendwer mit meinem Problem helfen, habe hier in der DP nichts passendes gefunden.

Delphi-Quellcode:
procedure TForm1.TimerMouseTimer(Sender: TObject);
begin
  Image1.Cursor:=crNone;
  TimerMouse.Enabled:=false;
end;

procedure TForm1.Image1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  Image1.Cursor:=crArrow;
  TimerMouse.Enabled:=true;
end;

fiasko 19. Sep 2004 22:23

Re: Mauszeiger nach 3 Sekunden verschwinden lassen
 
Zitat:

Zitat von zappel
Kann mir irgendwer mit meinem Problem helfen, habe hier in der DP nichts passendes gefunden.

Wenn man nach Hier im Forum suchenmauszeiger verstecken sucht findet man aber etwas :-)

Verstecke den Cursor doch mal mit:

Delphi-Quellcode:
ShowCursor(false);

Sprint 19. Sep 2004 22:55

Re: Mauszeiger nach 3 Sekunden verschwinden lassen
 
Zitat:

Zitat von zappel
Nun möchte ich einbauen, dass die Maus unsichtbar wird, wenn man sie 3 Sekunden lang nicht bewegt. Dazu habe ich einen Timer eingebaut, der TForm.Cursor:=crNone setzt. Bei FormMouseMove folgt TForm.Cursor:=crDefault. Das klappt auch alles bis dahin super. (Nach dem auslösen der Timers wird er disabled und wieder bei FormMouseMove enabled, aerb das nur nebenbei.)

Warum setzt du den Cursor nicht mit Screen.Cursor?
Wenn du ein Image auf deiner Form hast, dann wird das MouseMove Ereignis der Form doch gar nicht ausgelöst. Besser wäre wenn du dafür das Ereignis OnMessage von TApplication auswerten würdest.
Hier mal ein simples Beispiel:
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure FormCreate(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
    procedure OnAppMessage(var Msg: TMsg; var Handled: Boolean);
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

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

procedure TForm1.OnAppMessage(var Msg: TMsg; var Handled: Boolean);
begin

  Handled := False;

  if Msg.message <> WM_MOUSEMOVE then
    Exit;

  Screen.Cursor := crDefault;

  with Timer1 do
  begin
    Enabled := False;
    Enabled := True;
  end;

end;

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

procedure TForm1.FormCreate(Sender: TObject);
begin

  Application.OnMessage := OnAppMessage;

  with Timer1 do
  begin
    Interval := 3000;
    Enabled := True;
  end;

end;

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

procedure TForm1.Timer1Timer(Sender: TObject);
begin

  Screen.Cursor := crNone;

end;

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

end.
Muss da noch dazu sagen, das ich ein ganz großer Gegner von TTimer bin!!!


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