Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Mauszeiger verstecken
dagegen - Do 12.08.04 11:06
Titel: Mauszeiger verstecken
Hallo, ich habe ein Programm, das Bilder bildschirmfüllend anzeigt und dabei nervt die Maus.
Ein Applikationsfenster ist zusätzlich noch vorhanden und wird mit der Maus auch ausgeblendet.
Bis jetzt habe ich das so gelöst: Bei OnMouseMove und OnKeyDown wird der Timer wieder neu gestartet und die Maus eingeblendet mit Screen.Cursor:=crDefault.
Bei Erreichen von 10 Sek. wird dann im Timer mit Screen.Cursor:=crNone die Maus ausgeblendet.
Problem: Es funktioniert nicht richtig. Ich habe den Eindruck, dass OnMouseMove nicht richtig funktioniert, d.h. auch wenn ich die Maus bewege, geht manchmal das Programmfenster und der Mauszeiger nach Ablauf des Timers weg.
Meine Idee wäre es nun, von Hand die Cursorposition abzufragen und dann zu entscheiden. Oder gibt es eine einfachere Lösung?
Johannes Maier - Do 12.08.04 11:52
Hmm ich weiß ja nicht wie das genau gemacht ist, und kenn mich auch nicht so aus, aber liegt das vll. daran, dass das OnMouseMove auf das Formular bezogen ist, und eigentlich bei OnMouseMove auf den Bildern reagieren sollte?
DelphiFreund - Do 12.08.04 12:22
Verwendest du eine Variable die sich hochzählt, und die sich bei einer Bewegung "OnMouseMove" und "OnMouseDown" auf 0 setzt? so würde ich das machen.
Ich hab nämlich eigentlich deine Methode nicht verstanden, wenn du's so machst müsste es funktionieren.
Gruß Delphifreund
DelphiFreund - Do 12.08.04 12:30
Ich hab das für dich mal gemacht (5Sek):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59:
| unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls;
type TForm1 = class(TForm) Timer1: TTimer; procedure Timer1Timer(Sender: TObject); procedure FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); function Setzten: Boolean; private zaehler: Integer; public end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Timer1Timer(Sender: TObject); begin zaehler:= zaehler + 1; if zaehler = 5 then begin Cursor:= crNone; end; end;
function TForm1.Setzten: Boolean; begin zaehler:= 0; Cursor:= crDefault; end;
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin Setzten; end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin Setzten; end;
end. |
Gruß DelphiFreund
dagegen - Do 12.08.04 13:12
Hallo, danke für den Programm-Code! Genau so habe ich das auch schon realisiert. Und jetzt tritt das Problem auf, dass OnMouseMove nicht aufgerufen wird, wenn ich z.B. auf den vorhandenen Karteikartenreitern die Maus hin- und herbewege. Ich habe noch nicht vollständig herausgefunden, wann OnMouseMove eigentlich aufgerufen wird, aber definitiv ist es nicht nur von einer Mausbewegung abhängig sondern auch noch von irgendwelchen Elementen/Buttons/was weiß ich innerhalb der Anwendung.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!