![]() |
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 |
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;
|
Re: Menü automatisch schließen
Hi,
Zitat:
Die Frage ist, ob du das auch willst?! :wink: MfG Marc P.S.: Etwas Code wäre auch nicht schlecht. :zwinker: |
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:
@Chegga ich will das Menü nicht freigeben sondern schließen !!! |
Re: Menü automatisch schließen
**PUSH**
|
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.
|
Re: Menü automatisch schließen
Hehe :mrgreen: gibs ihm Luckie :lol:
:angel: |
Re: Menü automatisch schließen
Ich würde einfach einen Mausklick auf das Menü emulieren !
Delphi-Quellcode:
Chris
procedure TForm1.Timer1Timer(Sender: TObject);
begin Mouse_Event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); end; |
Re: Menü automatisch schließen
wobei man allerdings auch irgendwoher die Menükoordinaten braucht...
|
Re: Menü automatisch schließen
Kennt niemand eine geeignete PostMessage od. SendMessage?
|
Re: Menü automatisch schließen
Die Menükoordinaten 0,0 sind schon in Ordnung, dann schliesst sich das Menü !
|
Re: Menü automatisch schließen
Oder nimm das !
Delphi-Quellcode:
SendMessage(Handle, WM_LBUTTONCLK, 0, 0)
|
Re: Menü automatisch schließen
@Luckie
ok, sorry :oops: wird nicht wieder vorkommen @all leider funktioniert das mit dem Klick nur bedingt!
Delphi-Quellcode:
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!
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; |
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: |
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!! |
Re: Menü automatisch schließen
Gibt es niemand der mir bei diesem Problem helfen kann???
|
Re: Menü automatisch schließen
|
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
|
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; |
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 |
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:
Form2
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.
Delphi-Quellcode:
Einfach mal alle ausprobieren. Bei wem das funzt meldet sich.
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. 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