Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Mainmenu reagiert nicht
Angel4585 - Do 10.11.05 15:57
Titel: Mainmenu reagiert nicht
Hallo zusammen
Ich hab folgendes Problem:
Ich habe zwei Formulare, auf denen jeweils ein MainMenu ist(also insgesamt 2)
Das zweite Formular wird irgendwann aus einem Thread heraus geöffnet, dass funzt alles wunderbar.
Wenn ich jetzt allerdings in dem MainMenu des Haupformulars aktiv bin und sich währenddessen das zweite Formular öffnet, ist dessen MainMenu "inaktiv", bzw. wenn ich auf die MenuItems klicke passiert nichts, nichtmal das Dropdown in dem MainMenu funzt.
Das gleiche gilt wenn ich die erste Form mit der Maus verschiebe und währenddessen die zweite Form aufgerufen wird, kann ich die zweite nicht per Maus verschieben.
Weis jemand wie ich das beheben kann?
die zweite Form wird über en ButtonClick auf der ersten Form geöffnet.
=> Synchronize(tfMain.Button.Click);
Ich habe bisher versucht :
Das MainMenu zu "Destroyen", freizugeben, mit SendMessage zu schliessen, Habe das gesamte Hauptformular Disabled, habe das Fenster über eine Prozedur in dem Thread aufgerufen anstatt über die Button.Click
aber nichts davon funktioniert
Danke schonmal
questor - Do 10.11.05 21:40
Das klingt so, als bekäme Dein zweites Formular nie den Eingabefokus.
Mir ist irgendwie auch nicht ganz klar, wie das mit Deinen Threads zusammenhängt. Denn es gibt ja nur einen einzigen GUI Thread in einer Applikation.
Kannst Du das mal genauer spezifizieren?
Angel4585 - Fr 11.11.05 09:31
Also ich habe einen Thread:
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:
| TMyThread = class(TThread) private FOpenTime : TDateTime; procedure OpenForm2; protected procedure Execute;override; public constructor Create; end;
constructor TMyThread.Create; begin inherited Create(False); end;
procedure TMyThread.Execute; begin while not Terminated do begin sleep(10); if Now > FOpenTime then Synchronize(OpenForm2); end; end;
procedure TMyThread.OpenForm2; begin with TForm2.Create(Application) do begin try ShowModal; finally Free; end; end; end; |
Ist nur ein Beispiel, kann jeder ausprobieren. Kann aber Fehler enthalten, da ich das nur schnell hingekritzelt habe.
Das Ganze bewirkt eine Erinnerungsfunktion.
Auf Form1 und auf Form2 sind jeweils MainMenus.
Wenn ich jetzt eben im MainMenu von Form1 aktiv bin und währenddessen durch den Thread meine Form2 aufgerufen wird, dann ist das MainMenu auf Form 2 inaktiv.
Allerdings hängt das nicht mit dem Thread zusammen!
Wenn ich auf Form1 einen Timer habe:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TForm1.TimerTimer(Sender : TObject); begin if Now > FOpenTime then with TForm2.Create(Application) do begin try ShowModal; finally Free; end; end; end; |
Hier passiert genau das gleiche.
Ausserdem passiert sowas ähnliches:
Wenn ich Form1 verschiebe (Titelleiste mit Maus) und währenddessen die Form2 aufgerufen wird, dann kann ich Form zwei nicht über die TielLeiste verschieben.
Rolf_Geisler - Sa 12.11.05 20:08
Ich verstehe Deine ganze Konstruktion nicht. Create ist eigentlich ein Konstruktor, mir ist völlig unklar, wie man ihn als Argument in einer With-Anweisung verwenden kann.
Falls Du Dein Form2 schon zur Entwurfszeit im Projekt angemeldet hast, sorgt Delphi schon von allein dafür, dass Create aufgerufen wird. Der Aufruf von ShowModal an der richtigen Stelle sollte ausreichen. Dann ist wahrscheinlich auch das MainMenu des Formulars ansprechbar.
Rolf
Angel4585 - Mo 14.11.05 15:41
@ Rolf
Du beziehst dich auf das hier:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| with TForm2.Create(Application) do begin try ShowModal; finally Free; end; end; |
Damit erzeuge ich das Formular zur Laufzeit und gebe es wieder frei wenn es geschlossen wurde.
D.h. die Variable Form2 existiert bei mir nicht. nur der Typ TForm2. Aber das spielt keine Rolle. Es funktioniert in beiden Fällen nicht.
Angel4585 - Di 15.11.05 14:28
und immernoch niemand dem ne sinnvolle Lösung einfällt. Hab das jetzt schon in drei Foren gepostet aber bislang noch ohne Erfolg. Ich warte noch das da so ein Freak vorbeikommt und mir die Lösung hinknallt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 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!