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

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

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

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

  • Посещение

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

    5

Сообщения, опубликованные Вадим Смоленский

  1. До сих пор использовал RAD Studio только для разработки под Windows. Сейчас решил наконец поэкспериментировать с Маком. Согласно инструкциям, иду в Project Manager, но в разделе Target Platform не нахожу пункта Mac OS. Нажимаю правую кнопку, чтобы воспользоваться командой меню Add platform, и эта команда там есть, но она неактивна!

    Что тут не так?

    Допускаю, что RAD Studio недостаточно хорошо установилась. На нынешний компьютер я ее ставил из ISO (пользователь Krapotkin тогда помог), и всё вроде работает, но при каждом запуске выдается огромное окно, в котором написано: "Platforms availability. No more platforms pending to install". Всякий раз приходится его закрывать; на старом компьютере такого не было. Не означает ли это какого-то дефекта установки, связанного именно с доступностью альтернативных платформ?

  2. Спасибо, скачал. Но далее пошло доселе неизведанное. В меню нужно выбрать "Burn disc image", так? Потом оно просит установить "disc burner", который непонятно откуда брать. У меня, правда, стоит ImgBurn, при помощи которого я всегда изготовлял CD. Может, он сгодится?

  3. 11 минут назад, krapotkin сказал:

    а это интернет-инсталлер?

    Ну, видимо, да. Запускаю exe-файлы, с которых когда-то всё устанавливал на старом компе. Попробовать из ISO-шечки мешает невежество. Если расскажете, как это делать, непременно попробую.

    Насчет запуска чистого проекта: вы имеете в виду запустить RAD Studio в этом виде и попробовать создать новый проект? Увы. Жму на "Create a new project" и получаю вот такое:

    RADStudioInstallation6.png

  4. Писал уже в поддержку — ответили, что сроки истекли, отфутболили к renewals@idera.com. Написал и туда, ответа нет.

    Как следует зачистить, в моем понимании — это удалить папки Embarcadero из Program Files, Program Data и Documents, а также удалить всю секцию Embarcadero из регистра. Что тогда останется незачищенным?

    Да, если запустить более ранний установочный файл, radstudio10_2_1_esd.exe, то инсталляция выполняется без ругани насчет истекшей поддержки, но в конце выдается сообщение, о котором я писал в своем посте:

    RADStudioInstallation5.png

  5. 47 минут назад, krapotkin сказал:

    а просто установить с тем же слипом без копирования папок она что, не дает?

     

    А как сообщить инсталлятору, где этот слип лежит? Такое впечатление, что он ожидает его увидеть именно в Program Data\Embarcadero и более нигде. Задает вопрос о том, есть ли этот слип вообще, а вопроса о местонахождении не задает.

  6. Работаю на 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."

    Есть ли способы эту проблему побороть?

  7. В 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)). Но и это работает не всегда. Например, если окно было развернуто на весь экран, а свернуто было щелчком по кнопке «Свернуть все окна», то после его разворачивания опять фокуса нет (насколько могу судить, в этом случае не запускается таймер). Нет ли более изящного и надежного способа наладить фокус?

  8. Здесь, к сожалению, никто проблемой не заинтересовался. Пришлось обратиться на 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);

    У меня всё заработало.

  9. Пишу для Windows, но в данном случае это, наверное, неважно. Засовываю в ресурсы несколько кастомных шрифтов, и лишь один из них упорно сопротивляется. Обычный шрифт из интернета, в систему устанавливается, функционирует нормально, только в ресурсы не хочет. Цепляю в зазипованном виде - может, кто-нибудь сможет подсказать, что с ним не так.

    Можно даже создать новый пустой проект, добавить этот шрифт, вызвать проверку синтаксиса, и результат будет такой:

    "brcc32" exited with code 1

    KanjiStrokeOrders_v4.004.zip

  10. Мне, безусловно, нужно ехать, просто до сей поры удавалось обходиться без сторонних компонентов. Довольно странно, что в Delphi нет нормальной поддержки такой востребованной функции, как воспроизведение видео.

    Так что же, порекомендуете PasLibVlc? Или есть что-нибудь еще достойное внимания?

  11. 2 часа назад, krapotkin сказал:

    Это зависит исключительно от набора установленных у Windows кодеков.

    Простите, не понял. На моем компьютере mp4-файлы прекрасно проигрываются другими приложениями - например, Windows Media Player. Разве это не означает, что соответствующий кодек установлен?

  12. Отчего-то, если задать TMediaPlayer.FileName с расширением "mp4", то уже при запуске приложение валится с сообщением "Unsupported media file". Причем в секции initialization юнита FMX.Media.Win присутствует и при запуске отрабатывает такой оператор:

    TMediaCodecManager.RegisterMediaCodecClass('.mp4', SVMP4Files, TMediaType.Video, TWindowsMediaCodec);

    Запускаю под Windows. Файлы *.avi проигрываются без проблем

  13. Никто не помог ни здесь, ни на Experts Exchange. После долгих мытарств все-таки нашел решение сам. Оказалось достаточным перед вызовом Locate сделать такую штуку:

    FDConnection.ResourceOptions.PreprocessCmdText:=True

    А после вызова вернуть обратно в False.

    Собственно, PreprocessCmdText как раз и устанавливает перечисленные выше пять свойств (EscapeExpand, MacroCreate и т.д.) одним махом либо в True, либо в False. Но почему-то, когда эти свойства были установлены в Object Inspector, ни черта не работало. А такой вот динамический фокус помог. Скорость, по сравнению с Filter, возросла вдвое.

     

×
×
  • Создать...