Nasıl olmayan bir yazı tipi belirli bir karakter değiştirirken TRichEdit WordPad gibi davranır Windows 7 yapmak için?
Yardımı ile Sertac Akyuz
, öyle görünüyor ki doğrudan bir sebep ile ilgili, karakter kümesi \bullet
: benim yerelleştirilmiş Windows, \bullet
giriş yazarak Alt(0149) her zaman alır \fcharset134
ve değiştirmeye çalışır, kendi yazı tipi ile EM_SETCHARFORMAT
Her zaman başarısız (iyi, rengi, boyutu, stil de değişti ama yazı tipi ailesi adı).
En basit çözüm bu nedenle ilk karakter sıfırlama ve sonra yazı tipini değiştirmek.
Not: RichEdit(sürüm >= 4.1)kullanılmalıdır!
Not: bulunabilir RichEdit sürümleri MSDN About Rich Edit Controls, Sargent Murray değil MSDN Blog RichEdit versions RichEdit Versions Update to 7.0. İkinci sayfa RichEdit 4.1 sürümlerinde daha yüksek bahsetti. Bir test olarak, riched20.dll Office 2010 ile shiped birlikte bir cazibe gibi Windows için uygulama ile her şey çalışıyor 2000 ve kopyaladım!
procedure TMainForm.ButtonFontClick(Sender: TObject);
var
format: TCharFormat2;
begin
if dlgFontCdxTxt.Execute then
begin
FillChar(format, sizeof(format), 0);
format.cbSize:= Sizeof(format);
format.dwMask:= CFM_CHARSET;
format.bCharSet := 1; // or 0;
redtTextBlock.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Integer(@format));
FillChar(format, sizeof(format), 0);
format.cbSize:= Sizeof(format);
format.dwMask:= CFM_FACE;
StrPLCopy(format.szFaceName, dlgFontCdxTxt.Font.Name, High(format.szFaceName));
redtTextBlock.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Integer(@format));
end;
redtTextBlock.SetFocus;
end;
==================================================
22*, WordPad
*kullanılan göre Microsoft RichEdit
kontrolü, Windows 95, 98 ve Windows 2000, sırasıyla, sürüm 1.0, 2.0 ve 3.0. Windows XP SP1 ve sonraki, Windows WordPad dahil olmak üzere 4.1, RichEdit 7 kullanır.
Demek rtf belgesi, WordPad düzenlenmekte, metin olmayan karakter Alt(0149), the bullet dot •
içerir. (Ya Da U 2022)
Windows 2000 SP4 veya SP2, bu merminin font XP nokta sadece WordPad varsayılan yazı tipi alabilir. Yani, değiştiremezsin o kurşun için yazı tipi WordPad ile interaktif bir nokta.
Ancak, Windows 7 SP1, 13**, ve sonra istediğiniz yazı tipi sınırsız times için yazı tipini değiştirebilir.
Ayrıca, WordPad belge nokta farklı yazı tipleri içeren Windows WordPad 7 kullanılarak oluşturulan ve doğru Windows 2000 veya XP WordPad ile açılabilir.
Bu TRichEdit (Delphi TEKNOLOJİ, Windows 7) de açık ve WordPad belge Windows 7'de WordPad doğru TRichEdit.Lines.LoadFromFile
tarafından oluşturulan görünüm.
Etkileşimli olarak, TRichEdit (Windows 7 Delphi TEKNOLOJİ) the bullet dot
sağlar'In yazı tipi değiştirilecek "". Arial Unicode MS Ancak, bir diğer yazı tipleri için TRichEdit etkileşimli olarak değiştirin.
Bu nedenle (1) ve Windows 7'de WordPad farklı davranışın sebebi (2) TRichEdit hem davranmasını sağlamak için mümkün olup olmadığını merak ediyorum?
PS: Alt türü(0149) birkaç kez gerekebilir edilmelidir WordPad nokta almak için. Yazarak 2022 ve Alt x her zaman önerilen here gibi çalışır.
PS: "Why TFontDialog gives less fonts than Screen.Fonts? . cevabı belirtildiği gibi WordPad" yazı tiplerini etkinleştirmek için Bir ihtiyaç
PS: her zaman Kelime değişik yazı tiplerini nokta değiştirebilirsin.
örnek.rtf (düz metin dosyasına yapıştırın ve uzantısını kullanmak için rtf değiştirin)
{\rtf1\ansi\ansicpg936\deff0\deflang1033\deflangfe2052{\fonttbl{\f0\fswiss\fprq2\fcharset134 Arial Unicode MS;}{\f1\fnil\fcharset0 Arial Unicode MS;}{\f2\froman\fprq2\fcharset0 Times New Roman;}{\f3\fscript\fprq2\fcharset0 Comic Sans MS;}{\f4\fnil\fcharset0 Comic Sans MS;}{\f5\fmodern\fprq1\fcharset0 Consolas;}{\f6\fnil\fcharset0 Consolas;}{\f7\fmodern\fprq1\fcharset0 Lucida Console;}{\f8\fnil\fcharset0 Lucida Console;}{\f9\froman\fprq2\fcharset2 Symbol;}{\f10\froman\fprq2\fcharset0 Symbol;}{\f11\fnil\fcharset134 \'cb\'ce\'cc\'e5;}}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\sa200\sl276\slmult1\lang2052\f0\fs22 Arial sample text \lang1033\f1\bullet\f2\par
\b\f3 Comic sample text \f4\bullet\f2\par
\b0\f5 Consolas sample text \f6\bullet\f2\par
\f7 Lucida sample text \f8\bullet\f2\par
\pard\nowidctlpar\qj\lang2052\f9 symbl sample text \lang1033\f10\u149?\kerning2\fs21\par
\pard\sa200\sl276\slmult1\lang2052\kerning0\f11\fs22\par
}
uMainForm.dpc TRichEdit hatları biçimini görüntülemek için kullanılır
object MainForm: TMainForm
Left = 0
Top = 0
Caption = 'MainForm'
ClientHeight = 362
ClientWidth = 637
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
OldCreateOrder = False
OnCreate = FormCreate
PixelsPerInch = 96
TextHeight = 13
object pnlBtn: TPanel
Left = 0
Top = 0
Width = 637
Height = 57
Align = alTop
Caption = 'pnlBtn'
TabOrder = 0
object Button1: TButton
Left = 240
Top = 14
Width = 137
Height = 31
Caption = 'Analyze Rich Edit'
TabOrder = 0
OnClick = Button1Click
end
end
object pnlClient: TPanel
Left = 0
Top = 57
Width = 637
Height = 305
Align = alClient
Caption = 'pnlClient'
TabOrder = 1
object redtTextBlock: TRichEdit
Left = 1
Top = 1
Width = 225
Height = 303
Align = alLeft
Font.Charset = GB2312_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Lines.Strings = (
'redt1')
ParentFont = False
TabOrder = 0
end
object mmo1: TMemo
Left = 226
Top = 1
Width = 410
Height = 303
Align = alClient
Lines.Strings = (
'mmo1')
TabOrder = 1
end
end
object Button2: TButton
Left = 36
Top = 14
Width = 171
Height = 31
Caption = 'Font...'
TabOrder = 2
OnClick = Button2Click
end
object dlgFontCdxTxt: TFontDialog
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'Tahoma'
Font.Style = []
Left = 480
Top = 16
end
end
uMainForm.TRichEdit hatları biçimini görüntülemek için pas
unit uMainForm;
interface
uses
Contnrs,
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, ExtCtrls;
type
TCdxmlStyle = class
public
FontName: string;
Str: string;
end;
TCdxmlText = class
public
Styles: TObjectList;
constructor Create;
end;
TMainForm = class(TForm)
redtTextBlock: TRichEdit;
mmo1: TMemo;
pnlBtn: TPanel;
pnlClient: TPanel;
Button1: TButton;
Button2: TButton;
dlgFontCdxTxt: TFontDialog;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
procedure TestLoadFromFile;
procedure AnalyzeRichEdit;
public
{ Public declarations }
end;
var
MainForm: TMainForm;
implementation
{$R *.dfm}
uses
RichEdit, StrUtils;
{ TCdxmlText }
constructor TCdxmlText.Create;
begin
Styles := TObjectList.Create;
end;
var
l_HiddenRichEdit: TRichEdit;
{ TMainForm }
procedure TMainForm.FormCreate(Sender: TObject);
begin
TestLoadFromFile;
AnalyzeRichEdit;
end;
procedure TMainForm.Button2Click(Sender: TObject);
var
format: TCharFormat2;
begin
if dlgFontCdxTxt.Execute then
begin
FillChar(format, sizeof(format), 0);
format.cbSize:= Sizeof(format);
format.dwMask:= CFM_FACE;
StrPLCopy(format.szFaceName, dlgFontCdxTxt.Font.Name, High(format.szFaceName));
redtTextBlock.Perform(EM_SETCHARFORMAT, SCF_SELECTION, Integer(@format));
end;
redtTextBlock.SetFocus;
end;
procedure TMainForm.Button1Click(Sender: TObject);
begin
AnalyzeRichEdit;
end;
procedure TMainForm.TestLoadFromFile;
begin
redtTextBlock.Clear;
redtTextBlock.Lines.LoadFromFile('sample.rtf');
end;
procedure TMainForm.AnalyzeRichEdit;
var
l_MemStream: TMemoryStream;
l_Format: TCharFormat2;
I, J: Integer;
l_CdxmlStyle, l_CdxmlStyleWorker: TCdxmlStyle;
l_StyleFont: string;
l_CdxmlText: TCdxmlText;
begin
l_CdxmlStyle := nil;
l_CdxmlStyleWorker := nil;
mmo1.Clear;
l_MemStream := TMemoryStream.Create;
redtTextBlock.Lines.SaveToStream(l_MemStream);
l_MemStream.Seek(0, soFromBeginning);
l_HiddenRichEdit.Lines.LoadFromStream(l_MemStream);
l_CdxmlText := TCdxmlText.Create;
for I := 0 to Length(TrimRight(l_HiddenRichEdit.Text)) - 1 do
begin
l_CdxmlStyleWorker := TCdxmlStyle.Create;
FillChar(l_Format, sizeof(l_Format), 0);
l_Format.cbSize:= Sizeof(l_Format);
l_Format.dwMask:= CFM_FACE;
l_HiddenRichEdit.SelStart := I;
l_HiddenRichEdit.SelLength := 1;
l_HiddenRichEdit.Perform(EM_GETCHARFORMAT, SCF_SELECTION, Integer(@l_Format));
l_CdxmlStyleWorker.FontName := l_Format.szFaceName;
l_CdxmlStyleWorker.Str := AnsiReplaceStr(l_HiddenRichEdit.SelText, #13, #13#10);
if l_CdxmlStyle = nil then
begin
l_CdxmlText.Styles.Add(l_CdxmlStyleWorker);
l_CdxmlStyle := l_CdxmlStyleWorker;
end
else if (l_CdxmlStyleWorker.FontName <> l_CdxmlStyle.FontName ) then
begin
l_CdxmlText.Styles.Add(l_CdxmlStyleWorker);
l_CdxmlStyle := l_CdxmlStyleWorker;
end
else
begin
l_CdxmlStyle.Str := l_CdxmlStyle.Str l_CdxmlStyleWorker.Str;
end;
end;
for I := 0 to l_CdxmlText.Styles.Count - 1 do
begin
l_CdxmlStyle := TCdxmlStyle(l_CdxmlText.Styles[I]);
mmo1.Lines.Add(l_CdxmlStyle.Str ':' l_CdxmlStyle.FontName);
end;
end;
initialization
l_HiddenRichEdit := TRichEdit.CreateParented(HWND_MESSAGE);
end.
CEVAP
Oracle JVM ile bu sorun düzeltildi ve Java 7 update 80'de çıkacak.
Peki eğer kendi cevap kabul edeceğiz değil mi eğer bunu belki kabul edersin. En azından sıfır cevap bir soru için daha fazla trafik daha fazla çekme olmaz.
Nasıl bir web sitesi için standart olm...
Nasıl benim yazı tipi kalın css kullan...
Nasıl benim GUI Windows yazı tipi Ölçe...
Nasıl Java metin editörleri için Eclip...
Nasıl Seri % Gibi SQL yapmak için?...