Modulare Programmierung: Suchleiste für RTFEdit-Objekte

Im kürzlich veranstalteten Workshop mit dem Thema „Effiziente Programmierung“ haben wir unter anderem das Konzept der Modularen Programmierung präsentiert. Anhand eines Beispiels zur Ergänzung von RTFEdit-Objekten um eine Suchleiste haben wir die Anwendung in CONZEPT 16 erläutert.

Dieses Beispiel möchte ich im Folgenden noch einmal aufgreifen und vorstellen. Am Ende des Artikels steht das Modul in einer überarbeiteten Version zum Download bereit.

Das Modul dient der einfachen Erweiterung von RTFEdit-Objekten um eine einheitliche Oberfläche zum Suchen und Ersetzen von Textpassagen.

Das RTFEdit-Objekt kann beispielsweise zur Ein- und Ausgabe von formatierten Beschreibungstexten oder als Quelltexteditor verwendet werden. Gerade für derartige Anwendungsfälle ist eine solche Oberflächenfunktion unverzichtbar.

Die Suchleiste kann in drei verschiedenen Modi genutzt werden:

  • Suchen von Textpassagen
  • Suchen und Ersetzen von Textpassagen
  • Positionieren auf Zeilen
Die Suchleiste in den Modi „Suchen“, „Ersetzen“ und „Gehe zu Zeile“

Verwendung

Zur Anbindung der Suchleiste müssen innerhalb des Fensters, in dem sich das RTFEdit-Objekt befindet, weitere Objekte angelegt werden: Die Suchleiste besteht aus einem GroupTile-Objekt, in dem alle Unterobjekte der Suchleiste, wie Schaltflächen und Eingabefelder, enthalten sind:

Oberflächenobjekte der Suchleiste

Um die Suchleiste zu verwenden, muss lediglich eine Instanz des Moduls erzeugt werden, typischerweise beim Initialisieren des Fensters.

Zur Erzeugung einer Instanz wird die Funktion Init() – der Konstuktor des Moduls – aufgerufen. Dabei müssen neben dem Deskriptor auf das RTFEdit-Objekt weitere Deskriptoren für die Objekte der Suchleiste übergeben werden. Der Rückgabewert der Funktion – der Instanz-Deskriptor – muss zur späteren Zerstörung der Instanz gespeichert werden:

tVarMdlWinRTFEdit # MdlWinRTFEdit:Init(
  $:rtRTFEdit, // RTFEdit-Objekt
  $:gtRTFCtrl, // GroupTile-Objekt als Suchleiste
  $:bnRTFCtrlExit, // Button-Objekt zum Schließen der Suchleiste
  $:edRTFCtrlText, // Edit-Objekt zur Eingabe des Suchwertes
  $:bnRTFCtrlTextNext, // Button-Objekt zum Suchen des näch. Vorkommens
  $:bnRTFCtrlTextPrev, // Button-Objekt zum Suchen des vorh. Vorkommens
  $:cbRTFCtrlTextCase, // CheckBox-Objekt für "Groß-/Kleinschreibung"
  $:cbRTFCtrlTextWord, // CheckBox-Objekt für "Ganzes Wort"
  $:lbRTFCtrlTextReplace, // Label-Objekt für Ersetzungswert
  $:edRTFCtrlTextReplace, // Edit-Objekt zur Eingabe des Ersetzungswert
  $:bnRTFCtrlTextReplaceOne, // Button-Objekt zum Ersetzen eines Vork.
  $:bnRTFCtrlTextReplaceAll, // Button-Objekt zum Ersetzen aller Vork.
  $:ieRTFCtrlLine, // IntEdit-Objekt zur Eingabe der Zeilennummer
  $:bnRTFCtrlLine // Button-Objekt zum Positionieren auf Zeilen
);

Innerhalb dieser Funktion werden die einzelnen Objekte konfiguriert: Über das Modul SysEvt werden Ereignisse registriert. Mit dem Modul SysAct werden Aktionen definiert und mit den Oberflächenobjekten verknüpft.

Das Modul übernimmt ab diesem Zeitpunkt sämtliche Logik und Steuerung, die zum Suchen und Ersetzen im RTFEdit-Objekt notwendig ist, zum Beispiel:

  • Ein- und Ausblenden der Suchleiste
  • Erzeugen und Anpassen des Kontextmenüs
  • Reaktion auf Tastaturkürzel
  • Durchsuchen, Ersetzen und Markieren von Textpassagen
Suchen und Ersetzen

Um die Instanz nach deren Verwendung zu zerstören, wird die Funktion Term() – der Destruktor des Moduls – aufgerufen. Dabei muss lediglich der Instanz-Deskriptor übergeben werden:

tVarMdlWinRTFEdit->MdlWinRTFEdit:Term();

Download

Zum downloaden hier klicken MdlWinRTFEdit.zip (104.75 KB)
Sie müssen angemeldet sein, um die Datei herunterladen zu können.

2 Antworten

  1. In der Funktion MdlWinRTFEdit:Init() wird der Editiermodus über den Wert der ReadOnly-Eigenschaft des RTFEdit-Objektes ermittelt. Dem entsprechend, wird der Ersetzungsmodus aktiviert bzw. deaktiviert.
    Außerdem kann über die Funktion MdlWinRTFEdit:EditSet() nachträglich der Editiermodus gesetzt werden.

  2. Läßt man für ReadOnly-Objekte dann einfach die Felder für die Ersetzungs-Option weg, oder gibt es einen Schalter oder eine Automatik ?

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Leave the field below empty!

IHRE EVALUIERUNGSLIZENZ - JETZT ANFORDERN!

TESTEN SIE DIE CONZEPT 16 VOLLVERSION - UNVERBINDLICH und KOSTENFREI

Melden Sie sich bei unserem Newsletter an

Anrede*
     
Zustimmung zur Datenverarbeitung gem. DSGVO*



WordPress Cookie-Hinweis von Real Cookie Banner