Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TMDIApp - Geisteranwendung? (https://www.delphipraxis.net/46583-tmdiapp-geisteranwendung.html)

snapman 27. Mai 2005 19:46


TMDIApp - Geisteranwendung?
 
Hallo,
also ich bin total verwirrt.
Wenn ich in Delphi 2005 (oder auch in Delphi 6) diese Demo TMDIApp erstellen lasse, dann kommt da ja so ein kleiner halbfertiger MDI Texteditor.
Das verrückte ist aber das obwohl bei im Dateimenü z.B. bei "Close" oder im gesamten "Windows" Menü KEIN code hinterlegt ist, funktionieren diese Menüeinträge.

Wie kann das sein?

JasonDX 27. Mai 2005 20:05

Re: TMDIApp - Geisteranwendung?
 
Das müsste mit der TActionList erledigt werden.
Schau mal bei der Eigenschaft Action, da ist was eingetragen.
Wenn du die Actions anschaust, wirst du bemerken, dass es eine Action namens FileExit1 gibt, bei der im OnExecute-Ereignis was eingetragen ist -> close;
Damit wird das fenster geschlossen
genauso bei den anderen Menüpunkten, bei den kein OnClick abgefragt wird.

snapman 27. Mai 2005 20:18

Re: TMDIApp - Geisteranwendung?
 
Zitat:

Zitat von Chimaira
Wenn du die Actions anschaust, wirst du bemerken, dass es eine Action namens FileExit1 gibt, bei der im OnExecute-Ereignis was eingetragen ist -> close;

FileExit bezieht sich aber auf das ganze Programm was dann beendet wird, wenn ich das close ausklammere wird das einzelne MDI fenster trotzdem beendet....und FileClose (der Menüeintrag für MDI fenster beenden) hat weder in der ActionList nen Bezug noch im OnClick.. also doch geistertechnik?

JasonDX 27. Mai 2005 20:33

Re: TMDIApp - Geisteranwendung?
 
Im Menü der Application gibts im File-Untermenü ein ExitFileItem-Menüeintrag. Dort ist ein Eintrag Action, der Rot gekennzeichnet ist. Dort ist auch was eingetragen: FileExit1
FileExit1 ist eine Action, die der ActionList1 angehört. FileExit1 hat im OnExecute-Event das close stehen. Wenn ich das ausklammere, die Application nochmal kompiliere und ausführe, gehts nicht mehr zu.
Wenn nun auf das Item geklickt wird, wird die Action ausgeführt, also auch das OnExecute-Ereignis aufgerufen, und somit das close ausgeführt.
Also nix mit Geistertechnik, sondern reine VCL-Spielereien ;)

snapman 27. Mai 2005 20:37

Re: TMDIApp - Geisteranwendung?
 
ist ja alles richtig, ich beziehe mich aber nicht auf FileExit, sondern auf FileClose ... und das hat im OnExecute-Event GARNICHTS stehn und funktioniert trotzdem!?!?!

JasonDX 27. Mai 2005 20:53

Re: TMDIApp - Geisteranwendung?
 
Oh, ok
Bis bei auf den wenigsten Actions ist ein OnExecute implementiert. Das kommt daher, weil es nicht Standard-Actions sind, sonder 'spezifische'. Wenn du in der ActionList schaust, kannst du normale und vorgefertigte Actions einfügen. Diese führen dann den Code z.B. zum schließen des Fensters, anordnen der Children ect. ohne das OnExecute aus. Das müsste der ganze 'Trick' sein. Compiler-Magics sind da ziemlich sicher nicht dahinter.

Robert_G 27. Mai 2005 21:02

Re: TMDIApp - Geisteranwendung?
 
Sowas nennt man auch OOP. :mrgreen:
Oft verwendeten Code in Klassen zu verpacken, damit man sich nicht immer und überall einen Wolf tippt...

snapman 27. Mai 2005 21:09

Re: TMDIApp - Geisteranwendung?
 
Zitat:

Zitat von Robert_G
Sowas nennt man auch OOP. :mrgreen:
Oft verwendeten Code in Klassen zu verpacken, damit man sich nicht immer und überall einen Wolf tippt...

weisst du zufällig, woher dann delphi bei den standard actions "weiss" auf welches fenster es sich z.b. beziehen muss wenn man ne standard-find action oder close action plaziert? und woher weiss delphi ob MDI oder SDI etc??

JasonDX 27. Mai 2005 21:15

Re: TMDIApp - Geisteranwendung?
 
Ob MDI oder SDI erkennt man anhand des FormStyles (fsMDIChild, fsMDIForm ect.)
Welches MDI-Form erkennt es dann durch das Parent (was wahrscheinlich fsMDIForm sein muss) und die Eigenschaft ActiveMDIChild.
Falls du mehr als eine Personal Edition deiner Delphi-Version hast, kannst du im fall per Strg+Click durch den Quellcode "surfen" ;)

Robert_G 27. Mai 2005 21:56

Re: TMDIApp - Geisteranwendung?
 
Zitat:

Zitat von snapman
Zitat:

Zitat von Robert_G
Sowas nennt man auch OOP. :mrgreen:
Oft verwendeten Code in Klassen zu verpacken, damit man sich nicht immer und überall einen Wolf tippt...

weisst du zufällig, woher dann delphi bei den standard actions "weiss" auf welches fenster es sich z.b. beziehen muss wenn man ne standard-find action oder close action plaziert? und woher weiss delphi ob MDI oder SDI etc??

Wenn du eine >=Professional von Delphi hast, dürfte ein Strg+Linksklick auf den Bezeichner wahre Wunder bewirken. ;)
Das hätte übrigens die Frage unnötig gemacht, da Source code mehr sagt als 1.000 Worte. :zwinker:
Ich habe hier gerade kein Delphi installiert, aber ich denke mal einfach, dass sie die Standard Methoden/Properties der VCL verwenden.
Also Application.MainForm.ActiveMdiChild, Application.MainForm.Cascade,...


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