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
, 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.
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