Блокнот Графомана

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

Под XP диалог выбора шрифтов не находит ни одного шрифта. можно ли как-то подсунуть ему стандартную папку?
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Re: Блокнот Графомана

Сообщение pupsik »

можно ли как-то подсунуть ему стандартную папку?
системной библиотеке?
можно ли как-то
сделать свой диалог выбора шрифтов.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

pupsik, что ж... видимо, придется(((
pupsik
энтузиаст
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13
Контактная информация:

Re: Блокнот Графомана

Сообщение pupsik »

можете ещё посмотреть что там в сис. вызовах намутили. Т.е. передача параметров в диалог.

Кстати: у меня, иной раз, диалог открытия (при дебагере) крякозяблами ругался....
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

pupsik, возможно, дело в том, что я переопределяю этот диалог, чтобы не вводить лишние параметры при рунтаймовом запуске. Хотя не должно бы влиять... под семеркой никаких проблем, а вот в хр требует папку в панели управления.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

непонятка с procedure LoadFromFile(const FileName: string; AEncoding: TEncoding); overload; virtual;
Не пойму как установить кодировку. текста.
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

Все, с основным нужным мне функционалом разобрался. Далее только дополнительные фишки и плюшки. В принципе, это уже можно будет считать версией 1.0.0
В этой версии уже есть поддержка rtf.
Скорее всего, завтра около обеда буду сливать в репозитарий.
Из отсутствующего важного -- возможность печати.

Добавлено спустя 17 часов 54 минуты 53 секунды:
Решил проверить на утечку памяти и заметил, что программа течет как дуршлаг(((

Почти избавился, но у меня все-равно остались несколько ошибок.

Код: Выделить всё

initialization
 FormRegister:=TFormRegister.create;//<---указывает сюда
 // иначе нет смысла
 INIPropStorage1:=TINIPropStorage.Create(nil);
 EditorFont:=TFont.Create;
 ProgFont:=TFont.Create;// освобождение при финише ведет к ошибке!

 FontLst:= TStringList.Create;
 LoadFontList;
 LoadSetting;
finalization
 FreeAndNil(FormRegister);//финализация регистратора
 //сохранение настроек сессии
 SaveSetting;
 FreeAndNil(FontLst);
 INIPropStorage1.Free;
 FreeAndNil(ProgFont);
 FreeAndNil(EditorFont);
end.                   

Код: Выделить всё

constructor TFormRegister.create;
begin
  dic:=TFormDictionary.create;//<---указывает сюда
end;       


ну и пару неправильно сработавших завершений модуля сделанных типа этого.

Код: Выделить всё

initialization
  {$I styles.lrs}
  FormData:=FormRegister.GetDefaultFormData;
 FormData.FormCreateProc:=@CreateFStyle;
 FormData.HumanReadableFormName:=rsStyleFormName;
 FormRegister.RegisterForm('FStyle',FormData);//<---указывает сюда
finalization
  FormRegister.UnRegisterForm('FStyle',FormData);
  FormData.HumanReadableFormName:='';
  FormData.FormName:='';
  FormData.FormCreateProc:=nil;
end.                                       


может, я конечно, что-то неправильно указал...

полный выхлоп утечек

Код: Выделить всё

---------------------------
Error
---------------------------
Heap dump by heaptrc unit
57948 memory blocks allocated : 5861599/6022224
57944 memory blocks freed     : 5861096/6021712
4 unfreed memory blocks : 503
True heap size : 950272 (80 used in System startup)
True free heap : 949376
Should be : 949424
Call trace for block $035300C8 size 392
  $0042E756  TOPENADDRESSING$4$CRC99FE3619__REHASH,  line 363 of inc/generics.dictionaries.inc
  $0042E680  TOPENADDRESSING$4$CRC99FE3619__PREPAREADDINGITEM,  line 230 of inc/generics.dictionaries.inc
  $0042E966  TOPENADDRESSING$4$CRC99FE3619__DOADD,  line 275 of inc/generics.dictionaries.inc
  $00430570  TFORMREGISTER__REGISTERFORM,  line 307 of global.pas
  $0062BCD9  STYLES_$$_init$,  line 150 of styles.pas
  $0040FD16
  $0064210D
  $0061E2AE
Call trace for block $0355FB30 size 21
  $00456083
  $00430553  TFORMREGISTER__REGISTERFORM,  line 307 of global.pas
  $00628FF8  VIRTKEYBOARD_$$_init$,  line 1087 of virtkeyboard.pas
  $0040FD16
  $0057B809
  $0057AF1C
  $0057A839
  $0057ABC5
Call trace for bl
--------------------------
ОК   
---------------------------
---------------------------
Error
---------------------------
Call trace for block $0  $0057B334
  $0057A839
  $0057ABC5
  $0057AA86
  $0057A6F3
  $00642079
  $0061E2AE
  $0040FD16
Call trace for block $000D7918 size 48
  $004303E0  TFORMREGISTER__CREATE,  line 289 of global.pas
  $00430698  GLOBAL_$$_init$,  line 324 of global.pas
  $0040FD16
---------------------------
ОК   
---------------------------


Добавлено спустя 7 часов 56 минут 56 секунд:
Вопрос решен. Всего лишь неправильная директива у деструктора.

теперь не знаю как правильно преобразовать fparams в TFont.

Добавлено спустя 16 часов 26 минут 50 секунд:
Все, от утечек память вроде бы избавился...
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

Что я делаю не так?

Код: Выделить всё

procedure F_Save;
begin
  case FMain.ComboLangCodePage.ItemIndex of
    3:FEditors.Editors.Lines.SaveToFile(MyFile, FEditors.Encode.ANSI);
    //Txt:=utf8tocp1251(FEditors.Editors.Lines.Text);
    2:FEditors.Editors.Lines.SaveToFile(MyFile, FEditors.Encode.UTF8);
      //Txt := FEditors.Editors.Lines.Text;
    1:FEditors.Editors.Lines.SaveToFile(MyFile, FEditors.Encode.GetEncoding('KOI8'));//<<<---------косяк явно здесь
      //txt := utf8toKOI8(FEditors.Editors.Lines.Text);
    0:FEditors.Editors.Lines.SaveToFile(MyFile, FEditors.Encode.GetEncoding('CP866'));//<<<---------и здесь
      //Txt := utf8toCP866 (FEditors.Editors.Lines.Text);
    4:FEditors.SaveFTR(Utf8ToAnsi(MyFile));
   end;
 end; 

Если в выхлопе на утечки выдает

Код: Выделить всё

---------------------------
Error
---------------------------
Heap dump by heaptrc unit

181378 memory blocks allocated : 21741669/22302576

181375 memory blocks freed     : 21741597/22302504

3 unfreed memory blocks : 72

True heap size : 1474560 (80 used in System startup)

True free heap : 1474192

Should be : 1474216

Call trace for block $02609320 size 24

  $0046063A

  $00432074  F_SAVE,  line 181 of main.pas

  $004345EF  MENUSAVEASCLICK,  line 689 of main.pas

  $00557944  CLICK,  line 83 of include/menuitem.inc

  $005580B5  DOCLICKED,  line 280 of include/menuitem.inc

  $0040DDF3

  $005084E9  WINDOWPROC,  line 2676 of win32/win32callback.inc

  $0060B211  CUSTOMFORMWNDPROC,  line 386 of win32/win32wsforms.pp

Call trace for block $025F9010 size 24

  $0046063A

  $00432016  F_SAVE,  line 179 of main.pas

  $004345EF  MENUSAVEASCLICK,  line 689 of main.pas

  $00557944  CLICK,  line 83 of include/menuitem.inc

  $005580B5  DOCLICKED,  line 280 of include/menuitem.inc

  $0040DDF3

  $005084E9  WINDOWPROC,  line 2676 of win32/win32callback.inc

  $0060B211  C
---------------------------
ОК   
---------------------------


При этом, перекодирование текста происходит нормально.

Добавлено спустя 1 час 54 минуты 32 секунды:
Один косяк нашел. 'FEditors.Encode' заменил на 'TEncoding'. Ну и, естественно, убрал лишнюю переменную.

Это убрало две утечки? Но одно место осталось

Код: Выделить всё

 1:FEditors.Editors.Lines.SaveToFile(MyFile, TEncoding.GetEncoding('KOI8')); 
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Блокнот Графомана

Сообщение zub »

FEditors.Encode.GetEncoding - создает класс типа TEncoding. ты его попользовал и отпустил утекать. Надо уничтожить
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

zub, это я понял... не понял как именно его освободить... тем более, что FEditors.Encode я уже убрал. Использовать freeInstant?
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Блокнот Графомана

Сообщение zub »

запомнить TEncoding.GetEncoding('KOI8') в переменной, потом уничтожить
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

zub, спасибо, помогло.

Кстати, может, подскажешь какие кодировки еще стоит добавить?
zub
долгожитель
Сообщения: 2889
Зарегистрирован: 14.11.2005 22:51:26
Контактная информация:

Re: Блокнот Графомана

Сообщение zub »

По мне - никакие
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

Попытался реализовать вставку картинок примерно так...

Код: Выделить всё

....
procedure TFEditors.InsertImage(const FileName: string; const AImgSize: TSize);
Var
  Res:Boolean;
  APos:Integer;
begin
     APos:=Edit.FEditors.Editors.SelStart;
  Res:=InsertImageFromFile(Edit.FEditors.Editors, APos, FileName,AImgSize);
end;
.....
procedure TFImages.BtInsertImagesClick(Sender: TObject);
Var
 Size:TSize;
begin
     Size.cx:=SpinX.Value;
     Size.cy:=SpinY.Value;
     Edit.FEditors.InsertImage(OpenPictureDialog1.FileName, Size);
end;

Но, почему-то вставляет как иконку, хотя размер захватывает сколько потребуешь... Как-то это можно исправить?
Аватара пользователя
Лекс Айрин
долгожитель
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград
Контактная информация:

Re: Блокнот Графомана

Сообщение Лекс Айрин »

Нашел, почему не работает. InsertImageFromFile, оказывается, заглушка(((
Ответить