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

kami

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

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

  • Посещение

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

    41

Весь контент kami

  1. даже под винду CreateThread не стоит использовать. Вместо него нужен BeginThread. А для кроссплатформенности - uses System.Classes , класс TThread, как вам уже несколько раз сказали. И да - в палитре компонентов его нет, на форму не кинешь. Максимум - через File - New - New thread (или как-то так, Delphi лень открывать).
  2. давно не ковырялся в алигнах, но судя по тому, как меняется порядок при перемещении контролов - первыми выравниваются те, у кого BoundsRect.Right "правее", чем у других.
  3. Предварительно - мне да.
  4. Только не сильно поздний, а то мне мама не разрешает автобусы до меня ходят только до 23:00
  5. Видимо, из моего сообщения было не ясно, что оно имеет значение "да, можно. Если хотите выстрелить себе в ногу".
  6. Да простят (или не простят) меня модераторы за ссылку на сторонний ресурс, но вот достаточно фундаментальный труд, который разжевывает всё по полочкам и не потерял ни грана актуальности с момента написания. Доступен даже (особенно) для тех, кто про потоки не слышал или "я знаю, что есть такое слово" Изучать до просветления. И после прочтения - не стараться использовать потоки где попало. Ну, это придет с опытом.
  7. не, а если серьезно? Я-то живу несколько за городом, посему злачные места, где можно культурно посидеть немного не знаю...
  8. Я думаю, что это выдернутая из контекста фраза, которая врезалась вам в память. DisposeOf можно делать где угодно, а не обязательно под андроидом. Также где угодно можно вызывать напрямую деструктор, т.е. myObject.Destroy Но лучше использовать Release / Free (FreeAndNil).
  9. излишне. Достаточно fr.Free; А вот на мобильных платформах это ничего не даст. Там нужно fr.Release; и вот в таком случае проверка на nil будет уместна. Да и на десктопе тоже, для универсализации.
  10. использовать приватную переменную "текущий фрейм" или - проходить по всем детям Panel и убивать их. Про глобальные переменные забудьте!
  11. kami

    DropBox Rest

    Это не решение вопроса... Поделитесь кодом, пожалуйста, возможно проблему удастся решить другим способом. Помимо смены версии IDE.
  12. Да! Я знал, что мыслю в нужном направлении
  13. Кто вам такое сказал? Может, этот Panel лежит на фрейме? Или наоборот - любой фрейм ложится на этот Panel. Я бы так и сделал: TreeView.Align = alLeft, Panel.Align = alClient. И на панельку в рантайме ложатся все фреймы. По необходимости.
  14. Нет, конечно вы можете сделать свой компонент на основе панели, в нем реализовать нужный функционал, зарегистрировать его в IDE,.. но зачем переусложнять?
  15. хм... ну сравните: lbOptionCaption:=TLabel.Create(Panel); lbOptionCaption.Parent:=Panel; lbOptionCaption.Text:='some option'; cbOption1:=TCheckBox.Create(Panel); cbOption1.OnChecked:=.... cbOption1.Caption:='asdfasdf'; ... с этим: < накидали контролов на фрейм> fr:=TOptionsFrame.Create(Panel); fr.Parent:=Panel; И ВСЁ! Весь функционал реализуется внутри модуля фрейма. НЕЗАВИСИМО от всего остального.
  16. В общем, получается отличненькая такая структура. Стройная, без кучи навесного и лишнего.
  17. 1. Фреймы просто создавать динамически, в рантайме. Панельки с содержимым обычно накидывают на саму форму. С учетом кучи пунктов опций - получается гигантская каша, в которой без 100 грамм не разберешься. 2. Каждый фрейм - в отдельном модуле. Очень просто искать, редактировать, править функционал и при необходимости - удалять. В отличие опять-таки от этих панелек. Только не надо сами фреймы кидать на форму, как это делается с другими визуальными компонентами!
  18. Я бы сделал правую часть на фреймах. А левая часть заполнялась бы автоматом наименованиями фреймов, которые зарегистрировались в окне настроек.
  19. Так а где координаты встречи, время, место, явки, пароли и всё остальное? Оу, организатор! Давайте уже предлагайте что-нибудь конкретное, чтобы можно было попробовать подстроить свои планы..
  20. То есть - куда он пойдет гулять никто не знает? На любую из точек? В таком случае, имхо, есть смысл сделать как это делается в оффлайн-навигаторах: приложение скачивается отдельно, а карты (аудиофайлы в нашем случае) - отдельно, по желанию пользователя.
  21. Нет, окончательное решение должно быть Ваше Зачем? ноутбук + Connectify, все мобилки подключаются к 192.168.0.1 (адрес бука), на буке - простейший http-сервер на том же Delphi крутится сервисом. На get-запрос от приложения отдает в теле ответа аудиофайл. До начала экскурсии, в месте сбора. Можно даже сделать как "мобилка спрашивает - а куда сегодня пойдем", а сервер отвечает "пойдем туда-то, вот тебе файлы на сегодня", чтобы не перегружать пользователя лишними действиями. Все довольны, все смеются.
  22. обратите внимание, что в исходном вопросе сказано, что блокирующий режим успешно используется мной на iOS. Ярослав, спасибо!
  23. Добрый день всем! Писал приложение под iOS, не задумываясь над различиями в ShowModal для разных платформ. В результате - когда назрела мысль портировать приложение под Android столкнулся с тем, что переделать код, использующий ShowModal на callback-вызовы очень сложно. Подумал, что может быть можно использовать эмуляцию, например: function myMessageDialog(...): Integer; var mr: TModalResult; begin mr:=mrNone; TDialogService.MessageDialog(... procedure (const AResult: TModalResult) begin mr:=AResult end); while mr = mrNone do // ждем пока не сработает callback Application.ProcessMessages; Result:=mr; // и возвращаем результат end; Но... работать не хочет. Почему? Ведь несмотря на то, что нативный диалог вызывается в контексте UI thread, коллбак и ProcessMessages работают в основном потоке приложения.
  24. Не уверен, что смогу. Но хотелось бы
×
×
  • Создать...