Autor |
Beitrag |
n0thin
Hält's aus hier
Beiträge: 13
|
Verfasst: Do 10.12.09 18:03
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
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 10.12.09 18:37
Hallo und  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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: So 13.12.09 00:42
Hallo,
schau dir mal RichEdit.SelAttributes.Protected an.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
n0thin 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
n0thin 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
n0thin 
Hält's aus hier
Beiträge: 13
|
Verfasst: 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
      
Beiträge: 2352
Erhaltene Danke: 4
Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
|
Verfasst: 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.
_________________ MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
|
|
|