|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Как сохранить стиль шрифта?
Ребята, подскажите как сохранить стиль шрифта (жирный, курсив и т.д)? Я пишу текстовый редактор, уже научился сохранять сам шрифт и его размер. Все данные о шрифте хранятся у меня в ini-файле. Заранее благодарен.
|
#2
|
||||
|
||||
Вот пример из DRKB
Код:
uses...Registry; procedure SaveFontToRegistry(Font: TFont; SubKey: string); var R: TRegistry; FontStyleInt: byte; FS: TFontStyles; begin R := TRegistry.Create; try FS := Font.Style; Move(FS, FontStyleInt, 1); R.OpenKey(SubKey, True); R.WriteString('Font Name', Font.Name); R.WriteInteger('Color', Font.Color); R.WriteInteger('CharSet', Font.Charset); R.WriteInteger('Size', Font.Size); R.WriteInteger('Style', FontStyleInt); finally R.Free; end; end; function ReadFontFromRegistry(Font: TFont; SubKey: string): boolean; var R: TRegistry; FontStyleInt: byte; FS: TFontStyles; begin R := TRegistry.Create; try result := R.OpenKey(SubKey, false); if not result then exit; Font.Name := R.ReadString('Font Name'); Font.Color := R.ReadInteger('Color'); Font.Charset := R.ReadInteger('CharSet'); Font.Size := R.ReadInteger('Size'); FontStyleInt := R.ReadInteger('Style'); Move(FontStyleInt, FS, 1); Font.Style := FS; finally R.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin if FontDialog1.Execute then begin SaveFontToRegistry(FontDialog1.Font, 'Delphi Kingdom\Fonts'); end; end; procedure TForm1.Button2Click(Sender: TObject); var NFont: TFont; begin NFont := TFont.Create; if ReadFontFromRegistry(NFont, 'Delphi Kingdom\Fonts') then begin //здесь добавить проверку - существует ли шрифт Label1.Font.Assign(NFont); NFont.Free; end; end; |
#3
|
||||
|
||||
Вот еще один
Код:
function FontToStr(font: TFont): string; procedure yes(var str: string); begin str := str + 'y'; end; procedure no(var str: string); begin str := str + 'n'; end; begin {кодируем все атрибуты TFont в строку} Result := ''; Result := Result + IntToStr(font.Color) + '|'; Result := Result + IntToStr(font.Height) + '|'; Result := Result + font.Name + '|'; Result := Result + IntToStr(Ord(font.Pitch)) + '|'; Result := Result + IntToStr(font.PixelsPerInch) + '|'; Result := Result + IntToStr(font.size) + '|'; if fsBold in font.style then yes(Result) else no(Result); if fsItalic in font.style then yes(Result) else no(Result); if fsUnderline in font.style then yes(Result) else no(Result); if fsStrikeout in font.style then yes(Result) else no(Result); end; procedure StrToFont(str: string; font: TFont); begin if str = '' then Exit; font.Color := StrToInt(tok('|', str)); font.Height := StrToInt(tok('|', str)); font.Name := tok('|', str); font.Pitch := TFontPitch(StrToInt(tok('|', str))); font.PixelsPerInch := StrToInt(tok('|', str)); font.Size := StrToInt(tok('|', str)); font.Style := []; if str[0] = 'y' then font.Style := font.Style + [fsBold]; if str[1] = 'y' then font.Style := font.Style + [fsItalic]; if str[2] = 'y' then font.Style := font.Style + [fsUnderline]; if str[3] = 'y' then font.Style := font.Style + [fsStrikeout]; end; function tok(sep: string; var s: string): string; function isoneof(c, s: string): Boolean; var iTmp: integer; begin Result := False; for iTmp := 1 to Length(s) do begin if c = Copy(s, iTmp, 1) then begin Result := True; Exit; end; end; end; var c, t: string; begin if s = '' then begin Result := s; Exit; end; c := Copy(s, 1, 1); while isoneof(c, sep) do begin s := Copy(s, 2, Length(s) - 1); c := Copy(s, 1, 1); end; t := ''; while (not isoneof(c, sep)) and (s '') do begin t := t + c; s := Copy(s, 2, length(s) - 1); c := Copy(s, 1, 1); end; Result := t; end; |
#4
|
||||
|
||||
Списибо, вам! Ваш moo2k
|