Перейти к содержанию

Вадим Смоленский

Пользователи
  • Активность

    205
  • Зарегистрирован

  • Посещение

  • Победитель дней

    5

Вадим Смоленский стал победителем дня 3 декабря 2018

Вадим Смоленский имел наиболее популярный контент!

Информация о Вадим Смоленский

  • Звание
    Продвинутый пользователь

Посетители профиля

Блок последних пользователей отключён и не показывается другим пользователям.

  1. Здесь, к сожалению, никто проблемой не заинтересовался. Пришлось обратиться на experts-exchange.com, и тамошние специалисты подтвердили мою догадку: виноват размер файла со шрифтом (17.2 Mb). Такие файлы не лезут в ресурсы в рамках IDE, но есть обходной путь. Кому интересно, вот ссылка, там все инструкции: https://www.experts-exchange.com/questions/29204716/Adding-a-huge-font-file-to-Delphi-resources.html Выяснилось также, что шрифт вовсе не обязательно запихивать в ресурсы, можно просто добавить файл в deployment и установить непосредственно из файла: AddFontResource(PChar('MyFont.ttf')); SendMessage(FormToHWND(MainForm),WM_FONTCHANGE,0,0); Говорят, что важно еще не забыть этот шрифт в конце убрать: RemoveFontResource(PChar('MyFont.ttf')); SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); У меня всё заработало.
  2. Пишу для Windows, но в данном случае это, наверное, неважно. Засовываю в ресурсы несколько кастомных шрифтов, и лишь один из них упорно сопротивляется. Обычный шрифт из интернета, в систему устанавливается, функционирует нормально, только в ресурсы не хочет. Цепляю в зазипованном виде - может, кто-нибудь сможет подсказать, что с ним не так. Можно даже создать новый пустой проект, добавить этот шрифт, вызвать проверку синтаксиса, и результат будет такой: "brcc32" exited with code 1 KanjiStrokeOrders_v4.004.zip
  3. Значит, так и сделаем. TWebBrowser в моем приложении уже используется. Под Windows это не так критично. Все минусы будут связаны разве что с дизайном и эстетикой. Края там не поменять.
  4. Тогда, может быть, самым надежным и простым вариантом будет выводить видео в TWebBrowser?
  5. Мне, безусловно, нужно ехать, просто до сей поры удавалось обходиться без сторонних компонентов. Довольно странно, что в Delphi нет нормальной поддержки такой востребованной функции, как воспроизведение видео. Так что же, порекомендуете PasLibVlc? Или есть что-нибудь еще достойное внимания?
  6. Простите, не понял. На моем компьютере mp4-файлы прекрасно проигрываются другими приложениями - например, Windows Media Player. Разве это не означает, что соответствующий кодек установлен?
  7. Отчего-то, если задать TMediaPlayer.FileName с расширением "mp4", то уже при запуске приложение валится с сообщением "Unsupported media file". Причем в секции initialization юнита FMX.Media.Win присутствует и при запуске отрабатывает такой оператор: TMediaCodecManager.RegisterMediaCodecClass('.mp4', SVMP4Files, TMediaType.Video, TWindowsMediaCodec); Запускаю под Windows. Файлы *.avi проигрываются без проблем
  8. Никто не помог ни здесь, ни на Experts Exchange. После долгих мытарств все-таки нашел решение сам. Оказалось достаточным перед вызовом Locate сделать такую штуку: FDConnection.ResourceOptions.PreprocessCmdText:=True А после вызова вернуть обратно в False. Собственно, PreprocessCmdText как раз и устанавливает перечисленные выше пять свойств (EscapeExpand, MacroCreate и т.д.) одним махом либо в True, либо в False. Но почему-то, когда эти свойства были установлены в Object Inspector, ни черта не работало. А такой вот динамический фокус помог. Скорость, по сравнению с Filter, возросла вдвое.
  9. Проблема обозначена в заголовке. Подробнее: при дефолтных установках TFDConnection.ResourceOption (включенных EscapeExpand, MacroCreate, MacroExpand, ParamCreate, ParamExpand) функция Locate возвращает False. При отключении этих параметров Locate падает с сообщением "Unrecognized token {" Вынужден вместо Locate использовать Filter, очень сильно проигрывая в скорости. Хотелось бы все-таки понять, в чем тут дело.
  10. Наверное, детский вопрос задам, и все-таки. Вдруг обнаружил, что в моем проекте никакие блоки try...except не срабатывают. Видимо, дело в каких-то настройках — но в каких именно? Иду в Options => Debugger Options => Embarcadero Debuggers => Native OS Exceptions, пробую там менять установки, толку никакого. Более того — пытаюсь искусственно спровоцировать падение делением на ноль — и вообще никакого падения не происходит, деление на ноль дает ноль! Такая же примерно ерунда с попыткой устроить переполнение. Ткните меня в причину носом кто-нибудь, пожалуйста. UPD Через два дня хаотичных экспериментов с настройками всё прочихалось, и exceptions благополучно работают. В чем было дело, так и не понял.
  11. У одного из тестировщиков, под Windows, моя сборка регулярно падает с такой ошибкой: Cannot create rendering target for 'TCanvas2D2' В свое время я и сам с этим сталкивался. У себя поборол уменьшением размеров всех TBitmap ниже некоторого предела. Померили максимальный размер TBitmap на компьютере тестировщика функцией TCanvasManager.DefaultCanvas.GetAttribute(TCanvasAttribute.MaxBitmapSize), получилось 8192. На моем компьютере столько же — однако у него падает, а у меня нет. Причем падает не при отрисовке изображения, а уже потом, при каких-то случайных действиях, с отрисовкой не связанных. Всякий раз непредсказуемо. Но он заметил, что если на форму выведено больше крупных изображений, то падает быстрее. Как это трактовать и что с этим делать?
  12. Да, я это видел, конечно. Но очень плохо растолковано. Какое из этих значений соответствует монохромному изображению? L, может быть? И как именно этот формат выставлять? У TBitmap это свойство Read-only.
  13. Имею в своем проекте огромный невидимый TImage, из которого при необходимости вырезаются те или иные кусочки и показываются пользователям. Так оказалось сделать удобнее, чем хранить эти кусочки в БД. Изображение монохромное, из черных и белых пикселей, цвета не нужны. Я полагал, что достаточно загрузить в TImage.MultiResBitmap монохромный файл, чтобы битмэп и трактовался программой как монохромный. Но сейчас проверил это функцией PixelFormatToString - и увидел, что пиксельный формат имеет значение BGRA. Похоже, под цвета по-прежнему выделяются ресурсы, которые можно было бы сэкономить. Возникают следующие вопросы: 1. Действительно ли PixelFormat=BGRA означает, что мой TBitmap не является монохромным и занимает в памяти в разы больше места? 2. Если да, то есть ли способ сделать его монохромным?
  14. Узнал, что в UWP API включены средства для получения уникального идентификатора компьютера. Это юнит Windows.System.Profile, класс HardwareIdentification, метод getPackageSpecificToken. Существуют ли способы обратиться к этим средствам из Delphi? Вообще, я привык считать, что такая идентификация компьютера в принципе невозможна, в отличие от мобильных устройств. Но прогресс, как известно, не остановить.
  15. Немножко улучшил свой вариант. Теперь вообще как часы всё заработало. var TheFormIsMinimized: Boolean = False; TheFormWasMaximized: Boolean = False; function NewWndProc(Wnd: HWND; Msg: UINT; WParam: WPARAM; LParam: LPARAM): LRESULT; stdcall; begin if (Msg = WM_SHOWWINDOW) and (LParam = SW_PARENTCLOSING) and (not TheFormIsMinimized) then begin TheFormIsMinimized := True; TheFormWasMaximized := (MainForm.WindowState=TWindowState.wsMaximized); SendMessage(FormToHWND(MainForm), WM_SYSCOMMAND, SC_MINIMIZE, 0); MainFormp.WindowState := TWindowState.wsMinimized; end else if (Msg = WM_SHOWWINDOW) and (LParam = SW_PARENTOPENING) and (TheFormIsMinimized) then begin TheFormIsMinimized := False; SendMessage(FormToHWND(MainForm), WM_SYSCOMMAND, SC_RESTORE, 0); if TheFormWasMaximized then MainForm.WindowState := TWindowState.wsMaximized else MainForm.WindowState := TWindowState.wsNormal; end else Result:=CallWindowProc(OldWndProc, Wnd, Msg, WParam, LParam); end; Единственный недостаток: при восстановлении из wsMinimized в wsMaximized на долю секунды окно фиксируется как wsNormal. Но это, в общем-то, не страшно.
×
×
  • Создать...