![]() |
Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierbar
Hallo zusammen,
wenn ich ein modales Fenster im Programm anzeige und das Programm wird minimiert oder von einem anderen Programm überdeckt, dann kann ich es durch Anklicken in der Taskleiste nicht mehr anzeigen. Beim Klicken passiert einfach überhaupt nichts. Verwende Delphi XE2, das Projekt wurde von Delphi 2(!) übernommen. Hat mir bitte jemand eine Idee? Folgenden Lösungsvorschlag aus dem Internet habe ich bereits ausprobiert, dann muss man allerdings bis zu 3 Mal in der Taskleiste klicken, bis das Fenster wieder da ist:
Delphi-Quellcode:
Vielen Dank
const
WM_REENABLE = WM_USER + $100; procedure WMEnable(var Message: TWMEnable); Message WM_ENABLE; procedure WMReenable(var Message: TMessage); Message WM_REENABLE; procedure TForm1.WMEnable(var Message: TWMEnable); begin if not Message.Enabled then PostMessage(Self.Handle, WM_REENABLE, 1, 0); end; procedure TForm1.WMReenable(var Message: TMessage); begin EnableWindow(Self.Handle, True); end; Peter |
AW: Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierba
Hallo zusammen,
habe noch ein bisschen experimentiert: Das Problem tritt auch bei einem komplett neuen Projekt mit nur zwei Formularen auf, von denen eins mit ShowModal angezeigt wird, nicht jedoch, wenn ich z. B. die Druckereinrichtung über TPrinterSetupDialog oder einen TOpenDialog öffne. Bei diesen reicht einmaliges Klicken in der Taskleiste. Was machen denn die Systemdialoge anders? Vielen Dank Peter |
AW: Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierba
Hallo zusammen,
hab inzwischen herausgefunden, wie es funktioniert. Falls es mal jemand brauchen sollte, hier die Lösung: Form1 ist das Hauptformular, Form2 das modale Formular. Man nehme eine TApplicationEvents-Komponente und den nachfolgenden Kode unter ApplicationEvents1Activate.
Delphi-Quellcode:
Viele Grüße
unit Unit1;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Dialogs, Vcl.Forms, Vcl.StdCtrls, Vcl.AppEvnts; type TForm1 = class(TForm) Button1: TButton; OpenDialog1: TOpenDialog; ApplicationEvents1: TApplicationEvents; procedure Button1Click(Sender: TObject); procedure ApplicationEvents1Activate(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Form2: TForm; implementation {$R *.dfm} uses PassWord; procedure TForm1.ApplicationEvents1Activate(Sender: TObject); begin if (Form2 <> Nil) and (fsModal in Form2.FormState) and Form2.Showing then Form2.BringToFront; end; procedure TForm1.Button1Click(Sender: TObject); begin Form2 := TPasswordDlg.Create(Self); Form2.Parent := Self; if Form2.ShowModal = mrOK then begin // mache was... end; end; end. Peter |
AW: Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierba
Delphi-Quellcode:
ist hier der eigentliche Auslöser, aber da du ja den Code erst jetzt hier zeigst, konnte dir auch niemand helfen.
Form2.Parent := Self;
Anyway, du hast ja eine Lösung, obwohl du dies mit dem Parent setzen nochmals überdenken solltest. BTW: Bei den System-Dialogen wird der Parent nicht gesetzt |
AW: Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierba
Aber modale Fenster benötigen ein Fensterhandle, damit Windows weiß zu welchem Fenster das modale Fenster modal ein soll. Also wird doch so etwas wie ein Parent gesetzt. Dem zu folge müsste es nicht heißen:
Delphi-Quellcode:
?
Form2.Parent := Form1;
|
AW: Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierba
Wenn das Projekt von Delphi 2 übernommen wurde, fehlt da schlicht
Delphi-Quellcode:
im Projektquelltext. Das wird bei neuen Projekten standardmäßig aktiviert. Vergleiche einfach einmal den Projektquelltext in der .dpr (Strg + V auf das Projekt in der Projektverwaltung) mit dem eines neuen Projekts.
Application.MainFormOnTaskbar := True;
Dann funktioniert es eigentlich ohne Verrenkungen. |
AW: Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierba
Zitat:
Delphi-Quellcode:
,...) ist es eh Schnurz.
Application.ProcessMessages
Und nein, bitte nicht
Delphi-Quellcode:
mit der globalen Form-Variablen
Form2.Parent := Form1;
Delphi-Quellcode:
innerhalb der Klassen-Methoden von
Form1
Delphi-Quellcode:
arbeiten.
TForm1
|
AW: Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierba
Ups. Self wäre natürlich richtig gewesen.
|
AW: Modales Fenster nach Minimieren in Taskleiste nicht mehr durch Klicken aktivierba
Zitat:
Danke an Sir Rufo für den Tipp, dass ich den Parent einfach nicht setzen soll, dann funktioniert es auch ganz ohne Tricks mit Vista, 7 usw. :-D Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 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