Events für Vor – und Nach Einfügen aus der Zwischenablage für TAdvMemo nachrüsten

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.

Werbung
Werbung

Verwandte Themen:


Sorry! Unser Kommentarfunktion ist vorübergehend geschlossen.