Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi OleContainer (jetzt auch mit OnChange) (https://www.delphipraxis.net/133221-olecontainer-jetzt-auch-mit-onchange.html)

doctor-x 28. Apr 2009 02:15


OleContainer (jetzt auch mit OnChange)
 
Hallo an alle!!!

Ich habe mir mal einwenig den kopf zerbrochen und möchte meine erfolge mit euch teilen.
Für verbesserungsvorschläge und Fehler-feedback währe ich dankbar. (Lob natürlich auch :wink: , wenn verdient^^)

Der standart OleContainer bezitzt kein OnChange ereigniss, und das property Modified überprüft leider keine veränderungen,
sondern setzt sich auch beim laden des OleContainers auf True, ebenso wenn man in den Edit modus des OleContainers wechselt
und nichts verändert. Desshalb habe ich ein OnChange ereignis eingebettet, das wirklich nur bei änderungen durchlaufen wird.

Hier die anleitung um sich den OleContainer selbst umzubauen:

Schritt 1: Eine Kopie der Unit OleCtnrs anlegen und mit einem sinnvollen Namen versehen(z.B. WHOleCtnrs)!

Schritt 2: Öffnen der Kopierten Unit (z.B. WHOleCtnrs) und den Unit-Namen in den Dateinamen ändern.

Schritt 3: Alle "TOleContainer." in einen gewünschten Komponenten-Namen ändern (z.B. TWHOleContainer).

Schritt 4: Im interface teil die Register procedure definieren.
Delphi-Quellcode:
procedure Register;
Und die procedure im implementation teil anlegen.
Delphi-Quellcode:
procedure Register;
begin
  RegisterComponents('System', [TWHOleContainer]); //Hier natürlich dan den tatsächlichen typen namen verwenden und nicht den aus dem Beispiel
end;
Schritt 5: Alles folgene bezieht sich jetzt nur auf die neue Klasse des OleContainers (in diesem Beispiel auf den Typ TWHOleContainer).

5.1: Unter privat folgendes hinzufügen:
Delphi-Quellcode:
private
  FOnChange: TNotifyEvent; //Geändert (Neu)
5.2: Unter protected folgendes hinzufügen:
Delphi-Quellcode:
protected
  procedure Change; virtual;//Geändert (Neu)
5.3: Unter published folgendes hinzufügen:
Delphi-Quellcode:
published
  property OnChange: TNotifyEvent read FOnChange write FOnChange; //Geändert (Neu)
5.4: In der SaveObject function, als letztes die soeben definierte Change procedure aufrufen:
Delphi-Quellcode:
function TWHOleContainer.SaveObject: HResult;
var
  PersistStorage: IPersistStorage;
begin
  .
  .
  Change; //Geändert (Neu)
end;
5.5: Jetzt noch die Change procedure im implementation bereich erstellen:
Delphi-Quellcode:
procedure TWHOleContainer.Change; //Geändert (Neu)
begin
  if Assigned(FOnChange) then FOnChange(Self); //OnChange ereigniss starten
end;
Schritt 6: Alles speichern und unter Komponente --> Komponente installieren... die soeben erstellte unit mit der neuen komponente installieren.

Schritt 7: Sich freuen das man es (hoffentlich) geschaft hat :-D


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