AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Form schliessen wenn die Maus das Form verlässt.
Thema durchsuchen
Ansicht
Themen-Optionen

Form schliessen wenn die Maus das Form verlässt.

Ein Thema von Kostas · begonnen am 6. Jun 2005 · letzter Beitrag vom 7. Jun 2005
Antwort Antwort
Seite 2 von 2     12   
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#11

Re: Form schliessen wenn die Maus das Form verlässt.

  Alt 6. Jun 2005, 18:37
Zitat von Kostas:
Ist es möglich das dieser event nur gefeuert wird wenn die
Maus die Formgrenzen verlassen hat?
Setze doch einfach vor das Form.Close eine If Abfrage
Delphi-Quellcode:
if (not MousePoint.X in [Form1.Left..Form1.Left+Form1.Width]) and (not MousePoint.Y in [Form1.Top..Form1.Top+Form1.Height]) Then
Form1.Close;
Benjamin
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#12

Re: Form schliessen wenn die Maus das Form verlässt.

  Alt 6. Jun 2005, 18:44
Moin!

Kurzform:
Delphi-Quellcode:
  If Not PtInRect(Mouse.CursorPos, BoundsRect) Then
    Close;
MfG
Muetze1
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#13

Re: Form schliessen wenn die Maus das Form verlässt.

  Alt 6. Jun 2005, 19:45
Funkt schon, wenn ich langsam aus dem Form fahre.

ich habe es in FormCloseQuery und in WMMouseLeave probiert.
Das gleiche verhalten.

In diesem Form habe ich nur ein TLaben. Wäre es nicht
besser in WMMouseLeave das TLabel abzufangen?
Irgend eine Idee wie das gehen könnte?


procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
CanClose := not PtInRect(BoundsRect, Mouse.CursorPos);
end;



procedure TForm1.WMMouseLeave(var Msg: TMessage);
begin
if not PtInRect(BoundsRect, Mouse.CursorPos)
then frBlase.close;

end;
  Mit Zitat antworten Zitat
engine

Registriert seit: 6. Mär 2005
73 Beiträge
 
#14

Re: Form schliessen wenn die Maus das Form verlässt.

  Alt 6. Jun 2005, 21:03
Hallo Kostas,


du musst noch einen Timer in dein Programm einbauen, dann sollte es mit meinem Code funktionieren.
Delphi-Quellcode:
unit Main;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Procedure AutoOff;
var
  p : TPoint;
  wc : TWinControl;

begin
  GetCursorPos(p);

  begin
    wc:=FindVCLWindow(p);

    if wc <> nil then // Maus befindet sich im Programmfenster
      begin

      end
    else // Maus befindet sich außerhalb des Programmfenster
      begin
        Form1.Close; //Fenster schließen
      end;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  AutoOff;
end;

end.
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

Re: Form schliessen wenn die Maus das Form verlässt.

  Alt 6. Jun 2005, 22:10
unglaublich, aber so funkt es leider auch nicht.

Das Form wird geschlossen sobalt ich z.b. auf Die Taskleiste fahre
und somit die App verlasse.
In meinem Fall habe ich ein Form offen und instanziere ein
weiteres Form mit einer TLabel so wie ein ShowMessage Dialog.
Wenn nun der Mauszeiger die Grenzen des Form verläst soll das
Form automatisch geschlossen werden.
So eine winzige Anforderung macht so eine menge Erger.
Echt unglaublich.




Zitat von engine:
Hallo Kostas,


du musst noch einen Timer in dein Programm einbauen, dann sollte es mit meinem Code funktionieren.
Delphi-Quellcode:
unit Main;

interface

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

type
  TForm1 = class(TForm)
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

Procedure AutoOff;
var
  p : TPoint;
  wc : TWinControl;

begin
  GetCursorPos(p);

  begin
    wc:=FindVCLWindow(p);

    if wc <> nil then // Maus befindet sich im Programmfenster
      begin

      end
    else // Maus befindet sich außerhalb des Programmfenster
      begin
        Form1.Close; //Fenster schließen
      end;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  AutoOff;
end;

end.
  Mit Zitat antworten Zitat
engine

Registriert seit: 6. Mär 2005
73 Beiträge
 
#16

Re: Form schliessen wenn die Maus das Form verlässt.

  Alt 6. Jun 2005, 22:55
Zitat von Kostas:
unglaublich, aber so funkt es leider auch nicht.

Das Form wird geschlossen sobalt ich z.b. auf Die Taskleiste fahre
und somit die App verlasse.
In meinem Fall habe ich ein Form offen und instanziere ein
weiteres Form mit einer TLabel so wie ein ShowMessage Dialog.
Wenn nun der Mauszeiger die Grenzen des Form verläst soll das
Form automatisch geschlossen werden.
So eine winzige Anforderung macht so eine menge Erger.
Echt unglaublich.
Damit ich das jetzt richtig verstehe.

Du hast eine Form offen, nennen wir sie MainForm.
Du erzeugst eine weitere Form (SecondForm). SecondForm enthält ein Label und öffnet einen ShowMessage Dialog.

Nun meine Frage, von welcher Form fährst du mit der Maus runter und was genau soll nun geschlossen werden?
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#17

Re: Form schliessen wenn die Maus das Form verlässt.

  Alt 7. Jun 2005, 10:47
sorry, ich erkläre es gerne.

Meine Anwendung besteht aus einem MainForm.
Das MainForm erzeugt ein SecondForm und setzt zugleich den Mauscursor
in der Mitte von SecondForm. Das SecondForm beinhaltett nur ein TLabel.

Wenn die Maus die Form-Grenzen das SecondForm verläst, soll das
SecondForm geschlossen werden.

CM_MOUSELEAVE (siehe unten) feuert leider auch wenn der Mauscursor
über das SecondForm.Label1 fährt.
Wenn ich das Label umfahre und danach die Formgrenzen verlasse wird
das SecondForm ganz zuverlässig geschlossen.

Ich müsste also herausfinden wodurch WMMouseLeave gefeuert wurde.
Steht möglicherweise eine Information in der TMessage Struktur
die dafür verwendbar währe?


Delphi-Quellcode:
  private
    { Private declarations }
    Procedure WMMouseLeave(Var Msg: TMessage); Message CM_MOUSELEAVE;
  end;


var
  frSecondForm: TSecondForm;

implementation
{$R *.dfm}

procedure TSecondForm.WMMouseLeave(var Msg: TMessage);
begin
  SecondForm.close; //funkt einwandfrei

  {funkt leider nicht zuverlässig}
// if not PtInRect(SecondForm.BoundsRect, Mouse.CursorPos)
// then SecondForm.close;

end;
Ich hoffe es ist jetzt klar geworden was ich meine.
Ansonsten kann ich gerne eine Mini-APP erzeuge.

Gruß Kostas
  Mit Zitat antworten Zitat
Kostas

Registriert seit: 14. Mai 2003
Ort: Gerstrhofen
1.099 Beiträge
 
Delphi 10 Seattle Enterprise
 
#18

Re: Form schliessen wenn die Maus das Form verlässt.

  Alt 7. Jun 2005, 15:24
Jetzt funkts endlich. !!!!!

Ich muss nur einfach den Rahmen um zwei Pixel umlaufend kleiner machen.
Und die Welt ist wieder in Ordnung. So einfach ist das, und hat drei Tage
Arbeit gemacht.

Herzlichen Dank an Alle und bitte sogleich um Verzeihung.
Gruß Kostas



Delphi-Quellcode:
private
    { Private declarations } 
    Procedure WMMouseLeave(Var Msg: TMessage); Message CM_MOUSELEAVE;
  end;


var
  frSecondForm: TSecondForm;

implementation
{$R *.dfm} 

procedure TSecondForm.WMMouseLeave(var Msg: TMessage);
var fb:TRect;
    mp:TPoint;
begin
  mp := Mouse.CursorPos;
  fb := SecondForm.BoundsRect;
  fb.left := fb.left + 2;
  fb.Right := fb.Right - 2;
  fb.Top := fb.Top + 2;
  fb.Bottom := fb.Bottom - 2;

  if not PtInRect(fb, mp)
  then SecondForm.close;

end;
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:34 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