AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Welcome PlugIn : auf Schließen der Page reagieren
Thema durchsuchen
Ansicht
Themen-Optionen

Welcome PlugIn : auf Schließen der Page reagieren

Ein Thema von Harry Stahl · begonnen am 7. Nov 2023 · letzter Beitrag vom 10. Nov 2023
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#1

Welcome PlugIn : auf Schließen der Page reagieren

  Alt 7. Nov 2023, 23:06
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".

Geändert von Harry Stahl ( 7. Nov 2023 um 23:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 8. Nov 2023, 07:26
Dein Frame implementiert ja erstmal das INTAWelcomePagePlugin.

Sind dort auch die Beiden (oder mindestens das Eine passende, für dich) implementiert?

Delphi-Quellcode:
  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;
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
oder 22.0, falls noch nicht geupgraded.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 8. Nov 2023 um 07:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 8. Nov 2023, 16:22
Herzlichen Dank für Deine Hilfe!

Ich habe mal die Klasse entsprechend ergänzt):

Delphi-Quellcode:
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;
und implementiert:

Delphi-Quellcode:
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;
Allerdings werden diese Prozeduren bei den entsprechenden Ereignissen nicht aufgerufen.
Was mache ich falsch?
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
3.917 Beiträge
 
Delphi 12 Athens
 
#4

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 9. Nov 2023, 16:27
override fehlt?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 9. Nov 2023, 16:34
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 9. Nov 2023 um 16:36 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 9. Nov 2023, 16:34
override fehlt?
Bei welcher Methode?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Rollo62
Online

Registriert seit: 15. Mär 2007
3.917 Beiträge
 
Delphi 12 Athens
 
#7

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 9. Nov 2023, 16:57
War nur ein Gedankenanstoss, ohne in den Code zu sehen.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 9. Nov 2023, 22:40
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:
/// <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;
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).

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.

Geändert von Harry Stahl ( 9. Nov 2023 um 23:21 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 9. Nov 2023, 23:55
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.479 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Welcome PlugIn : auf Schließen der Page reagieren

  Alt 10. Nov 2023, 13:44
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:35 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