Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Menü automatisch schließen (https://www.delphipraxis.net/56741-menue-automatisch-schliessen.html)

Baeuerle 10. Nov 2005 12:06


Menü automatisch schließen
 
Hallo zusammen,

ich habe folgendes Problem:

Ein Formular mit einem MainMenu. Nach einer gewissen Zeit ( über Timer gesteuert ) soll geprüft werden, ob das MainMenu gerade aktiv ist. Wenn ja soll dieses geschlossen werden.

Aktiv = Einträge sind sichtbar

Danke im vorraus

Baeuerle

s.h.a.r.k 10. Nov 2005 12:31

Re: Menü automatisch schließen
 
Hallo!

Ich würde das ganze so machen: Lege einen Timer auf die Form und sag ihm dass er das MainMenu schließen soll. Allerdigns musst du Enabled auf False setzen. Als Zeit gibts du die Zeit ein nach der das MainMenu geschlossen werden soll.
Beim OnPopup-Ereignis des MainMenu trägst du dann folgendes ein:
Delphi-Quellcode:
Timer1.Enabled := True;

Chegga 10. Nov 2005 12:34

Re: Menü automatisch schließen
 
Hi,

Zitat:

Zitat von Baeuerle
Wenn ja soll dieses geschlossen werden.

Das MainMenu "schließen" kann man mit MainMenu1.Destroy; machen.
Die Frage ist, ob du das auch willst?! :wink:

MfG Marc

P.S.:
Etwas Code wäre auch nicht schlecht. :zwinker:

Baeuerle 10. Nov 2005 12:36

Re: Menü automatisch schließen
 
Hi S.H.A.R.K,

danke für die Antwort... jedoch habe ich mich wohl nicht korrekt ausgedrückt.

Das mit dem Timer ist mir klar.
Das Problem ist das
Zitat:

sag ihm dass er das MainMenu schließen soll
wie mache ich dies????

@Chegga

ich will das Menü nicht freigeben sondern schließen !!!

Baeuerle 10. Nov 2005 14:12

Re: Menü automatisch schließen
 
**PUSH**

Luckie 10. Nov 2005 14:21

Re: Menü automatisch schließen
 
Findest du es nicht auch etwas unverschähm, schon nach zwei Stunden deinen Thread wieder nach oben zu holen? In der Delphipraxis ist dies erst wieder nach 24 Stunden gestattet.

Angel4585 10. Nov 2005 14:28

Re: Menü automatisch schließen
 
Hehe :mrgreen: gibs ihm Luckie :lol:
:angel:

chrisw 10. Nov 2005 14:43

Re: Menü automatisch schließen
 
Ich würde einfach einen Mausklick auf das Menü emulieren !

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
  Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
end;
Chris

ichbins 10. Nov 2005 14:49

Re: Menü automatisch schließen
 
wobei man allerdings auch irgendwoher die Menükoordinaten braucht...

Angel4585 10. Nov 2005 14:50

Re: Menü automatisch schließen
 
Kennt niemand eine geeignete PostMessage od. SendMessage?

chrisw 10. Nov 2005 14:53

Re: Menü automatisch schließen
 
Die Menükoordinaten 0,0 sind schon in Ordnung, dann schliesst sich das Menü !

chrisw 10. Nov 2005 14:56

Re: Menü automatisch schließen
 
Oder nimm das !
Delphi-Quellcode:
SendMessage(Handle, WM_LBUTTONCLK, 0, 0)

Baeuerle 10. Nov 2005 15:12

Re: Menü automatisch schließen
 
@Luckie

ok, sorry :oops: wird nicht wieder vorkommen

@all

leider funktioniert das mit dem Klick nur bedingt!

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
with TForm3.create(Application) do
 begin
 try
 ShowModal;
 finally
  Free;
  end;
 end;
end;
Habe diese proc leider erscheint das Menu auf Form3 nicht wenn dieses durch den Timer initialisiert wird und das Menu von Form1 geöffnet ist!

shmia 10. Nov 2005 15:45

Re: Menü automatisch schließen
 
Allein schon die Idee, ein Menu automatisch nach einer bestimmten Zeit zu schliesen ist doch
Quark.
Wenn ich ein Menue aufklappe und 3 Minuten so stehen lasse, hat das bestimmt einen Grund:
* bin Kaffee holen gegangen. Menue bleibt offen -> Gedankenstütze
* versuche gerade einen Screenshot vom Menue zu machen
...
Programme, die dazwischen funken und ein Eigenleben führen, machen sich unbeliebt. :warn:

Baeuerle 11. Nov 2005 07:16

Re: Menü automatisch schließen
 
Ok,

nochmal langsam zum mitdenken !!!!!!!

1. Ich habe ein Hauptformular, ein zweites Formular, dass anzeigt, welche Jobs zu erledigen sind ( so eine Art Sceduler )

2. Ich habe einen Thread, der überprüft ob der Sceduler ( Form2 ) angezeigt werden soll.

3. Startet der Sceduler wenn das Menü von Form1 offen ist, so wird das Menü von Form2 zwar angezeigt, jedoch werden die SubItems wenn ich auf den Haupteintrag des Menüs klicke nicht dargestellt!

@Shima

Es geht nicht darum die Steuerung dem User zu entnehmen sondern um das Menü von Form2 korrekt anzeigen zu können!!

Baeuerle 14. Nov 2005 10:55

Re: Menü automatisch schließen
 
Gibt es niemand der mir bei diesem Problem helfen kann???

teebee 14. Nov 2005 12:16

Re: Menü automatisch schließen
 
Vielleicht hilft Dir MSDN-Library durchsuchenEndMenu weiter.

Gruß, teebee

Schubi 14. Nov 2005 12:49

Re: Menü automatisch schließen
 
Schon einmal daran gedacht einfach ein ESC an das Form zu senden? Evtl brauchst du zwei davon um auch noch die Markierung des Menüs verschwinden zu lassen

Baeuerle 14. Nov 2005 13:07

Re: Menü automatisch schließen
 
Hallo,

zunächst danke für die Antworten habe ich aber schon alles versucht!!
Ich habe euch mal gepostet was ich schon so gemacht habe OHNE ERFOLG.


Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Timer1.Enabled:=False;
//SendMessage(self.Handle,WM_KEYDOWN,VK_CANCEL,1);
//SendMessage(self.Handle,WM_KEYUP,VK_CANCEL,1);
//SendMessage(self.Handle,WM_KEYDOWN,VK_CANCEL,1);
//SendMessage(self.Handle,WM_KEYUP,VK_CANCEL,1);
SendMessage(self.Handle,WM_CANCELMODE,0,0);
//Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
//Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
Application.ProcessMessages;
form3:=TForm3.create(Application);
with form3 do
 begin
 try
 ShowModal;
 finally
  Free;
  end;
 end;
end;

marabu 14. Nov 2005 14:42

Re: Menü automatisch schließen
 
Hallo Baeuerle,

das Hauptmenü wird vom window manager verwaltet. Wenn der menu owner den Fokus verliert, dann wird normalerweise jedes menu geschlossen. Wenn sich dein Programm anders verhält ist da etwas faul. Ich rate dir die Ursache für das Fehlverhalten in deinem Code zu suchen, anstelle an den Symptomen herum zu kurieren. Ich möchte dir gerne noch von deinem Programmdesign abraten, aber das magst du bestimmt nicht hören.

Freundliche Grüße vom marabu

Angel4585 14. Nov 2005 14:52

Re: Menü automatisch schließen
 
Also ich hab das mal genauso wie Baeuerle gemacht und bei mir passiert das gleiche.

@ Marabu probier das doch mal aus vielleicht klappts bei dir ja.

Mein Code dazu:
Form1:
Delphi-Quellcode:
unit Unit1;

interface

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

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

var
  Form1: TForm1;
implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Timer1Timer(Sender: TObject);
begin
timer1.Enabled:=false;
Form2.showModal;
end;

procedure TForm1.datei1Click(Sender: TObject);
begin
timer1.Enabled:=true;
end;
end.
Form2
Delphi-Quellcode:
unit Unit2;

interface

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

type
  TForm2 = class(TForm)
    MainMenu1: TMainMenu;
    item1: TMenuItem;
    Item2: TMenuItem;
    Item3: TMenuItem;
    procedure item1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.item1Click(Sender: TObject);
begin
showMessage('OK');
end;

end.
Einfach mal alle ausprobieren. Bei wem das funzt meldet sich.
WICHTIG: das MainMenu auf Form1 muss aufklappbar sein. d.h. wenn ich auf ein MenuItem kicke muss ein DropDown Menü erscheinen. Ich lasse es solange geöffnet bis die Form2 erscheint. Dann sollte auf Form2 Die ShowMessage nicht aktiviert werden können.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 Uhr.

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