Перейти к содержанию
Fire Monkey от А до Я

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

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

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

  • Посещение

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

    5

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

  1. Даже в голову не пришло! Огромное спасибо, дурацкий вопрос разрешен и снят.
  2. Обновился до версии 11 и обнаружил, что под этой версией в Windows-приложениях любые контролы всегда показывают всплывающую подсказку, даже если ShowHint=False. Похоже, баг. Есть ли несложные способы его обойти?
  3. До сих пор использовал RAD Studio только для разработки под Windows. Сейчас решил наконец поэкспериментировать с Маком. Согласно инструкциям, иду в Project Manager, но в разделе Target Platform не нахожу пункта Mac OS. Нажимаю правую кнопку, чтобы воспользоваться командой меню Add platform, и эта команда там есть, но она неактивна! Что тут не так? Допускаю, что RAD Studio недостаточно хорошо установилась. На нынешний компьютер я ее ставил из ISO (пользователь Krapotkin тогда помог), и всё вроде работает, но при каждом запуске выдается огромное окно, в котором написано: "Platforms availability. No more platforms pending to install". Всякий раз приходится его закрывать; на старом компьютере такого не было. Не означает ли это какого-то дефекта установки, связанного именно с доступностью альтернативных платформ?
  4. Огромнейшее спасибо!!! Всё прекрасно установилось и работает как часы. Вопрос снят.
  5. Спасибо, скачал. Но далее пошло доселе неизведанное. В меню нужно выбрать "Burn disc image", так? Потом оно просит установить "disc burner", который непонятно откуда брать. У меня, правда, стоит ImgBurn, при помощи которого я всегда изготовлял CD. Может, он сгодится?
  6. Ну, видимо, да. Запускаю exe-файлы, с которых когда-то всё устанавливал на старом компе. Попробовать из ISO-шечки мешает невежество. Если расскажете, как это делать, непременно попробую. Насчет запуска чистого проекта: вы имеете в виду запустить RAD Studio в этом виде и попробовать создать новый проект? Увы. Жму на "Create a new project" и получаю вот такое:
  7. Этот простой выход мне не по душе. Стараюсь по возможности не делать собратьям по программному ремеслу того, чего сам себе не желаю. Но, конечно, такая жесткость лицензионной политики весьма удручает.
  8. Писал уже в поддержку — ответили, что сроки истекли, отфутболили к renewals@idera.com. Написал и туда, ответа нет. Как следует зачистить, в моем понимании — это удалить папки Embarcadero из Program Files, Program Data и Documents, а также удалить всю секцию Embarcadero из регистра. Что тогда останется незачищенным? Да, если запустить более ранний установочный файл, radstudio10_2_1_esd.exe, то инсталляция выполняется без ругани насчет истекшей поддержки, но в конце выдается сообщение, о котором я писал в своем посте:
  9. Если папку Program Data\Embarcadero целиком не копировать, получается вот что (см. скриншоты) Довольно странно всё это. Неужели истекшая подписка лишает меня права продолжать пользоваться старой версией?
  10. А как сообщить инсталлятору, где этот слип лежит? Такое впечатление, что он ожидает его увидеть именно в Program Data\Embarcadero и более нигде. Задает вопрос о том, есть ли этот слип вообще, а вопроса о местонахождении не задает.
  11. Работаю на RAD Studio 10.2 Tokyo. Обновиться до свежих версий нынешняя лицензия не дает; покупка новой лицензии в планах, но не в ближайших. Сроки поддержки тоже истекли. Пытаюсь перенести всё хозяйство со старого компа на новый. Обозвал комп таким же именем, перенес всю как есть папку Program Data\Embarcadero с файлом *.slip в аналогичное место, после этого запускаю radstudio10_2_1_esd.exe. Лицензия подхватывается, инсталляция проходит вроде бы гладко, но потом вылезает окно "Platform selection" с загадочным сообщением "No more platforms pending to install". После чего в запущенном RAD Studio не удается открыть ни один проект: "The project can not be loaded because the required personality Delphi.Personality is not available." Есть ли способы эту проблему побороть?
  12. Ну вот я и хочу найти выход. И пока не нахожу. Оттого и обратился к коллективному разуму.
  13. Это замечательная новость. Но у меня 10.2, и бесплатно обновиться до 10.4, как я понимаю, нельзя.
  14. В FireMonkey приходится перехватывать сообщения Windows, чтобы обеспечить корректное сворачивание и разворачивание окон. Это здесь уже обсуждалось. Я в итоге сделал у себя так: 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 begin SendMessage(FormToHWND(MainForm),WM_SYSCOMMAND,SC_MAXIMIZE,0); LookUp.WindowState:=TWindowState.wsMaximized; end else begin SendMessage(FormToHWND(MainForm),WM_SYSCOMMAND,SC_RESTORE,0); LookUp.WindowState:=TWindowState.wsNormal; end; end else Result:=CallWindowProc(OldWndProc, Wnd, Msg, WParam, LParam); end; Это работает — но восстановленное из трея окно находится не в фокусе. Пользователь должен дополнительно щелкнуть по нему мышкой. Вставка оператора SetFocus(FormToHWND(MainForm)) непосредственно сюда же ничего не дает — равно как и операторов SendMessage(FormToHWND(MainForm),WM_ACTIVATE,WA_ACTIVE,0), Winapi.Windows.SetActiveWindow(FormToHwnd(MainForm)) или SetForegroundWindow(FormToHWND(MainForm)). Мне приходится запускать из этого места специальный таймер — и уже в обработчике таймера, после некоторой задержки, вызывать SetFocus(FormToHWND(MainForm)). Но и это работает не всегда. Например, если окно было развернуто на весь экран, а свернуто было щелчком по кнопке «Свернуть все окна», то после его разворачивания опять фокуса нет (насколько могу судить, в этом случае не запускается таймер). Нет ли более изящного и надежного способа наладить фокус?
  15. А впрочем, неважно. Самое главное, что оператор Button:=TButton(SenderButton.Clone(SenderButton.Owner)) работает, как задумано. Спасибо!
  16. Простите, но пока плохо понимаю. Мне нужно клонировать объект, созданный в design time. А в вашем примере SenderButton создается как локальная переменная. Какой в этом смысл?
  17. Туплю, не могу понять, как именно нужно клонировать объект. Пишу так: Button2:=FMX.Types.TFmxObject.Clone(Button1); Delphi ругается, говорит: This form of method call only allowed for class methods or constructor. Что делаю не так?
  18. Здесь, к сожалению, никто проблемой не заинтересовался. Пришлось обратиться на 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); У меня всё заработало.
  19. Пишу для Windows, но в данном случае это, наверное, неважно. Засовываю в ресурсы несколько кастомных шрифтов, и лишь один из них упорно сопротивляется. Обычный шрифт из интернета, в систему устанавливается, функционирует нормально, только в ресурсы не хочет. Цепляю в зазипованном виде - может, кто-нибудь сможет подсказать, что с ним не так. Можно даже создать новый пустой проект, добавить этот шрифт, вызвать проверку синтаксиса, и результат будет такой: "brcc32" exited with code 1 KanjiStrokeOrders_v4.004.zip
  20. Значит, так и сделаем. TWebBrowser в моем приложении уже используется. Под Windows это не так критично. Все минусы будут связаны разве что с дизайном и эстетикой. Края там не поменять.
  21. Тогда, может быть, самым надежным и простым вариантом будет выводить видео в TWebBrowser?
  22. Мне, безусловно, нужно ехать, просто до сей поры удавалось обходиться без сторонних компонентов. Довольно странно, что в Delphi нет нормальной поддержки такой востребованной функции, как воспроизведение видео. Так что же, порекомендуете PasLibVlc? Или есть что-нибудь еще достойное внимания?
  23. Простите, не понял. На моем компьютере mp4-файлы прекрасно проигрываются другими приложениями - например, Windows Media Player. Разве это не означает, что соответствующий кодек установлен?
  24. Отчего-то, если задать TMediaPlayer.FileName с расширением "mp4", то уже при запуске приложение валится с сообщением "Unsupported media file". Причем в секции initialization юнита FMX.Media.Win присутствует и при запуске отрабатывает такой оператор: TMediaCodecManager.RegisterMediaCodecClass('.mp4', SVMP4Files, TMediaType.Video, TWindowsMediaCodec); Запускаю под Windows. Файлы *.avi проигрываются без проблем
  25. Никто не помог ни здесь, ни на Experts Exchange. После долгих мытарств все-таки нашел решение сам. Оказалось достаточным перед вызовом Locate сделать такую штуку: FDConnection.ResourceOptions.PreprocessCmdText:=True А после вызова вернуть обратно в False. Собственно, PreprocessCmdText как раз и устанавливает перечисленные выше пять свойств (EscapeExpand, MacroCreate и т.д.) одним махом либо в True, либо в False. Но почему-то, когда эти свойства были установлены в Object Inspector, ни черта не работало. А такой вот динамический фокус помог. Скорость, по сравнению с Filter, возросла вдвое.
×
×
  • Создать...