AW: Ist Parentform von Frame ein Modales Form?
Eine weitere Möglichkeit wäre dem Frame im Create csActionClient im ControlStyle hinzuzufügen und Frame.InitiateAction zu überschreiben und hier die Prüfung zu machen und danach csActionClient zu entfernen.
|
AW: Ist Parentform von Frame ein Modales Form?
Vielleicht habe ich meine Frage etwas zu kompliziert gestellt. Ich versuche es noch mal.
Bisher ist es so (Alles vereinfacht dargestellt):
Delphi-Quellcode:
Ich möchte
// Beispiel für EINE Form
procedure TMyForm.FormCreate(Sender: TObject); begin myFrame := TMyFrame.create(PanelXYZ); myFrame.parent := PanelXYZ; // Der Frame-Button darf nicht verfügbar sein, wenn das Form ein Dialog ist // Folgender Code kommt also hinzu, wenn das Form ein Dialog ist. // Folgender Code ist "nicht" bei "normalen" Forms vorhanden myFrame.BoeserDialogButton.visible := False; end;
Delphi-Quellcode:
einfach in das Frame verlagern, damit ich beim nächsten Form, in dem ich das Frame verwende, nicht mehr daran denken muss. Einmal geschrieben. Fertig.
myFrame.BoeserDialogButton.visible := False;
Wenn ich anderen Code im Form einfügen muss um diese Zeile zu sparen, bringt mir das nichts. Dann lasse ich es so wie es ist. |
AW: Ist Parentform von Frame ein Modales Form?
Meine beiden letzen Anworten haben das doch berücksichtigt, wobei beim 2. Vorschlag beim Form nicht mal einen Event umgeleitet werden müsste.
|
AW: Ist Parentform von Frame ein Modales Form?
Beim FormCreate kann man aber noch gar nicht wissen, ob das Form später mit Show oder ShowModal aufgerufen wird. Insbesondere ist es durchaus möglich, ein und dieselbe Form-Instanz z.B. einmal mit ShowModal und einmal mit Show aufzurufen (und noch mehrmals und auch umgekehrt). Wohlgemerkt, dieselbe Instanz! Folglich kann das im FormCreate gar nicht ausgewertet werden, weil es erst später durch deinen Code bestimmt wird. Du kannst allenfalls im FormShow darauf reagieren.
Insofern geht die Anwort in #4 schon in die richtige Richtung. |
AW: Ist Parentform von Frame ein Modales Form?
Zitat:
Bei #4 hatte es nicht sofort bei mir klick gemacht. Ich werde damit mal etwas ausprobieren. Danke euch allen für die Hinweise. |
AW: Ist Parentform von Frame ein Modales Form?
Du kannst in dem Frame die Messages CM_PARENTVISIBLECHANGED oder CM_SHOWINGCHANGED abfangen und dort das fsModal abfragen:
Delphi-Quellcode:
TMyFrame = class(TFrame)
private procedure CMPARENTVISIBLECHANGED(var Message: TMessage); message CM_PARENTVISIBLECHANGED; // oder procedure CMShowingChanged(var Message: TMessage); message CM_SHOWINGCHANGED; // ... procedure TMyFrame.CMPARENTVISIBLECHANGED(var Message: TMessage); var isModal: Boolean; begin inherited; isModal := (fsModal in GetParentForm(Self).FormState); // funktioniert auch wenn der Frame nicht direkt im Form sitzt sondern z.B. auf einem TPanel oder TPageControl // ... end; |
AW: Ist Parentform von Frame ein Modales Form?
Zitat:
Und "GetParentForm" kannte ich auch noch nicht. Hatte mir zwar eine Funktion geschrieben, die sich bis zum Parentform hochhangelt, aber so ist es viel eleganter. Danke dir. |
AW: Ist Parentform von Frame ein Modales Form?
Vorallem bei eingebetteten Forms (MDI und Co.) solltst du dir aber den weiteren optionalen Parameter genauer ansehn und vielleicht ändern. :wink:
|
AW: Ist Parentform von Frame ein Modales Form?
Zitat:
|
AW: Ist Parentform von Frame ein Modales Form?
Delphi-Quellcode:
Bei MDI-Forms sind ja die MDIChilds im MDIForm eingebettet. Mit TopForm = True bekommst du dann das MDIForm, bei False das entsprechende MDIChild.
function GetParentForm(Control: TControl; TopForm: Boolean = True): TCustomForm;
... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:08 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