kami

Пользователи
  • Публикаций

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

  • Посещение

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

    34

kami стал победителем дня 17 декабря 2017

kami имел наиболее популярный контент!

4 Подписчика

Информация о kami

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

Информация

  • Пол
    Не определился
  • Город
    Санкт-Петербург

Контакты

  • StackOverflow
    http://ru.stackoverflow.com/users/192901/kami

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

764 просмотра профиля
  1. Полноэкранный режим редактора

    У CnPack есть функция "Полный экран". Но она работает только в Classic Undocked, что не интересно... А в обычном для D2009Up (или еще раньше?) режиме - пишет --------------------------- Ошибка --------------------------- Окно редактора закреплено или не существует --------------------------- ОК ---------------------------
  2. в объявлении reference to procedure забыт пробел между const и названием переменной. Синтаксис отличается и компилятор ругается.
  3. Поправка: RemoveQueuedEvents вызывается само в деструкторе TThread. Если важно, чтобы все синхронизируемые события отработали - при уничтожении TThread в главном потоке нужно вызывать System.Classes.CheckSynchronize(0) до того момента, как оно вернет False.
  4. Разница есть. И она не только в вызове Synchronize, но и Queue. Указание потока в качестве источника метода синхронизации позволяет вам впоследствии сделать TThread.RemoveQueuedEvents(myThread) перед его удалением. Вызов RemoveQueuedEvents необходим, если в синхронизируемых методах может идти обращение к полям и методам уничтожаемого потока. Потому что с удалением потока то, что подлежало синхронизации, никуда не пропадет, а раз поток уже не существует - у вас вылезет AV на ровном месте. Или же ваш код испортит чью-то память, что еще труднее отловить.
  5. Лучший вариант здесь был предложен с AllocateHWND. Только вот в реализации оконная процедура очень подкачала. Не будет такое окно работать.
  6. Непонятки с TWebBrowser

    Попробуйте использовать Navigate (без параметров) вместо Reload. Ну и - делать невидимую работу по правке файла, используя визуальный компонент (Memo) - это, мягко говоря, не комильфо.
  7. Ну, хотя бы потому, что FMX - кроссплатформенен. И в угоду совместимости между платформами приходится от чего-то отказываться, чтобы "оно" без переделок (или с минимальной доработкой напильником, а не кувалдой) работало и на Win, и на iOS, и на MacOS и на Android. Ах, да - забыл. Теперь же еще и Linux. Добавляйте свою анимацию.
  8. TWebBrowser и нажатия клавиш

    https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms644959(v=vs.85).aspx Смотреть в основном про WH_KEYBOARD (перехват в рамках приложения) или WH_KEYBOARD_LL (перехват в рамках всей системы). Примеров в гугле должно быть навалом, подойдут даже от D7 (возможно - с поправкой на юникод), ибо этот механизм не менялся уже сто лет. Но - еще раз подчеркну - это привязка к винде.
  9. TWebBrowser и нажатия клавиш

    нет. Веббраузер - нативный компонент, со своим собственным механизмом работы. Емнип, даже под Windows, даже используя штатный полнофункциональный IWebBrowser2 вы не получите нажатия из него. На винде вы можете поставить хук на клавиатуру и получать все клавиши вне зависимости от того, в какой контрол они летят. На мобильных платформах - нет.
  10. Вы не там ифдефы пишете. Не нужно здесь много модулей. Для примера. (емнип - автор @Равиль Зарипов (ZuBy) ). Единая точка входа в функцию и отличаются только внутренности. function OpenURL(const URL: string; const DisplayError: Boolean = False): Boolean; var {$IFDEF ANDROID} Intent: JIntent; {$ENDIF} {$IFDEF IOS} NSU: NSUrl; {$ENDIF} {$IFDEF MSWINDOWS} Res: HINST; {$ENDIF} begin {$IFDEF ANDROID} // There may be an issue with the geo: prefix and URLEncode. // will need to research Intent := TJIntent.JavaClass.init(TJIntent.JavaClass.ACTION_VIEW, TJnet_Uri.JavaClass.parse(StringToJString(TIdURI.URLEncode(URL)))); try TAndroidHelper.Activity.startActivity(Intent); exit(true); except on e: Exception do begin if DisplayError then TDialog.ShowMessage('Error: ' + e.Message); exit(False); end; end; {$ENDIF} {$IFDEF IOS} // iOS doesn't like spaces, so URL encode is important. NSU := StrToNSUrl(URL); if SharedApplication.canOpenURL(NSU) then exit(SharedApplication.OpenURL(NSU)) else begin if DisplayError then TDialog.ShowMessage('Error: Opening "' + URL + '" not supported.'); exit(False); end; {$ENDIF} {$IFDEF MSWINDOWS} Res := ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOW); Result := Res > 32; {$ENDIF} end; И теперь "снаружи" этой функции вам без разницы, под какую платформу идет сборка. В любом случае вы пишете "OpenURL('http://blablabla.net');". Безо всяких IFDEF.
  11. На 10.2 никаких танцев не требуется. Проблемы только начиная с 11 версии, поскольку 11 симуляторы хотят работать только под 64 бита. А делфя пока не умеет мак в 64 бита.
  12. Без малейшего понятия, это надо у заказчика спрашивать. У них планшеты отключены от "глобального" эппла, подсоединены к локальной MDM-системе и полностью контролируются именно ими.
  13. на iPad, у нас жесткое ограничение - информация на экранчик телефона просто не влезет :))) Причем - на устройстве работаем без отладки (эта функция отключена корпоративной политикой безопасности). поэтому только лог. Удаленный + локальный.
  14. у нас в качестве сборщика - какой-то древний макмини. До iOS11 напрягало, что симулятор для отладки запускается безумно медленно. А как перешли на Токио + IOS11 - эта проблема перестала играть роль, поскольку симулятор теперь просто не работает . Радикальное такое решение проблемы :)))
  15. С каких пор в Delphi перестали существовать TCriticalSection, TMutex, TEvent? Которые, кстати, работают кроссплатформенно, используя штатные средства, предоставляемые ОС.