ich habe ein Problem beim Aufruf der von RichMemo mit einem leeren Editor.
Ich möchte den Font vor einstellen (der aktuelle Font unter dem Cursor wird in einer Toolbar-Leiste angezeigt - zweiter Code).
Beim jungfräulichen Editor ist es purer Zufall, welcher Font welche Schriftfarbe oder welcher Hintergrund ausgelesen wird. Meines Erachtens liegt das an der RichMemo-Procedure:
Code: Alles auswählen
procedure InitFontParams(out p: TFontParams);
begin
FillChar(p, SizeOf(p), 0);
end;
Die könnte ich jetzt in der Unit umschreiben, so dass ich der Funktion initiale Parameter übergeben. Das macht mich aber nicht so glücklich. Wobei ich noch nicht ausprobiert, ob es klappt. Beim nächsten Update müsste ich wieder daran denken.
Ich habe in meinem Programm es mit folgendem Code-Stück versucht zu lösen:
Code: Alles auswählen
procedure TForm1.EditorInit;
var fo: TFontParams;
begin
fo.Name := 'Calibri';
fo.Size := 10;
fo.Color := clBlack;
fo.BkColor := clWhite;
rmEditor.SetTextAttributes(rmEditor.SelStart, rmEditor.SelLength, fo);
end;
Jetzt bekomme ich dabei immer einen Fehler:
"in Datei: .win32\win32richmemoproc.pas Zeile 321:
Result:=EffMask[VPOS];"
Diese Procedure wird in den Editor-Ereignisse OnChange, OnClick und OnKeyUp aufgerufen um immer den aktuellen Font unter dem Cursor auf das Menü zu übertragen
Code: Alles auswählen
procedure TForm1.EditorMenuPaint;
var tp : TFontParams;
al : TParaAlignment;
pn : TParaNumbering;
i : Integer;
begin
i := rmEditor.SelStart;
if i > 0 then dec(i);
rmEditor.GetTextAttributes(i, tp);
rmEditor.GetParaAlignment(i, al);
rmEditor.GetParaNumbering(i, pn);
sbBold.Down := fsBold in tp.Style;
sbItalic.Down := fsItalic in tp.Style;
sbUnderline.Down := fsUnderline in tp.Style;
sbStrikeOut.Down := fsStrikeOut in tp.Style;
sbLeft.Down := (al = paLeft);
sbCenter.Down := al = paCenter;
sbRight.Down := al = paRight;
sbJustify.Down := al = paJustify;
sbBullet.Down := pn.Style = pnBullet;
sbNumber.Down := pn.Style = pnNumber;
edForeColor.Font.Color := tp.Color;
edBackColor.Color := tp.BkColor;
edFont.Text := tp.Name;
edSize.Text := IntToStr(tp.Size);
end;
So und da wird nun wirklich Müll angezeigt, solange bis ich aktiv über das Editor-Menü etwas einstelle.
Hat da jemand eine Lösung?
LG Ronny58