Die AdvMemo – Komponenten von TMS Components sind äußerst leistungsfähig, mit weitaus mehr Funktionen ausgestattet als die Standard – Memo – Komponenten. Was Ihnen aber dennoch fehlt sind Events, die ausgelöst werden vor und nach dem Einfügen von Text aus der Zwischenablage. Dies kann aber ganz nützlich sein, besonders, wenn man wissen möchte, ob sich am Text etwas geändert hat, beispielsweise, wenn man einen Speicher-Button entsprechend aktivieren möchte. Glücklicherweise ist das Nachrüsten aber ganz einfach.
Neue abgeleitete Memo – Komponente
Folgende Unit erstellt einen Nachfolger von TdbAdvMemo und erweitert diese um die zwei Events OnVorEinfuegen und OnNachEinfuegen. Sie können auch andere Namen verwenden. Ich verwende aber gerne deutsche Namen, da man dann fast sicher ausschließen kann mit irgendwas in Konflikt zu geraten.
Das Beispiel verwendet TdbAdvMemo, wenn Sie das db weglassen, können Sie auch eine Erweiterung für die Nicht – DB – Komponente vornehmen. Und das Ganze geht natürlich auch mit der Standardmemo – Komponente von Delphi, dann leiten Sie eben von TMemo ab.
Legen Sie sich einfach ein neues Delphi – Package und fügen Sie dann eine neue Unit hinzu mit folgenden Code:
unit advdbmemoex;
interface
uses
 ClipBrd, Windows, Messages, SysUtils, Classes, Controls, StdCtrls,advmemo,dbadvmemo;
type
 TStringEvent = procedure(Sender: TObject; var s: String) of object;
 TdbAdvMemoEx = class(TdbAdvMemo)
 private
 FOnVorEinfuegen: TStringEvent;
 FOnNachEinfuegen: TNotifyEvent;
 procedure WMPaste(var Message: TMessage); message WM_PASTE;
 protected
 public
 published
 property OnVorEinfuegen: TStringEvent read FOnVorEinfuegen write FOnVorEinfuegen;
 property OnNachEinfuegen: TNotifyEvent read FOnNachEinfuegen write FOnNachEinfuegen;
 end;
procedure Register;
implementation
procedure Register;
begin
 RegisterComponents(‚MyComponents‘, [TdbAdvMemoEx]);
end;
procedure TdbAdvMemoEx.WMPaste(var Message: TMessage);
var
 strClipText: String;
begin
 // Prüfen, ob OnVorEinfuegen Event ist zugeordnet und ob die
 //Zwischenablage Standardtext enthält
 if Assigned(FOnVorEinfuegen) and Clipboard.HasFormat(CF_TEXT) then
 begin
 // Text aus Zwischenablage in Variable speichern
 strClipText := ClipBoard.AsText;
 // VorEinfuegen Event auslöseb
 FOnVorEinfuegen(self, strClpText);
 // Zwischenablage leeren und diese mit dem neuen Text ersetzen
 Clipboard.Clear;
 Clipboard.AsText := strClpText;
 end;
Anschließend speichern, kompilieren und installieren, ab sofort finden Sie dann in Ihrer Delphi Palette neue erweiterte Memo – Komponente.
Ganz nach diesen Prinzip ist es natürlich auch möglich noch weitere Eigenschaften hinzuzufügen – Viel Spaß beim Programmieren.





		
				
		







