![]() |
RichEdit Texteinzug
Hallo liebe Delphi Praxis,
ich arbeite an einem kleinen Textbearbeitungsprogramm und habe ein paar wichtige Fragen. Ich hoffe irgendjemand weiß eine Antwort. (Bitte antwortet verständlich und möglichst mit Quelltextschnipseln ;) 1) Texteinzug setzen um bei einem 'Dokument' nicht links am Rand anzufangen habe ich folgenden Quelltext:
Delphi-Quellcode:
Hierbei ist Editor mein RichEdit1.
with Editor do begin
Paragraph.FirstIndent := i; Paragraph.Tab[0] := 150; Paragraph.Tab[1] := 250; Paragraph.Tab[2] := 320; Paragraph.Tab[3] := 450; Paragraph.Tab[4] := 550; end; end; Das ganze funktioniert in sofern, dass ich nach 150pxls Platz anfange zu schreiben, was auch so sein soll. Ich habe es in die RicheEdit OnClick geschoben, da mir nichts besseres eingefallen ist. Wo wär es besser aufgehoben? Wie kann ich festlegen, dass ich erst nach 2 Zeilen Platz für z.B. Ein Kopfzeile anfange zu schreiben? (Und wie kann man eine Kopfzeile definieren um darin zu schreiben?) 2) Wenn ich die Tab-Taste im gestarteten Programm drücke soll der Texteinzug weiterspringen, wie man das gewöhnt ist, also um die 4 Leerzeichen Platz gelassen werden. Da die Tab Taste jedoch eine Steuerfunktion hat, schaltet sie statt einen Tab zu machen zwischen den Komponeten der Unit durch. Wie kann ich das umgehen, bzw. Die Taste zwingen in der RichEdit zu bleiben und nich andere Buttons anzusteuern? Ich freue mich auf die Antworten, Liebe Grüße Dunkelbunt |
AW: RichEdit Texteinzug
Nicht push ;)
|
AW: RichEdit Texteinzug
Mit dem pushen innerhalb eines Tages machst du dich hier nicht besonders beliebt!
Zeilen einfügen am Begin: richedit1.lines.insert(0,''); tab: property wanttabs auf true setzen Kopf- und Fusszeile: RIchedit unterstützt in Delphi keine Kopf- und Fusszeilen, also entweder selber malen oder auf ein externes Control ausweichen. |
AW: RichEdit Texteinzug
Zitat:
|
AW: RichEdit Texteinzug
'Tschuldigung! :oops:
Danke für die Antwort, das mit Wanttabs ist klasse. Jetz nochmal die Frage, wo ist die gesamte Texteinzugsprozedur am besten aufgehoben? OnClick ist eher unpassend... Edit1: Ich habe bei der RichEdit folgende Property entdeckt: Border Width. Wenn man den Wert auf etwa 50 festlegt ist der Abstand des Textes zum Rand größer. Dadurch hat man etwa den selben effekt... Nachteil ist das der Platz, also die Border (Grenze) unbeschreibbar ist. |
AW: RichEdit Texteinzug
Wo du die Texteinzugsprozedur einfügst hängt von deiner Anwendung ab.
Es gibt verschiedene Möglichkeiten: - im Formcreate - in einem Menü oder Button, wenn es der Benutzer zur Laufzeit festlegen soll Zu dem Rand: Nein, das ist nicht der gleiche Effekt! Ein Einzug gilt für einen Paragraph, und kann somit für unterschiedliche Absätze unterschiedlich gesetzt werden. Wenn also ein Blatt mit einem fixen Rand gesetzt werden soll verwende ich jeweils folgende Prozedur:
Delphi-Quellcode:
procedure TForm1.SetMargin(RE: TRichEdit; L,R,T,B : Integer);
// Linken, Rechten, Oberen und Unteren Rand setzen var Rect :TRect; begin SendMessage(RE.Handle,EM_GETRECT,0,LongInt(@Rect)); Rect.Left := Rect.Left + L; Rect.Right := Rect.Right - R; Rect.Top := Rect.Top + T; Rect.Bottom := Rect.Bottom - B; SendMessage(RE.Handle,EM_SETRECT,0,LongInt(@Rect)); end; |
AW: RichEdit Texteinzug
Delphi erkennt die SetMargin nicht.
Muss ich irgendetwas bestimmtes einbinden oder beachten? |
AW: RichEdit Texteinzug
Zitat:
Delphi-Quellcode:
die Prozedur fügst du dann irgendwo nach implementation ein
type
TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private-Deklarationen } // hier einfügen procedure SetMargin(RE: TRichEdit; L,R,T,B : Integer);
Delphi-Quellcode:
und die Prozedur rufst du dann im Formcreate auf:
implementation
{$R *.dfm} procedure TForm1.SetMargin(RE: TRichEdit; L,R,T,B : Integer); // Linken, Rechten, Oberen und Unteren Rand setzen var Rect :TRect; begin SendMessage(RE.Handle,EM_GETRECT,0,LongInt(@Rect)); Rect.Left := Rect.Left + L; Rect.Right := Rect.Right - R; Rect.Top := Rect.Top + T; Rect.Bottom := Rect.Bottom - B; SendMessage(RE.Handle,EM_SETRECT,0,LongInt(@Rect)); end;
Delphi-Quellcode:
setMargin(richedit1,30,50,100,20);
|
AW: RichEdit Texteinzug
Danke für die Erklärung! :dp:
Ist eine große Hilfe. Ich melde mich im Edit wieder. =) Edit1: Hier tut sich mir eine weiter Frage auf: 1) Wie stell ich es an, dass bei Programmstart der Cursor (also das Pipe Zeichen) direkt auf der ersten möglichen Zeile des RichEdit landet, und nicht meine Combobox für die Schriftart markiert ist? 2) Gibt es eine möglichkeit für folgendes: man markiert Text hält die Maus drüber und an der Stelle des Curor (Mouse.CursorPos(X,Y)) öffnet sich ein Menü mit Buttons. Es soll keine neue Form sein und möglichst erst nach 1sec draufhalten erscheinen. (Zusätzlich wäre es noch toll wenn das Menü eingeblendet wird und sich dann wieder ausblendet) Ich hoffe jemand kann die Frage beantworten. Vielen Dank, Dunkelbunt |
AW: RichEdit Texteinzug
zu 1) SetCursorPos
ich glaub das ist es was du möchtest... zu 2) keine ahnung ob das möglich ist, glaube aber nicht an deiner stelle würde ich einfach nochmal neu posten anstatt dies im edit zu machen so bekommt man das wenigstens mit, wenn du was neues fragst |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz