Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - JvRichEdit.SelAttributes.Protected := False - bewirkt nichts


galagher - Do 04.05.17 18:56
Titel: JvRichEdit.SelAttributes.Protected := False - bewirkt nichts
Hallo!

Die Anweisung JvRichEdit1.SelAttributes.Protected := False wirkt sich nicht aus, der selektierte Text bleibt read-only. Wie kann ich das beheben?

lg
galagher


Delete - Do 04.05.17 20:05

- Nachträglich durch die Entwickler-Ecke gelöscht -


galagher - Do 04.05.17 20:47

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
das Problem besteht nicht nur bei der Jedi-Komponente (TJvRichEdit), sondern auch bei der Standard-Komponente (TRichEdit).
Da beide den Vorfahren TCustomMemo haben, liegt das Problem entweder dort, oder beide Komponenten wurden mit dem selben "Fehler" erzeugt.

Eine einfache behelfsmässige Lösung:

Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm1.JvRichEdit1ProtectChange(Sender: TObject; StartPos,
  EndPos: Integer; var AllowChange: Boolean);
begin
  AllowChange := True;
end;

Das "True" sollte man natürlich durch einen boolschen Wert, der anhängig von irgendeiner Bedingung ist, ersetzen, sonst führt man Protected ja ad absurdum! Da es mir aber nur um die Eigenschaft Protected als solche geht (ist gesetzt - ja/nein), ist mir das zunächst egal. Ich "missbrauche" Protected nämlich, um einen Hyperlink im Text zu realisieren. Klickt man auf einen solchen Text, springt das Programm zu einer anderen Stelle im Text.

Dennoch ist es ein Bug, denn es müsste ja genügen, SelAttributes.&Protected := False zu setzen.
Vielleicht baue ich den Jedi-Code noch um!

Noch eine Frage: Warum setzt Delphi da ein & ein? Also statt SelAttributes.Protected erweitert Delphi das zu SelAttributes.&Protected.

//Edit: Ich sehe schon: Weil Protected ein reserviertes Wort ist.


Delete - Do 04.05.17 20:57

- Nachträglich durch die Entwickler-Ecke gelöscht -


galagher - Do 04.05.17 21:31

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Weil Protected ein reserviertes Wort ist.
Nun, im Zusammenhang mit der Eigenschaft Protected ist es ja gar nicht das reservierte Wort...

user profile iconFrühlingsrolle hat folgendes geschrieben Zum zitierten Posting springen:
Die Lösung wäre in etwa, den Code für die CNNotify() Methode aus dem verlinkten Beitrag zu übernehmen, und die Variable FAllowOneUnProtection: Boolean; in der Setter-Methode der SelAttributes Eigenschaft unterzubringen. Sobald die Eigenschaft true gesetzt wird, soll die Variable false werden, und umgekehrt. So stell' ich mir das vor.
Ja, so ist es definitiv sauber.

user profile icongalagher hat folgendes geschrieben Zum zitierten Posting springen:
Wieso dieses &-Zeichen angezeigt wird, weiss ich auch nicht. Das wird wohl an Delphi 10.1 liegen, denn dort erscheint es auch für die TRichEdit Komponente. In Delphi 2006 ist es nicht der Fall.
Das macht Delphi XE2 auch.