Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 01.09.2009, 15:46   #1
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию сохранить в файл font

Добрый день!
Пытаюсь сделать следующее:
на panel1 формы создаются динамически timage.
На них я могу текст выводить:
timage(new).canvas.font:=f; timage(new).canvas.textout(0,0,edit 1.text);
Эти timage я в txt файл сохраняю со всеми left, with, tag и т.д.
Делаю примерно так:
Код:
//-------------
for i:=0 to panel1.controlcount-1 do
begin
writeln(f1,panel1.controls[i1].left;
//---------
end;
Вопрос: подскажите пжлста, как мне в этот txt файл font сохранить????
точнее, нужно сохранить то что в edit1.text (см. выше- textout(0,0,edit1.text)),
а также значение timage(new).canvas.font.size

Последний раз редактировалось varelik; 01.09.2009 в 15:59.
varelik вне форума
Старый 01.09.2009, 16:01   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну например сделай структуру (record), полям которой присваивай свойства фонта, а потом уже ее пиши в типированный файл.
Ясна идея?
I'm learning to live...
Stilet вне форума
Старый 01.09.2009, 16:27   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Еще можно сделать, как раньше делали в маленьких играх: Там фонт был не в формате ttf или fon, а был битным изображением, где буквы шли подряд. Когда нужно было вывести букву на канву, это изображение грузилось в память (вообще-то это делалось onCreate формы) затем вызывалась функция, которая рисовала маленький участок главного изображения FONT.bmp, в котором содержался один символ (в смысле в участке, а не в изображении). Координаты для поиска этого символа на канве искались как X:=(Ord('A')-32)*16, а Y:=(Ord('A')-32) mod 16 где 16 - размер одного символа в этом изображении. И не надо изучать структуру файла ttf или fon
Изображения
Тип файла: jpg Font_big.jpg (73.5 Кб, 99 просмотров)
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Alex Cones; 01.09.2009 в 16:32.
Alex Cones вне форума
Старый 01.09.2009, 16:33   #4
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

Stilet,
не совсем разбираюсь с record.
что-то вроде этого?:
Код:
timage1= record
--переменные-----
end;
//-----
writeln(f1,timage1.переменные);
//------
можешь написать примерно как делать? (код)
и еще: мне надо чтоб для каждого timage на форме свой текст сохранился в файл, с Вашей идеей я этого добьюсь?
varelik вне форума
Старый 01.09.2009, 17:15   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
с Вашей идеей я этого добьюсь?
Если правильно ее применишь:
Код:
type 
 r=record
  Name:string;Size:integer;color:TColor;
 end;
var fnt:r; fileOfFont:file of r;
begin
 fnt.name:=Font.Name;
 fnt.Size:=Font.Size;
 fnt.Color:=FontColor;
 .... тут мы файл открываем
write(FileOfFont,fnt);
end.
Смысл ясен? Можно конечно и сам класс фонта попробовать сохранить, но это не надежно.
I'm learning to live...
Stilet вне форума
Старый 01.09.2009, 17:39   #6
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

Stilet, спасибо, в принципе ясно.
попробую применить.
varelik вне форума
Старый 03.09.2009, 21:18   #7
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

не получается сохранить в txt файл вот это:
Код:
timage(new).canvas.textout(0,0,edit1.text);
а точнее сам текст из строки: edit1.text.
повторюсь:
компоненты timage(new) создаются по нажатию на кнопку (скока кликов по кнопке- стоко timage(new) появилось на panel1 формы).
на канве каждого timage(new) свой textout(0,0,edit1.text);
пока только этого добился (это файл куда все сохранилось):
Код:
237
206
49
32
jjj // здесь не сохранилось что надо
93
176
105
32
jjj
изначально для 1го компонента в edit1.text ccc вбил, потом для 2го jjj.
с record не выходит((
мой код:
Код:
SaveDialog1.FileName:='c:\'+form4.Edit4.Text+form4.Edit3.Text;
SaveDialog1.DefaultExt:='txt'; //сохранится с таким расширением
if SaveDialog1.Execute then
begin
assignfile(f1,SaveDialog1.FileName);
rewrite(f1); // создать новый файл
for I1 := 0 to panel1.ControlCount - 1 do
begin
writeln(f1,panel1.Controls[i1].left);
writeln(f1,panel1.Controls[i1].top);
writeln(f1,panel1.Controls[i1].width);
writeln(f1,panel1.Controls[i1].height);
 writeln(f1,form5.edit1.Text);
end;
closefile(f1);
end;

Последний раз редактировалось varelik; 03.09.2009 в 21:21.
varelik вне форума
Старый 03.09.2009, 22:46   #8
Alter
Старожил
 
Аватар для Alter
 
Регистрация: 06.08.2007
Сообщений: 2,183
По умолчанию

Давно делал модули.

Сохранение/Загрузка параметров шрифта в...
• INI файл:
Код:
unit RWFont;

interface

Uses Graphics, IniFiles;

CONST Im='FON.TEXT';
VAR Stil :String; Ini :TIniFile;

Procedure SavFontINI(Path :String; Obj :TFont);
Procedure LoadFontINI(Path :String; Obj :TFont);

implementation

Procedure SavFontINI(Path :String; Obj :TFont);
begin {Сохранение настроек шрифта}
IF Path<>'' Then
 Begin
Ini:=TiniFile.Create(Path);
 Ini.WriteInteger(Im, 'Color', Obj.Color);
 Ini.WriteInteger(Im, 'Height', Obj.Height);
 Ini.WriteString(Im, 'Name', Obj.Name);
 Ini.WriteInteger(Im, 'Pitch', Ord(Obj.Pitch));
 Ini.WriteInteger(Im, 'PixelsPerInch', Obj.PixelsPerInch);
 Ini.WriteInteger(Im, 'Size', Obj.Size);
 Stil:='';
{Начало СТИЛЬ}
 IF(fsBold in Obj.Style)Then Stil:=Stil+'1' ELSE
  Stil:=Stil+'0';
 IF(fsItalic in obj.Style)Then Stil:=Stil+'1' ELSE
  Stil:=Stil+'0';
 IF(fsUnderline in obj.Style)Then Stil:=Stil+'1' ELSE
  Stil:=Stil+'0';
 IF(fsStrikeout in obj.Style)Then Stil:=Stil+'1' ELSE
  Stil:=Stil+'0';
Ini.WriteString(Im, 'Style', Stil);
{Конец СТИЛЬ}
Ini.Free;
  End;
end;

Procedure LoadFontINI(Path :String; Obj :TFont);
begin {Загрузка настроек шрифта}
 IF Path<>'' Then
  Begin
Ini:=TiniFile.Create(Path);
 Obj.Color:=Ini.ReadInteger(Im, 'Color', clWindowText);
 Obj.Height:=Ini.ReadInteger(Im, 'Height', -12);
 Obj.Name:=Ini.ReadString(Im, 'Name', 'MS Sans Serif');
 Obj.Pitch:=TFontPitch( Ini.ReadInteger(Im, 'Pitch', Ord(fpDefault)) );
 Obj.PixelsPerInch:=Ini.ReadInteger(Im, 'PixelsPerInch', Obj.PixelsPerInch);
 Obj.Size:=Ini.ReadInteger(Im, 'Size', 10);
{Начало СТИЛЬ}
Stil:=Ini.ReadString(Im, 'Style', '0000');
IF Length(Stil)>0 Then
   begin
 Obj.Style:=[];
 If Stil[1]='1' then Obj.Style:=Obj.Style+[fsBold];
 If Stil[2]='1' then Obj.Style:=Obj.Style+[fsItalic];
 If Stil[3]='1' then Obj.Style:=Obj.Style+[fsUnderline];
 If Stil[4]='1' then Obj.Style:=Obj.Style+[fsStrikeout];
   end;
{Конец СТИЛЬ}
Ini.Free;
  End;
end;

end.
• Типизированный файл:
Код:
unit RWFontF;

interface

Uses Graphics, Dialogs, SysUtils;

Type Fon=RECORD
Color :Integer;
Height :Integer;
Name :STRING[255];
Pitch :Integer;
PixelsPerInch :Integer;
Size :Integer;
Style :STRING[5];
END;

VAR Stil :String; F :File of Fon; Fo :Fon;

Procedure SavFontF(Path :String; Obj :TFont);
Procedure LoadFontF(Path :String; Obj :TFont);

implementation

Procedure SavFontF(Path :String; Obj :TFont);
begin {Сохранение настроек шрифта}
IF Path<>'' Then
 Begin
AssignFile(F, Path);
 {$I-}
Rewrite(F);
 {$I+}
IF IOResult=0 Then
    begin
 Fo.Color:=Obj.Color;
 Fo.Height:=Obj.Height;
 Fo.Name:=Obj.Name;
 Fo.Pitch:=Ord(Obj.Pitch);
 Fo.PixelsPerInch:=Obj.PixelsPerInch;
 Fo.Size:=Obj.Size;
    Stil:='';
{Начало СТИЛЬ}
 IF(fsBold in Obj.Style)Then Stil:=Stil+'1' ELSE
  Stil:=Stil+'0';
 IF(fsItalic in obj.Style)Then Stil:=Stil+'1' ELSE
  Stil:=Stil+'0';
 IF(fsUnderline in obj.Style)Then Stil:=Stil+'1' ELSE
  Stil:=Stil+'0';
 IF(fsStrikeout in obj.Style)Then Stil:=Stil+'1' ELSE
  Stil:=Stil+'0';
 Fo.Style:=Stil; //СТИЛЬ
{Конец СТИЛЬ}
 WRITE(F, Fo);
CloseFile(F);
   end ELSE begin ShowMessage('Ошибка сохранения!');EXIT; end;
  End;
end;

Procedure LoadFontF(Path :String; Obj :TFont);
begin {Загрузка настроек шрифта}
 IF Path<>'' Then
  Begin           //Path
Assign(F, Path);
 {$I-}
Reset(F);
 {$I+}
IF IOResult=0 Then
    Begin         //IOResult
   Stil:='';
REPEAT
 READ(F, Fo);
Obj.Color:=Fo.Color;
Obj.Height:=Fo.Height;
Obj.Name:=Fo.Name;
Obj.Pitch:=TFontPitch(Fo.Pitch);
Obj.PixelsPerInch:=Fo.PixelsPerInch;
Obj.Size:=Fo.Size;
 Stil:=Fo.Style;
UNTIL EOF(F);
{Начало СТИЛЬ}
IF Length(Stil)>0 Then
   begin
 Obj.Style:=[];
 If Stil[1]='1' then Obj.Style:=Obj.Style+[fsBold];
 If Stil[2]='1' then Obj.Style:=Obj.Style+[fsItalic];
 If Stil[3]='1' then Obj.Style:=Obj.Style+[fsUnderline];
 If Stil[4]='1' then Obj.Style:=Obj.Style+[fsStrikeout];
   end;
{Конец СТИЛЬ}
CloseFile(F);
    End ELSE
      begin
       ShowMessage('Файл: "'+ExtractFileName(Path)+
       '" несуществует и будет '+#13'создан по закрытию программы.');
      end;//IOresult
  End; //Path
end;

end.

Последний раз редактировалось Alter; 03.09.2009 в 22:49.
Alter вне форума
Старый 03.09.2009, 23:50   #9
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

Alter,
на днях потестирую, сенкс
varelik вне форума
Старый 06.09.2009, 21:48   #10
varelik
Форумчанин
 
Регистрация: 21.08.2009
Сообщений: 140
По умолчанию

все, закрываю тему, ибо разобрался. все оказалось проще чем казалось.
создал потомка от тимагера, добавил свойство для хранения текста.
в цикле writeln(f1,timage1(new).свойство);
а вот new:=panel1.Controls[i1];
всем спасибо за внимание
varelik вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как сохранить из memo в файл? RAVAL)) Общие вопросы Delphi 8 15.01.2013 18:09
Сохранить в файл из listbox cemen13 Общие вопросы Delphi 4 07.09.2009 17:15
Сохранить БД в новый файл ganiebal БД в Delphi 6 01.09.2009 10:20
Сохранить графический файл NSvirus Паскаль, Turbo Pascal, PascalABC.NET 1 05.05.2009 04:11
файл сохранить на Хостенге atlon Общие вопросы C/C++ 3 10.02.2009 21:04