Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Name der Madalen Form(s) (https://www.delphipraxis.net/189423-name-der-madalen-form-s.html)

MES 10. Jun 2016 12:45

Name der Madalen Form(s)
 
Mit Application.ModalLevel kann ich rausfinden ob es mehrere modalgeöffneten Forms gibt.
Wie kann ich nun deren Namen (Caption) bekommen?

Konkreter Fall:
User befindet sich in einer Auftragsübersicht. Nun will er die Positionen eines Auftrages bearbeiten( neue modale Form).
Nun ist der User so schlau und klickt in der Taskleiste auf das Fenster "Auftragsübersicht" und verzweigt per Hotkey in den Artikelstamm und von hier in die Lagebewegungen.
In den Lagerbewegungen hat er die Möglichkeit per Doppelklick in einen anderen Auftrag zu verzweigen - das will ich aber verbieten weil das ja Delphi nicht zulässt und es den Anschein macht als ob die Applikation nicht reagieren würde.
Mit Application.ModalLevel ist das auch kein Problem das abzufangen aber schön wäre es wenn ich ihm eine Meldung geben könnte welche modale Form(caption) zuerst abzuarbeiten ist.

Vielen Dank.

Uwe Raabe 10. Jun 2016 13:33

AW: Name der Madalen Form(s)
 
Das aktuell modale Form findest du mit
Delphi-Quellcode:
Screen.FocusedForm
. Die eventuell darunter liegenden modalen Forms sind in
Delphi-Quellcode:
Screen.SaveFocusedList
hinterlegt (First ist das nächste). Da es sich um eine einfache
Delphi-Quellcode:
TList
handelt, musst du noch einen TypeCast auf
Delphi-Quellcode:
TCustomForm
machen um an die relevanten Eigenschaften zu kommen.

MES 10. Jun 2016 17:04

AW: Name der Madalen Form(s)
 
Danke für die schnelle Antwort.
Irgendwie hat es nicht gaz hingehauen weil mir alle Formulare (und nicht nur die Modalen) anzeigte.
Also hab ich einen etwas anderen Weg vorgenommen:

if Application.ModalLevel > 1 then ModalFormCaption(Screen.ActiveForm.Name); //1=das gerade modal geöffnete Formular; >1 Ja, es git mehrere modal geöffnete Forms
...

function ModalFormCaption(FormularName:string): String;
var i: Integer;
for i:=0 to Screen.FormCount-1 do
begin
if (fsModal in screen.forms[i].FormState) and (screen.forms[i].Name<> FormularName) then
begin
Result := screen.forms[i].Caption;
exit;
end;
end;

Gibt es etwas was dagegen spricht?

himitsu 13. Jun 2016 10:35

AW: Name der Madalen Form(s)
 
Screen.ActiveForm ist praktisch immer der erste in Screen.Forms / Screen.CustomForms, da die Formulare immer in der Reihenfolge ihrer Aktivierung in dieser Liste stehen.
(wird eine Form aktiv, dann rutscht sie an Position 0)

Also deine Schleife find die Form, welche am Längsten nicht aktiv war, also die Form, welche zuerst modal angezeigt wurde.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:45 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