![]() |
Welcome PlugIn : auf Schließen der Page reagieren
In Delphi 11.3: Bislang kann ich leider mein PlugIn für die Welcome Page nur benutzten, wenn die Option "Willkommensbildschirm beim Öffnen eines neuen Projekts schließen" deaktiviert ist. Denn ist diese aktiviert, wird das PlugIn unsichtbar geschaltet und wenn die Willkommensseite speiter wieder angezeigt werden soll, dann steht nur noch die Überschrift da.
Mein PlugIn basiert auf dem Frame-Beispiel-Demo, das für die Welcome-Page mitgeliefert wird. Wie, wo und wann und reagiere ich auf das Ereignis, dass die Welcome-Page erneut angezeigt werden soll um dann mein Frame wieder sichtbar zu schalten. Ich kann (aus einem mir nicht nachvollziehbaren Grunde) das Projekt nur im Release mode compilieren wenn ich es im Debug-Mode compiliere kommt die Meldung "[dcc32 Fataler Fehler] WPPMView.pas(54): E2225 'Never-build' Package 'vclwinx' muss neu compiliert werden". |
AW: Welcome PlugIn : auf Schließen der Page reagieren
Dein Frame implementiert ja erstmal das INTAWelcomePagePlugin.
Sind dort auch die Beiden (oder mindestens das Eine passende, für dich) implementiert?
Delphi-Quellcode:
Was es sonst noch so gibt, siehst du ja in der c:\program files (x86)\embarcadero\studio\23.0\source\ToolsAPI\Tool sAPI.WelcomePage.pas
INTAWelcomePageNotifier280 = interface(IUnknown)
['{CD8AA3EB-AB59-47C2-9264-A6147369B9A6}'] /// <summary> /// Event before Welcome Page is about to free /// </summary> procedure BeforeWelcomePageDestroy; /// <summary> /// Event before Plugin is about to close /// </summary> procedure BeforePluginClose(const PluginID: string); /// <summary> /// Event before Plugin is about to free /// </summary> procedure BeforePluginDestroy(const PluginID: string); end; /// <summary> /// Interface for notify Welcome Page Plugin about showing, closing or resizing /// </summary> INTAWelcomePagePluginNotifier280 = interface(IUnknown) ['{B157D07D-3332-41E6-85A9-5E01210F3856}'] /// <summary> /// Event to display main Plugin View (the equivalent of OnShow) /// </summary> procedure ViewShow(Sender: TWinControl); /// <summary> /// Event to hide/close the main Plugin View /// </summary> procedure ViewHide; ... end; oder 22.0, falls noch nicht geupgraded. |
AW: Welcome PlugIn : auf Schließen der Page reagieren
Herzlichen Dank für Deine Hilfe!
Ich habe mal die Klasse entsprechend ergänzt):
Delphi-Quellcode:
und implementiert:
ype
TWPDemoPlugInCreator = class(TInterfacedObject, INTAWelcomePagePlugin, INTAWelcomePageContentPluginCreator, INTAWelcomePagePluginNotifier280) private FWPPluginView: TFrame; FIconIndex: Integer; { INTAWelcomePageContentPluginCreator } function GetView: TFrame; function GetIconIndex: Integer; procedure SetIconIndex(const Value: Integer); public constructor Create; destructor Destroy; override; class procedure PlugInStartup; class procedure PlugInFinish; { INTAWelcomePagePlugin } function GetPluginID: string; function GetPluginName: string; function GetPluginVisible: boolean; { INTAWelcomePageContentPluginCreator } function CreateView: TFrame; procedure DestroyView; function GetIcon: TGraphicArray; procedure ViewShow(Sender: TWinControl); /// <summary> /// Event to hide/close the main Plugin View /// </summary> procedure ViewHide; procedure ViewResize(AColumnSpan, ARowSpan: Integer); end;
Delphi-Quellcode:
Allerdings werden diese Prozeduren bei den entsprechenden Ereignissen nicht aufgerufen.
procedure TWPDemoPlugInCreator.ViewHide;
begin FWPPluginView.Visible := false; ShowMessage ('hide'); end; procedure TWPDemoPlugInCreator.ViewResize(AColumnSpan, ARowSpan: Integer); begin // end; procedure TWPDemoPlugInCreator.ViewShow(Sender: TWinControl); begin FWPPluginView.Visible := True; ShowMessage ('Show'); end; Was mache ich falsch? |
AW: Welcome PlugIn : auf Schließen der Page reagieren
override fehlt?
|
AW: Welcome PlugIn : auf Schließen der Page reagieren
Das sind Interface-Methoden und da das Interface im Class drin steht, stehen sie somit als Letzte in der InterfaceMethodenTabelle. (egal ob in Vorfahren schonmal was dort eingetragen war)
Der verwendete INTAWelcomePagePluginNotifier280 sollte zusammen mit dem INTAWelcomePagePlugin korrekt sein. Beim INTAWelcomePageNotifier280 könnte es sein, dass man ihn nochmal wo anders registrieren muß, aber da er nicht von sowas, wie IOTANotifier abgeleitet ist, würde ich das eher nicht vermuten. |
AW: Welcome PlugIn : auf Schließen der Page reagieren
Zitat:
|
AW: Welcome PlugIn : auf Schließen der Page reagieren
War nur ein Gedankenanstoss, ohne in den Code zu sehen.
|
AW: Welcome PlugIn : auf Schließen der Page reagieren
Keine Ahnung, warum das nicht funktioniert.
Während die Interfaces welcomeplugin und Creator eine direkte Interface-Implementation haben, wird der notifier nochmal abgeleitet:
Delphi-Quellcode:
Eigentlich sollte es so sein, dass man beide Interfaces in die Class-Definition aufnehmen kann, funktioniert aber beides nicht (also die Aufnahme funktioniert, nur werden die implementierten Prozeduren nicht aufgerufen).
/// <summary>
/// Interface for notify Welcome Page Plugin about showing, closing or resizing /// </summary> INTAWelcomePagePluginNotifier280 = interface(IUnknown) ['{B157D07D-3332-41E6-85A9-5E01210F3856}'] /// <summary> /// Event to display main Plugin View (the equivalent of OnShow) /// </summary> procedure ViewShow(Sender: TWinControl); /// <summary> /// Event to hide/close the main Plugin View /// </summary> procedure ViewHide; /// <summary> /// Event when the main Plugin View size change /// </summary> procedure ViewResize(AColumnSpan, ARowSpan: Integer); end; INTAWelcomePagePluginNotifier = interface(INTAWelcomePagePluginNotifier280) ['{38B3EA34-D832-48D0-AF84-7449EB28D221}'] end; Edit: Ich vermute mal: - INTAWelcomePageContentPluginCreator ist als interface von (INTAWelcomePagePlugin) definiert. Registriert wird aber nur WelcomePagePluginService.RegisterPluginCreator(TWP DemoPlugInCreator.Create); Wobei TWPDemoPlugInCreator als INTAWelcomePagePlugin definiert ist. Wenn ich jetzt in die Creator-Klasse eine weitere Ableitung aufnehme (das Notifier-Interface, das von IUnknown abgleitet ist), dann wird das vom Service wohl nicht berücksichtigt. |
AW: Welcome PlugIn : auf Schließen der Page reagieren
Ich kann auch keinen Mechanismus entdecken, mit dem man einen der Notifier registrieren kann. Am besten fragst du direkt David Millington wie das gedacht ist.
|
AW: Welcome PlugIn : auf Schließen der Page reagieren
Danke Dir Uwe, dass Du Dir das auch angesehen hast.
Ich habe eine entsprechende Frage am bekannten Ort gestellt. Zwischenzeitlich habe ich einen "billigen" Workaround gefunden, indem ich noch zusätzlich einen Schalter ("Show PlugIn") in den Frame einbaue, der (wieder) sichtbar wird, wenn das Plugin wieder gezeigt werden soll. Dann kann man manuell die Anzeige wieder herstellen. Ist zwar doof, aber besser als gar nichts. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 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