Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - RichEdit 2 Befehle bei einer Taste
n0thin - Do 10.12.09 18:03
Titel: RichEdit 2 Befehle bei einer Taste
Hi,
vorweg: Ich bin in Delphi noch ein relativer Anfänger.
Nun zu meinem Problem: Ich schreibe gerade ein Programm, das die Formatierungszeichen-Funktion
(Strg-F10, soweit ich weiß) aus Text-Dokumenten beinhaltet. Man gibt also einen Text in ein RichEdit ein, klickt auf einen Button und sämtliche Leerzeichen werden durch Punkte ersetzt (·,#183) und bei jeglichen Zeilenumsprüngen wird das ¶-Zeichen eingefügt (#183). Das funktioniert soweit auch tadellos, nur soll danach automatisch eben weiterhin alles eingefügt werden (über eine Boolean-Variable geregelt).
Und da liegt mein Problem: Ich verwende die OnKeyPress-Prozedur, aber wenn ich jedesmal wenn Enter, also Zeilenumbruch gedrückt wird, das durch ¶ ersetze, kommt der Zeilenumbruch eben nicht.
Da aber Key eine Char-Variable ist, kann ich sie nicht doppelt belegen. Ich brauche also entweder eine Möglichkeit diese Char-Variable irgendwie doppelt zu belegen oder eine Möglichkeit, an die Stelle zu springen, wo gerade Enter getippt wurde. Ich habe gehört, dass es für letzteres einen Befehl gibt, den aber nicht gefunden.
MfG
Moderiert von
Narses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Do 10.12.2009 um 23:22
jaenicke - Do 10.12.09 18:37
Hallo und :welcome: bei uns!
Schau dir einmal SelText an. ;-)
Du musst diese Eigenschaft nur auf das Zeichen setzen und kannst das aktuelle Zeichen in Key unverändert lassen.
n0thin - Sa 12.12.09 21:30
Ok, ich danke dir vielmals für die schnelle Hilfe, ich habs gerade ausprobiert (bis gestern kein Delphi gehabt) und es funktioniert tadellos.
MfG
n0thin - Sa 12.12.09 23:25
Also ich hab das ganze jetzt in mein Programm eingebaut, funktioniert auch gut.
Nur eine zum selben Programm habe ich noch: Gibt es eine Möglichkeit, wie ich das Agieren mit dem ¶-Zeichen verhindern kann? Also, so wie es bis jetzt ist, kann man es eben rauslöschen, noch etwas dahinter schreiben oder sonstigen Unsinn damit anstellen. Ich möchte aber gerne, das es so wie bei einem Standart-Textverarbeitungsprogramm ist, also dass das Zeichen nicht bearbeitet oder irgendwie verändert werden kann. Ich bräuchte also quasi einen Disable-Befehl speziell für den Wert '¶' bzw. #182.
Bitte um Hilfe...
MfG
Lannes - So 13.12.09 00:42
Hallo,
schau dir mal RichEdit.SelAttributes.Protected an.
n0thin - So 13.12.09 20:06
Hmm sorry, aber ich weiß nich genau, was ich mit RichEdit.SelAttributes.Protected anfangen soll. Das ganze ist ja nur eine Boolean-Variable, ich habe also keine Möglichkeit irgendwie zu bestimmen, welches Wert geschützt werden soll. Im Internet und auch in der Delphi-Hilfe habe ich auch keinen wirklichen Hinweis darauf gefunden, wie mir das hilft. Ich wäre dir/euch dankbar, wenn mir das etwas genauer erklärt werden würde.
MfG
P.S.:Wie gesagt, ich bin in Delphi relativer Neuling, kann also auch sein, dass ich da was offensichtliches verpeilt habe...
Lannes - So 13.12.09 22:33
Hallo,
selektiere das/die ¶-Zeichen in dem RichEdit und setze dann Protected auf True und das Zeichen ist quasi disabled, kann nicht geändert werden.
Genauso wie man Zeichen im RichEdit einfärbt.
Etwa so:
Delphi-Quelltext
1: 2: 3: 4:
| RichEdit.Text := 'Ein Text¶'; RichEdit.SelStart := 8; RichEdit.Sellength := 1; RichEdit.SelAtributes.Protected := True; |
Es gibt auch ein Ereignis das in diesem Zusammenhang nützlich werden kann:
RichEdit.OnProtectChange
n0thin - So 13.12.09 23:20
Hi,
erstmal Danke für die schnelle Hilfe. Aber ich habs jetzt versucht. Da es dynamisch funktionieren soll, weil ja immer wieder neue Zeichen dazu kommen, habe ich es mal so probiert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| for i:=1 to length(REdtText.Text) do begin if REdtText.Text[i]=#182 then begin REdtText.SelStart:=i; REdtText.SelLength:=1; REdtText.SelAttributes.Protected:=True;
end; |
das dann sowohl in einer OnChange- und einer OnKeyPress-Prozedur probiert, das ¶-Zeichen soll ja nicht erst geschützt werden, wenn ich das nächste mal auf nen Button klicke oder so.
Aber leider klappt es überhaupt nicht-.-
Ich kann irgendwie nach dem Zeilenumbruch rein gar nichts mehr schreiben...
MfG
P.S.: Wie markier ich den Quellcode hier im Forum?
Moderiert von
Narses: Delphi-Tags hinzugefügt
Lannes - Mo 14.12.09 08:41
Hallo,
schütze das Zeichen dann wenn es eingefügt wird, jedesmal das ganze Richedit durchsuchen ist der falsche Ansatz.
Wenn Du dahinter nichts einfügen kannst ist was falsch gelaufen.
Der Selektierungs-Index im RichEdit liegt bei Fundstelle -1:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| for i := 1 to length(REdtText.Text) do if REdtText.Text[i] = #182 then begin REdtText.SelStart := i -1; REdtText.SelLength := 1; REdtText.SelAttributes.Protected := True; end; |
n0thin hat folgendes geschrieben : |
P.S.: Wie markier ich den Quellcode hier im Forum? |
Setz die BBCodes
[ delphi] dein Code [/delphi]
oder nutze die Schalter des Beitrags-Editors.
n0thin - Mo 14.12.09 09:03
Hmm, hatte es auch schon mit i-1 versucht, funktioniert genauso wenig...
Aber wie schütze ich mein Zeichen, wenn es eingefügt wird? Der Befehl, also wie man im RichEdit erkennt, wo gerade etwas geschrieben wurde, ist mir nicht bekannt, könnte ihn aber auch für ein anderes Programm noch sehr gut gebrauchen, falls es der ist, den du meinst.
MfG
Lannes - Di 15.12.09 20:03
Hallo,
Es gibt Ereignisse auf die Du reagieren kannst, zwei hast du schon selbst genannt, das OnChange- und das OnKeyPress-Ereignis. Dazu kommen noch das OnKeyDown-, OnKeyUp-, OnSelectionChange-Ereignis u.A., was jetzt am Besten für deine Ziele ist kann ich nicht sagen, dafür habe ich zu wenig Information über dein Vorhaben.
In den Event-Handler-Methoden kannst du die aktuelle Position des Cursors mit RichEdit.SelStart abfragen. RichEdit.SelLength liefert Dir die Anzahl der selektierten Zeichen.
SelStart und SelLength kannst du auch im Memo oder auch in einem Edit nutzen, eigentlich in allen Komponenten in denen man Text selektieren kann.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!