![]() |
RichEdit Formatierung:
Hallo,
Ich weiß, dass es schon Threads in ähnlicher Richtung gibt und daher tut es mir erstmal leid, dass ich jetzt nochmal ein Thread dafür verschwenden muss. :oops: Nur haben sich diese Threads entweder auf einen Button oder auf das formatieren vorbestimmer Wärter gerichtet. Aber folgendes: Ich habe eine Combox, wo ich über:
Delphi-Quellcode:
im OnCreate Ereignis der Form die Schriften in die Combobox lade. Mit dem Ergebnis, dass sich mit
begin
RichEdit1.Font.Name:='Arial'; ComboBox1.Items:= Screen.Fonts; end;
Delphi-Quellcode:
im OnChange Ereignis der Combobox der gesamte Text ändert. Nun wollte ich es aber so, dass nur das formatiert wird, was auch makiert ist. Sei es ein einzelnes Zeichen oder ein ganzes Wort.
begin
RichEdit1.Font.Name:=ComboBox1.Items[ComboBox1.ItemIndex]; end; In der Delphi-Hilfe (die ich auch zu Rate gezogen habe), stand was von
Delphi-Quellcode:
den OnChange Code habe ich dann wie folgt geändert:
property SelAttributes: TTextAttributes;
Delphi-Quellcode:
So und da stockt es leider bei mir. Ich glaube ich muss irgendwas mit If machen. Die Frage ist nur, was.
var SelAttributes: TTextAttributes;
begin RichEdit1.Font.Name:=ComboBox1.Items[ComboBox1.ItemIndex]; end; Wie realisierbar? Thx. P.S.: Bitte nicht rummeckern, es gäbe schon viele Threads, die sich mit der Formatierung beschäftigen. |
Re: RichEdit Formatierung:
Schau dir doch mal das Borland Demo unter
C:\Programme\Borland\Delphi 5\Demos\RichEdit an!! (Wenn du Delphi 7 hast, ist der Pfad anderst; logisch) Das Projekt RichEdit.dpr ist ein kompletter Editor für RichText. Am Besten du kupferst einfach alles ab. |
Re: RichEdit Formatierung:
Danke für den Tipp.
Wie und wo ist aber CurrText deklariert?
Delphi-Quellcode:
Das Editfeld, für die Schriftgröße (zusammen mit einer Up/Down Komponente.
if FUpdating then Exit;
CurrText.Size := StrToInt(FontSize.Text); "CurrText" wird mir als undeklarierter bezeichner angegeben. Und was ist FUpdating?? Wenn ich die function von CurrText einfüge, kommt Delphi mit: "function needs result"
Delphi-Quellcode:
Der folgende Code ist von der RichEdit Demo von Delphi6:
function TForm1.CurrText: TTextAttributes;
begin if edit.SelLength > 0 then Result := edit.SelAttributes else Result := edit.DefAttributes; end;
Delphi-Quellcode:
unit remain;
interface uses {...} type {...} procedure SelectionChange(Sender: TObject); {...} private FFileName: string; FUpdating: Boolean; FDragOfs: Integer; FDragging: Boolean; function CurrText: TTextAttributes; procedure GetFontNames; procedure SetFileName(const FileName: String); procedure CheckFileSave; procedure SetupRuler; procedure SetEditRect; procedure UpdateCursorPos; procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES; procedure PerformFileOpen(const AFileName: string); procedure SetModified(Value: Boolean); end; var MainForm: TMainForm; implementation uses REAbout, RichEdit, ShellAPI, ReInit; resourcestring sSaveChanges = 'Save changes to %s?'; sOverWrite = 'OK to overwrite %s'; sUntitled = 'Untitled'; sModified = 'Modified'; sColRowInfo = 'Line: %3d Col: %3d'; const RulerAdj = 4/3; GutterWid = 6; ENGLISH = (SUBLANG_ENGLISH_US shl 10) or LANG_ENGLISH; FRENCH = (SUBLANG_FRENCH shl 10) or LANG_FRENCH; GERMAN = (SUBLANG_GERMAN shl 10) or LANG_GERMAN; {$R *.dfm} procedure TMainForm.SelectionChange(Sender: TObject); begin with Editor.Paragraph do try FUpdating := True; FirstInd.Left := Trunc(FirstIndent*RulerAdj)-4+GutterWid; LeftInd.Left := Trunc((LeftIndent+FirstIndent)*RulerAdj)-4+GutterWid; RightInd.Left := Ruler.ClientWidth-6-Trunc((RightIndent+GutterWid)*RulerAdj); BoldButton.Down := fsBold in Editor.SelAttributes.Style; ItalicButton.Down := fsItalic in Editor.SelAttributes.Style; UnderlineButton.Down := fsUnderline in Editor.SelAttributes.Style; BulletsButton.Down := Boolean(Numbering); FontSize.Text := IntToStr(Editor.SelAttributes.Size); FontName.Text := Editor.SelAttributes.Name; case Ord(Alignment) of 0: LeftAlign.Down := True; 1: RightAlign.Down := True; 2: CenterAlign.Down := True; end; UpdateCursorPos; finally FUpdating := False; end; end; function TMainForm.CurrText: TTextAttributes; begin if Editor.SelLength > 0 then Result := Editor.SelAttributes else Result := Editor.DefAttributes; end; function EnumFontsProc(var LogFont: TLogFont; var TextMetric: TTextMetric; FontType: Integer; Data: Pointer): Integer; stdcall; begin TStrings(Data).Add(LogFont.lfFaceName); Result := 1; end; procedure TMainForm.GetFontNames; var DC: HDC; begin DC := GetDC(0); EnumFonts(DC, nil, @EnumFontsProc, Pointer(FontName.Items)); ReleaseDC(0, DC); FontName.Sorted := True; end; procedure TMainForm.SetFileName(const FileName: String); begin FFileName := FileName; Caption := Format('%s - %s', [ExtractFileName(FileName), Application.Title]); end; procedure TMainForm.CheckFileSave; var SaveResp: Integer; begin if not Editor.Modified then Exit; SaveResp := MessageDlg(Format(sSaveChanges, [FFileName]), mtConfirmation, mbYesNoCancel, 0); case SaveResp of idYes: FileSave(Self); idNo: {Nothing}; idCancel: Abort; end; end; procedure TMainForm.SetupRuler; var I: Integer; S: String; begin SetLength(S, 201); I := 1; while I < 200 do begin S[I] := #9; S[I+1] := '|'; Inc(I, 2); end; Ruler.Caption := S; end; procedure TMainForm.SetEditRect; var R: TRect; begin with Editor do begin R := Rect(GutterWid, 0, ClientWidth-GutterWid, ClientHeight); SendMessage(Handle, EM_SETRECT, 0, Longint(@R)); end; end; { Event Handlers } procedure TMainForm.FormCreate(Sender: TObject); begin Application.OnHint := ShowHint; OpenDialog.InitialDir := ExtractFilePath(ParamStr(0)); SaveDialog.InitialDir := OpenDialog.InitialDir; SetFileName(sUntitled); GetFontNames; SetupRuler; SelectionChange(Self); CurrText.Name := DefFontData.Name; CurrText.Size := -MulDiv(DefFontData.Height, 72, Screen.PixelsPerInch); LanguageEnglish.Tag := ENGLISH; LanguageFrench.Tag := FRENCH; LanguageGerman.Tag := GERMAN; case SysLocale.DefaultLCID of ENGLISH: SwitchLanguage(LanguageEnglish); FRENCH: SwitchLanguage(LanguageFrench); GERMAN: SwitchLanguage(LanguageGerman); end; end; procedure TMainForm.ShowHint(Sender: TObject); begin if Length(Application.Hint) > 0 then begin StatusBar.SimplePanel := True; StatusBar.SimpleText := Application.Hint; end else StatusBar.SimplePanel := False; end; procedure TMainForm.FileNew(Sender: TObject); begin SetFileName(sUntitled); Editor.Lines.Clear; Editor.Modified := False; SetModified(False); end; procedure TMainForm.PerformFileOpen(const AFileName: string); begin Editor.Lines.LoadFromFile(AFileName); SetFileName(AFileName); Editor.SetFocus; Editor.Modified := False; SetModified(False); end; procedure TMainForm.FileOpen(Sender: TObject); begin CheckFileSave; if OpenDialog.Execute then begin PerformFileOpen(OpenDialog.FileName); Editor.ReadOnly := ofReadOnly in OpenDialog.Options; end; end; procedure TMainForm.FileSave(Sender: TObject); begin if FFileName = sUntitled then FileSaveAs(Sender) else begin Editor.Lines.SaveToFile(FFileName); Editor.Modified := False; SetModified(False); end; end; procedure TMainForm.FileSaveAs(Sender: TObject); begin if SaveDialog.Execute then begin if FileExists(SaveDialog.FileName) then if MessageDlg(Format(sOverWrite, [SaveDialog.FileName]), mtConfirmation, mbYesNoCancel, 0) <> idYes then Exit; Editor.Lines.SaveToFile(SaveDialog.FileName); SetFileName(SaveDialog.FileName); Editor.Modified := False; SetModified(False); end; end; procedure TMainForm.FilePrint(Sender: TObject); begin if PrintDialog.Execute then Editor.Print(FFileName); end; procedure TMainForm.FileExit(Sender: TObject); begin Close; end; procedure TMainForm.EditUndo(Sender: TObject); begin with Editor do if HandleAllocated then SendMessage(Handle, EM_UNDO, 0, 0); end; procedure TMainForm.EditCut(Sender: TObject); begin Editor.CutToClipboard; end; procedure TMainForm.EditCopy(Sender: TObject); begin Editor.CopyToClipboard; end; procedure TMainForm.EditPaste(Sender: TObject); begin Editor.PasteFromClipboard; end; procedure TMainForm.HelpAbout(Sender: TObject); begin with TAboutBox.Create(Self) do try ShowModal; finally Free; end; end; procedure TMainForm.SelectFont(Sender: TObject); begin FontDialog1.Font.Assign(Editor.SelAttributes); if FontDialog1.Execute then CurrText.Assign(FontDialog1.Font); SelectionChange(Self); Editor.SetFocus; end; procedure TMainForm.RulerResize(Sender: TObject); begin RulerLine.Width := Ruler.ClientWidth - (RulerLine.Left*2); end; procedure TMainForm.FormResize(Sender: TObject); begin SetEditRect; SelectionChange(Sender); end; procedure TMainForm.FormPaint(Sender: TObject); begin SetEditRect; end; procedure TMainForm.BoldButtonClick(Sender: TObject); begin if FUpdating then Exit; if BoldButton.Down then CurrText.Style := CurrText.Style + [fsBold] else CurrText.Style := CurrText.Style - [fsBold]; end; procedure TMainForm.ItalicButtonClick(Sender: TObject); begin if FUpdating then Exit; if ItalicButton.Down then CurrText.Style := CurrText.Style + [fsItalic] else CurrText.Style := CurrText.Style - [fsItalic]; end; procedure TMainForm.FontSizeChange(Sender: TObject); begin if FUpdating then Exit; CurrText.Size := StrToInt(FontSize.Text); end; procedure TMainForm.AlignButtonClick(Sender: TObject); begin if FUpdating then Exit; Editor.Paragraph.Alignment := TAlignment(TControl(Sender).Tag); end; procedure TMainForm.FontNameChange(Sender: TObject); begin if FUpdating then Exit; CurrText.Name := FontName.Items[FontName.ItemIndex]; end; procedure TMainForm.UnderlineButtonClick(Sender: TObject); begin if FUpdating then Exit; if UnderlineButton.Down then CurrText.Style := CurrText.Style + [fsUnderline] else CurrText.Style := CurrText.Style - [fsUnderline]; end; procedure TMainForm.BulletsButtonClick(Sender: TObject); begin if FUpdating then Exit; Editor.Paragraph.Numbering := TNumberingStyle(BulletsButton.Down); end; procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin try CheckFileSave; except CanClose := False; end; end; { Ruler Indent Dragging } procedure TMainForm.RulerItemMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FDragOfs := (TLabel(Sender).Width div 2); TLabel(Sender).Left := TLabel(Sender).Left+X-FDragOfs; FDragging := True; end; procedure TMainForm.RulerItemMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if FDragging then TLabel(Sender).Left := TLabel(Sender).Left+X-FDragOfs end; procedure TMainForm.FirstIndMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FDragging := False; Editor.Paragraph.FirstIndent := Trunc((FirstInd.Left+FDragOfs-GutterWid) / RulerAdj); LeftIndMouseUp(Sender, Button, Shift, X, Y); end; procedure TMainForm.LeftIndMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FDragging := False; Editor.Paragraph.LeftIndent := Trunc((LeftInd.Left+FDragOfs-GutterWid) / RulerAdj)-Editor.Paragraph.FirstIndent; SelectionChange(Sender); end; procedure TMainForm.RightIndMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin FDragging := False; Editor.Paragraph.RightIndent := Trunc((Ruler.ClientWidth-RightInd.Left+FDragOfs-2) / RulerAdj)-2*GutterWid; SelectionChange(Sender); end; procedure TMainForm.UpdateCursorPos; var CharPos: TPoint; begin CharPos.Y := SendMessage(Editor.Handle, EM_EXLINEFROMCHAR, 0, Editor.SelStart); CharPos.X := (Editor.SelStart - SendMessage(Editor.Handle, EM_LINEINDEX, CharPos.Y, 0)); Inc(CharPos.Y); Inc(CharPos.X); StatusBar.Panels[0].Text := Format(sColRowInfo, [CharPos.Y, CharPos.X]); end; procedure TMainForm.FormShow(Sender: TObject); begin UpdateCursorPos; DragAcceptFiles(Handle, True); RichEditChange(nil); Editor.SetFocus; { Check if we should load a file from the command line } if (ParamCount > 0) and FileExists(ParamStr(1)) then PerformFileOpen(ParamStr(1)); end; procedure TMainForm.WMDropFiles(var Msg: TWMDropFiles); var CFileName: array[0..MAX_PATH] of Char; begin try if DragQueryFile(Msg.Drop, 0, CFileName, MAX_PATH) > 0 then begin CheckFileSave; PerformFileOpen(CFileName); Msg.Result := 0; end; finally DragFinish(Msg.Drop); end; end; procedure TMainForm.RichEditChange(Sender: TObject); begin SetModified(Editor.Modified); end; procedure TMainForm.SetModified(Value: Boolean); begin if Value then StatusBar.Panels[1].Text := sModified else StatusBar.Panels[1].Text := ''; end; procedure TMainForm.SwitchLanguage(Sender: TObject); var Name : String; Size : Integer; begin if LoadNewResourceModule(TComponent(Sender).Tag) <> 0 then begin Name := FontName.Text; Size := StrToInt(FontSize.Text); ReinitializeForms; LanguageEnglish.Checked := LanguageEnglish = Sender; LanguageFrench.Checked := LanguageFrench = Sender; LanguageGerman.Checked := LanguageGerman = Sender; CurrText.Name := Name; CurrText.Size := Size; SelectionChange(Self); FontName.SelLength := 0; SetupRuler; if Visible then Editor.SetFocus; end; end; procedure TMainForm.ActionList2Update(Action: TBasicAction; var Handled: Boolean); begin { Update the status of the edit commands } EditCutCmd.Enabled := Editor.SelLength > 0; EditCopyCmd.Enabled := EditCutCmd.Enabled; if Editor.HandleAllocated then begin EditUndoCmd.Enabled := Editor.Perform(EM_CANUNDO, 0, 0) <> 0; EditPasteCmd.Enabled := Editor.Perform(EM_CANPASTE, 0, 0) <> 0; end; end; procedure TMainForm.UpDown1Click(Sender: TObject; Button: TUDBtnType); begin end; end. |
Re: RichEdit Formatierung:
Hallo,
die Formatierung eines markierten Bereiches kannst du so ändern:
Delphi-Quellcode:
begin
with RichEdit1 do begin If SelLength > 0 then //prüfen ob was markiert wurde SelAttributes.Name := ComboBox1.Items[ComboBox1.ItemIndex]; //ausgewählte Font der Markierung zuweisen end; |
Re: RichEdit Formatierung:
Danke. Das mit der Schriftart funzt jetzt. :thumb:
Fehlt aber noch die Schriftgröße. Hast du da auch ne Idee? |
Re: RichEdit Formatierung:
schon mal geschaut was SelAttributes alles kann?
Delphi-Quellcode:
SelAttributes.Name := 'Arial'; //Schriftart
SelAttributes.Size := 14; //Größe SelAttributes.Color := clRed; //Farbe |
Re: RichEdit Formatierung:
Das ist mir schon klar.
Aber:
Delphi-Quellcode:
funzt nicht.
begin
with RichEdit1 do begin If SelLength > 0 then //prüfen ob was markiert wurde SelAttributes.size := ComboBox2.Items[ComboBox2.ItemIndex]; end; Der Code, um die Fonts in die Combobox zu bekommen:
Delphi-Quellcode:
für die Größe?? :oops:
begin
RichEdit1.Font.Name:='Arial'; ComboBox1.Items:= Screen.Fonts; end; Sorry. :oops: |
Re: RichEdit Formatierung:
von welcher ComboBox reden wir jetzt?
ComboBox1 oder ComboBox2? Weisst du eigentlich was bei
Delphi-Quellcode:
rauskommt? - Ein String nämlich!!
ComboBox2.Items[ComboBox2.ItemIndex];
Wenn du aber folgendes machst:
Delphi-Quellcode:
weisst du der Property "size", die einen Integer erwartet, einen String zu.
begin
with RichEdit1 do begin If SelLength > 0 then //prüfen ob was markiert wurde SelAttributes.size := ComboBox2.Items[ComboBox2.ItemIndex]; end; Dass das nicht gehen kann ist dir hoffentlich klar. Was willst du eigentlich tun? |
Re: RichEdit Formatierung:
Mein Projekt, an dem ich gerade arbeite, enthält neben vielen Funktionen unter anderem auch ein Textverabeitungsprogramm.
Auf einer Toolbar, habe ich die ganzen Toolbarbutton (neu, kopieren, öffnen, etc.) und eben zwei Comboboxen für die Schriftart(die ja Dank DEINER Hilfe :thumb: jetzt funzt(Combobox1) und halt eine Combobox2 (schriftgröße), an der es noch hapert. Sowohl mit dem (Schriftgrößen in die Combobox kriegen), sowie mit dem ändern des makierten Textes in Bezug auf seine Größe. Ich hoffe, ich konnte die mein "Vorhaben" etwas deutlicher machen. |
Re: RichEdit Formatierung:
also ich denke nicht, dass die Schriftgrößen im System hinterlegt sind.
Die musst du schon selbst in die ComboBox schreiben. Abfragen kannst es so:
Delphi-Quellcode:
Voraussetzung dafür ist, dass sich nur, ausschliesslich nur, Zahlen in den Items der ComboBox befinden!
SelAttributes.size := StrToInt(ComboBox2.Items[ComboBox2.ItemIndex]);
Ansonsten bekommst ne Exception. Die könnte mal auch abfangen, nämlich so:
Delphi-Quellcode:
So hättest du, wenn keine Zahl in der ComboBox ist, eine definierte Größe von 10, ansonsten die Angewählte der ComboBox.
SelAttributes.size := StrToIntDef(ComboBox2.Items[ComboBox2.ItemIndex], 10);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:54 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 by Thomas Breitkreuz