-
Постов
222 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Сообщения, опубликованные Вадим Смоленский
-
-
Обновился до версии 11 и обнаружил, что под этой версией в Windows-приложениях любые контролы всегда показывают всплывающую подсказку, даже если ShowHint=False. Похоже, баг. Есть ли несложные способы его обойти?
-
До сих пор использовал RAD Studio только для разработки под Windows. Сейчас решил наконец поэкспериментировать с Маком. Согласно инструкциям, иду в Project Manager, но в разделе Target Platform не нахожу пункта Mac OS. Нажимаю правую кнопку, чтобы воспользоваться командой меню Add platform, и эта команда там есть, но она неактивна!
Что тут не так?
Допускаю, что RAD Studio недостаточно хорошо установилась. На нынешний компьютер я ее ставил из ISO (пользователь Krapotkin тогда помог), и всё вроде работает, но при каждом запуске выдается огромное окно, в котором написано: "Platforms availability. No more platforms pending to install". Всякий раз приходится его закрывать; на старом компьютере такого не было. Не означает ли это какого-то дефекта установки, связанного именно с доступностью альтернативных платформ? -
Огромнейшее спасибо!!! Всё прекрасно установилось и работает как часы. Вопрос снят.
-
Спасибо, скачал. Но далее пошло доселе неизведанное. В меню нужно выбрать "Burn disc image", так? Потом оно просит установить "disc burner", который непонятно откуда брать. У меня, правда, стоит ImgBurn, при помощи которого я всегда изготовлял CD. Может, он сгодится?
-
11 минут назад, krapotkin сказал:
а это интернет-инсталлер?
Ну, видимо, да. Запускаю exe-файлы, с которых когда-то всё устанавливал на старом компе. Попробовать из ISO-шечки мешает невежество. Если расскажете, как это делать, непременно попробую.
Насчет запуска чистого проекта: вы имеете в виду запустить RAD Studio в этом виде и попробовать создать новый проект? Увы. Жму на "Create a new project" и получаю вот такое: -
Этот простой выход мне не по душе. Стараюсь по возможности не делать собратьям по программному ремеслу того, чего сам себе не желаю. Но, конечно, такая жесткость лицензионной политики весьма удручает.
-
Писал уже в поддержку — ответили, что сроки истекли, отфутболили к renewals@idera.com. Написал и туда, ответа нет.
Как следует зачистить, в моем понимании — это удалить папки Embarcadero из Program Files, Program Data и Documents, а также удалить всю секцию Embarcadero из регистра. Что тогда останется незачищенным?
Да, если запустить более ранний установочный файл, radstudio10_2_1_esd.exe, то инсталляция выполняется без ругани насчет истекшей поддержки, но в конце выдается сообщение, о котором я писал в своем посте: -
-
47 минут назад, krapotkin сказал:
а просто установить с тем же слипом без копирования папок она что, не дает?
А как сообщить инсталлятору, где этот слип лежит? Такое впечатление, что он ожидает его увидеть именно в Program Data\Embarcadero и более нигде. Задает вопрос о том, есть ли этот слип вообще, а вопроса о местонахождении не задает.
-
Работаю на 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."
Есть ли способы эту проблему побороть? -
19 часов назад, haword сказал:
кто хочет найти выход тот находит
Ну вот я и хочу найти выход. И пока не нахожу. Оттого и обратился к коллективному разуму.
-
5 часов назад, haword сказал:
в 10.4.1 нет такой проблемы вообще
Это замечательная новость. Но у меня 10.2, и бесплатно обновиться до 10.4, как я понимаю, нельзя.
-
В 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)). Но и это работает не всегда. Например, если окно было развернуто на весь экран, а свернуто было щелчком по кнопке «Свернуть все окна», то после его разворачивания опять фокуса нет (насколько могу судить, в этом случае не запускается таймер). Нет ли более изящного и надежного способа наладить фокус?
-
А впрочем, неважно. Самое главное, что оператор Button:=TButton(SenderButton.Clone(SenderButton.Owner)) работает, как задумано. Спасибо!
-
Простите, но пока плохо понимаю. Мне нужно клонировать объект, созданный в design time. А в вашем примере SenderButton создается как локальная переменная. Какой в этом смысл?
-
Туплю, не могу понять, как именно нужно клонировать объект. Пишу так:
Button2:=FMX.Types.TFmxObject.Clone(Button1);
Delphi ругается, говорит: This form of method call only allowed for class methods or constructor.
Что делаю не так? -
Здесь, к сожалению, никто проблемой не заинтересовался. Пришлось обратиться на 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);
У меня всё заработало.
-
Пишу для Windows, но в данном случае это, наверное, неважно. Засовываю в ресурсы несколько кастомных шрифтов, и лишь один из них упорно сопротивляется. Обычный шрифт из интернета, в систему устанавливается, функционирует нормально, только в ресурсы не хочет. Цепляю в зазипованном виде - может, кто-нибудь сможет подсказать, что с ним не так.
Можно даже создать новый пустой проект, добавить этот шрифт, вызвать проверку синтаксиса, и результат будет такой:
"brcc32" exited with code 1
-
Значит, так и сделаем. TWebBrowser в моем приложении уже используется. Под Windows это не так критично. Все минусы будут связаны разве что с дизайном и эстетикой. Края там не поменять.
-
Тогда, может быть, самым надежным и простым вариантом будет выводить видео в TWebBrowser?
-
Мне, безусловно, нужно ехать, просто до сей поры удавалось обходиться без сторонних компонентов. Довольно странно, что в Delphi нет нормальной поддержки такой востребованной функции, как воспроизведение видео.
Так что же, порекомендуете PasLibVlc? Или есть что-нибудь еще достойное внимания? -
2 часа назад, krapotkin сказал:
Это зависит исключительно от набора установленных у Windows кодеков.
Простите, не понял. На моем компьютере mp4-файлы прекрасно проигрываются другими приложениями - например, Windows Media Player. Разве это не означает, что соответствующий кодек установлен?
-
Отчего-то, если задать TMediaPlayer.FileName с расширением "mp4", то уже при запуске приложение валится с сообщением "Unsupported media file". Причем в секции initialization юнита FMX.Media.Win присутствует и при запуске отрабатывает такой оператор:
TMediaCodecManager.RegisterMediaCodecClass('.mp4', SVMP4Files, TMediaType.Video, TWindowsMediaCodec);
Запускаю под Windows. Файлы *.avi проигрываются без проблем
-
Никто не помог ни здесь, ни на Experts Exchange. После долгих мытарств все-таки нашел решение сам. Оказалось достаточным перед вызовом Locate сделать такую штуку:
FDConnection.ResourceOptions.PreprocessCmdText:=True
А после вызова вернуть обратно в False.
Собственно, PreprocessCmdText как раз и устанавливает перечисленные выше пять свойств (EscapeExpand, MacroCreate и т.д.) одним махом либо в True, либо в False. Но почему-то, когда эти свойства были установлены в Object Inspector, ни черта не работало. А такой вот динамический фокус помог. Скорость, по сравнению с Filter, возросла вдвое.
Не работает свойство ShowHint
в Windows
Опубликовано
Даже в голову не пришло!
Огромное спасибо, дурацкий вопрос разрешен и снят.