AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Name der Madalen Form(s)

Ein Thema von MES · begonnen am 10. Jun 2016 · letzter Beitrag vom 13. Jun 2016
Antwort Antwort
MES

Registriert seit: 23. Dez 2008
Ort: PLZ 73
39 Beiträge
 
#1

Name der Madalen Form(s)

  Alt 10. Jun 2016, 12:45
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.
LG

MES
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.993 Beiträge
 
Delphi 12 Athens
 
#2

AW: Name der Madalen Form(s)

  Alt 10. Jun 2016, 13:33
Das aktuell modale Form findest du mit Screen.FocusedForm . Die eventuell darunter liegenden modalen Forms sind in Screen.SaveFocusedList hinterlegt (First ist das nächste). Da es sich um eine einfache TList handelt, musst du noch einen TypeCast auf TCustomForm machen um an die relevanten Eigenschaften zu kommen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
MES

Registriert seit: 23. Dez 2008
Ort: PLZ 73
39 Beiträge
 
#3

AW: Name der Madalen Form(s)

  Alt 10. Jun 2016, 17:04
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?
LG

MES
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.114 Beiträge
 
Delphi 12 Athens
 
#4

AW: Name der Madalen Form(s)

  Alt 13. Jun 2016, 10:35
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (13. Jun 2016 um 10:55 Uhr)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:00 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