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

Лидеры

  1. SergeyIT

    SergeyIT

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


    • Баллы

      9

    • Постов

      32


  2. Gingercat

    Gingercat

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


    • Баллы

      6

    • Постов

      111


  3. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      3

    • Постов

      851


  4. krapotkin

    krapotkin

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


    • Баллы

      3

    • Постов

      2 213


Популярный контент

Показан контент с высокой репутацией 06.02.2016 в Сообщения

  1. SergeyIT

    RAD 11 на подходе?

    Вы меня простите, Господа. Но позвольте высказать мнение человека нового в Object Pascal, из .NET пришедшего. Тьфу-тьфу, дай им всем Бог в Embarcadero доброго здоровья и процветания. Оглянитесь вокруг, ничего ж и близкого нет, даже отдаленно напоминающего того, к чему пришли в Embarcadero за последние годы с кроссплатформенностью! Уму не постижимо. Взять Java (хоть к теме напрямую не относится) - на Android идет сырец-порт JavaFX, сервисы и плюшки - за деньги в частном порядке. Xamarin видели? Хотите поднять настроение - погуглите. Выглядит это так: MAMA MILA RAMU... С# по Java (что-то дико нелепое). Если человек знает что такое Activity, зачем ему C#? Или Java менее элегантней (учитывая полное родство). MONO - мычание из преисподней, GUI нет фактически. Да вот возьмите хотя бы Unity 3D. Как-то на конференции человек оттуда проговорился: Вы ведь не знаете - мы 90% времени правим баги платформозависимые, чтобы у Вас почти все работало. У Microsoft судороги предсмертные в части всего, что не Windows 10. Почитать куда их бросает каждый месяц - жуть. Кто-то испрашивал по поводу поддержки Windows Phone в одном из топиков. Да даже если бы технически это было возможно, то они ж меняют API каждые полгода на него: то Windows Phone Silverlight, то HTML5, то DirectX C++ (взамен XNA Windows Phone 7)... Поддержка разработчиков ушла в StackOverflow, MSDN скоро рекламу начнет размещать о таблетках для мужчин. Ну, кто еще остался? Qt? Это не моя тема. Мне трудно думать про указатели, когда надо думать про логику. Увы, не дано... Не владею темой. Так что пока нас не слишком много в сравнении с Китаем, есть шанс, что быстро ответят на заданный вопрос... Скоро эта халява закончится...
    6 баллов
  2. Доброго времени суток. Навеяно постом SergeIT. Несмотря на кучу недостатков, по большей части связанных именно с с++ (удобство работы в студии, отсутствие нормального дополнения и тд), на данный момент абракадабра вне конкуренции по скорости и простоте работы. Не могу сказать про кроссплатформенность, а вот разработка под десктоп - да. Безусловно, C# под десктоп здорово, но когда критична скорость обработки - сами понимаете. Так уж сложилось, что я привязан к различным видам обработки графики. Так вот - чего бы там не говорили про оптимизацию кода (лишние вызовы в ассемблере и тд), на данный момент из коробки, быстрее всего Rad Studio. Конечно, мне далеко даже до среднего уровня с++, но все же. Работа в Visual Studio с битмапами еще тот геморой (одно заполнение структуры bitmap))) При использовании нативных! BitBlt, Dib-секций и еще множества различных способов, скорость обработки ниже, чем при использовании обертки TBitmap. Полный разбор fullHd картинки в Visual Studio занимает от 7 до 14 мс, при этом в студии 3 - 6. Проверенно тоннами тестов. Конечно, можно сказать - OpenCv. Да, пока вы решаете стандартные задачи по обработке. Как только шаг в сторону - начинаешь понимать, что проще самому писать, нежели пользоваться готовым. Ну и про Qt. Очень удобно - чтобы не говорили. Но есть несколько но: 1 - хвост библиотек (статичная сборка возможна, но там далеко не все гладко). 2 - жесточайшее навязывание своих стандартов - это уже не с а сQt. Не знаю, как дела с кроссплатформенностью - не пробовал. По скорости на посередине. При этом, использование нативных функций винды (именно без костылей) карается (понятно, кроссплатформенность). Однако, либо пользоваться bitmapom нативным (тогда какой смысл вообще в Qt, если все нужно выписывать ручками), либо... bitBlt не возможен (как и множество другого) - вырезали, остается использование довольно медленного QImage, с кучей оговорок. В Rad Studio - пожалуйте: нужно - дернул из GDI функцию, нужно - из среды, нужен кусок ассемблера - пожалуйста. Про ассемблер в Qt умолчу))) Вот и выходит, что Rad Studio на данный момент, по сути лучшая. Прошу не судить строго (далеко не профессионал в плюсах), но опыт кой какой имеется. Так что пущай развиваются))
    5 баллов
  3. Axbor

    Собственный TListBoxItem на C++

    Очень не хватает примеров на C++. Решил поделится опытом. Рассмотрим создание собственного "ListBoxItem"а на C++. И так начнем. Для начало создадим стиль для нашего "ListItem"а. В моем случае оно выглядит так: Структура выглядеть следующим образом: А вы сразу можете создать собственный стиль. Создадим класс для нашего "Item"а. Я назвал его TMyListBoxItem. Нужно знать следующие вещи: ApplyStyle() вызывается когда стиль загружен. FreeStyle() когда стиль выгружен. GetDefaultStyleLookupName() когда стиль не задано берется названые стиля по умолчанию. FindStyleResource("стиль") ищет в стиле ресурс с заданным названием. ListBox автоматически очищает из невидимых "Item"ов стиль что бы избежать от расходы на память. И заново загружает когда оно видимо. При этом вызывается соответствующие функции приведенные выше я приведу только некоторые кусочки кода. Остальное всё можете посмотреть в прикреплённых файлах. class TMyListBoxItem : public TListBoxItem { private: // Переменные для хранения данных System::UnicodeString FTimeTo; System::UnicodeString FTimeFrom; //.... // Визуальные компоненты TText* FTextTimeTo; TText* FTextTimeFrom; //... // Функции для присваивания данных, это нужно при написании "properties" void __fastcall SetTimeTo(const System::UnicodeString Value); void __fastcall SetTimeFrom(const System::UnicodeString Value); protected: void __fastcall ApplyStyle(); void __fastcall FreeStyle(); System::UnicodeString __fastcall GetDefaultStyleLookupName(); virtual void UpdateStyleData(); __published: __property System::UnicodeString TimeTo = {read=FTimeTo, write=SetTimeTo}; __property System::UnicodeString TimeFrom = {read=FTimeFrom, write=SetTimeFrom}; public: __fastcall TMyListBoxItem(System::Classes::TComponent* AOwner); }; Теперь напишем сами функции. void __fastcall TMyListBoxItem::ApplyStyle() { // Вызов метода предка TListBoxItem::ApplyStyle(); TFmxObject *StyleObject; // Поиск ресурса из стиля. Посмотрите в скрине, там есть ресурс с названием "timeto" типа TText StyleObject = FindStyleResource("timeto"); // dynamic_cast нужен для корректного преобразования типов. Если тип найденного ресурса не является TText то указателю будет присвоен NULL FTextTimeTo = dynamic_cast<TText*>(StyleObject); StyleObject = FindStyleResource("timefrom"); FTextTimeFrom = dynamic_cast<TText*>(StyleObject); UpdateStyleData(); } void __fastcall TMyListBoxItem::FreeStyle() { // Стиль выгружен из памяти. Нужно очистить указатели что бы избежать ошибок FTextTimeTo = NULL; FTextTimeFrom = NULL; TListBoxItem::FreeStyle(); } System::UnicodeString __fastcall TMyListBoxItem::GetDefaultStyleLookupName() { // название стиля для нашего "Item"а по умолчанию return "mylistboxitemstyle"; } void TMyListBoxItem::UpdateStyleData() { if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; if(FTextTimeFrom) FTextTimeFrom->Text = FTimeFrom; } void __fastcall TMyListBoxItem::SetTimeTo(const System::UnicodeString Value) { FTimeTo = Value; if(FTextTimeTo) FTextTimeTo->Text = FTimeTo; } Вот и всё. Остается только добавит в наш проект ListBox и button для проверки. Вот функция создания нашего "Item"а: void __fastcall TForm1::Button1Click(TObject *Sender) { TMyListBoxItem *Item = new TMyListBoxItem(this); Item->Parent = ListBox1; Item->StyleLookup = "customstyle1"; Item->TimeFrom = "11:20"; Item->TimeTo = "12:50"; } Скриншот программы: В архиве мой класс и стиль. Для корректного отображения некоторых символов нужен fontcustom Какие вопросы задавайте. Отдельное спасибо Ярославу за мануал на дельфи: http://blogs.embarcadero.com/yaroslavbrovin/2012/10/15/listboxitem_styling_part2/ Администраторы и модераторы, прошу подкорректировать если что то неправильно. ListBoxItem.zip
    3 балла
  4. вот для меня если честно, в последнее время стало очевидно перемещение кормивших нас enterprise приложений на web-клиентов и все бы хорошо, но web-серверы 99% linux и разработка сводится к клиенту на Delphi и php серверу с отдельным интерфейсом и API и все Datasnap и другие волшебные пули в этой связке никака не применить а 300000 за годовой комплект Enterprise слабо конкурирует с QT если появится возможность делать linux Сервера, возможно это сможет изменить взгляд на вещи я еще раз повторюсь, что считаю Seattle первой версией, на которой можно без особого страха писать на мобилы так что следующий шаг может стать решающим для продукта в целом...
    3 балла
  5. Ну так как я перепрыгнул с Delphi7-2006, то отличий конечно много . Развиваются - это правда, это хорошо. Но даже мне видно что в лучшей Delphi RX есть куча недоделок. Например, если смотреть форумы, то видно что сервисы под Андроид просили их сделать с 2013 года... спасибо, сделали, но и сейчас не до конца допилены ) Как это называется, когда решением является писать на Java, компилировать классы и подклеивать в свой проект? ) А где виджеты?! Возлагаю большие надежды на следующую версию. Надеюсь все багрепорты поправят особенно с major priority И лучше чтобы не пухли сильно Сами себе противоречите, хотите всё и сразу, но при этом чтобы приложение не "пухло". Это невозможно... Для примера, вспомните сколько раньше весили приложения для Андроида, когда было мало функционала (XE5, XE6), но с появлением новых функций, которые просил народ, размер естественно увеличивался. Сейчас приложение с сервисом весит примерно 40 МБ, хотя с сегодняшним развитием технологий и повсеместной установкой модулей памяти на 16 ГБ и более, увеличение не так заметно. Да и к тому же некоторые очень популярные (во всём мире) приложения весят намного больше.
    3 балла
  6. haword

    RAD 11 на подходе?

    на qt есть qml javascript подобный и на нем писать можно приложения. хамарин ставил но уперся в то что он платный и написать для пробы что то для андроида нельзя. да абракадабра которая уже не абракадабра нравится и мне. мне не нравится что такую среду не плохую все время перепродают то туда то сюда и не известно что будет завтра. выйдет ли новая версия или закопают и всех разгонят. плюс упор на ентерпрайз и цены.
    2 балла
  7. SergeyIT

    RAD 11 на подходе?

    Уж не знаю, кто мы такие чтобы им советовать... Но вот взять Microsoft, было и хорошее... Программы типа DreamSpark - для студентов, BizSpark - для стартапов, начиная с одного индивидуала. Регистрируешься как положено, три года работаешь, полный доступ к MSDN - весь софт доступен для закачки. После окончания программы гибко выходишь. Если успешен, то сам начинаешь все потихоньку покупать, если не заработал - уходишь тихо (причем с плюшками). Видимо до отдела программ поддержки не добрались менеджеры последние. Потом рассуждая логически, Энтерпрайз, как все большое и богатое очень неповоротлив в принятии решений, бюрократия, иерархия... Только Стартапы и индивидуалы открыты ко всему новому и прогрессивному. То есть первые в состоянии оценить и рекламировать. А потом и те Слоны обратят внимание.
    1 балл
  8. Gingercat

    RAD 11 на подходе?

    Также ковырял в свое время Xamarin, но так и не понял - на кой черт мне писать на шарпе, если по сути пишешь на яве - проще тогда сразу яву использовать. А про Qt - как только дело доходит до чего либо более серьезного, чем окошки с кнопками, начинаются костыли. Опять же - лично мое, сугубо субъективное мнение, основанное на уровне, достаточном для написания нескольких графических фильтров - возможно и не прав. А вот что совсем опечалило - поддержка CSS. По сути, это чертовски удобно, для тех, кто знает CSS. Ага, щас - CSS то обрезанный по самое немогу - на кой черт заявлять про поддержку). А вот цена для Rad Studio - да, кусючая. Чего бы не говорили, мол "если проект не принесет нескольких десятков тыщ уе, то на кой он нужен", для рядового пользователя, который пытается чего то сделать - неподъемно.
    1 балл
  9. SergeyIT

    Теория

    Насколько я Вас понял, речь идет просто о передаче зависимости от одного класса к другому. Обычно различают передачу поведения от передачи собственно данных. Если речь о простом наборе данных, как правило неизменяемых, то их транслируют созданием специального класса (обычно конкретного, но можно и интерфейсом) - их так и называют DTO (Data transfer object). И наполняют примитивными типами. Если это нечто более общее, с элементами поведения, то это уже не данные, а именно зависимость (и поведение, и данные). Извиняюсь за философские отступления. 1. Создайте интерфейс ISomeDependency, объявите в нем протокол (набор свойств и методов), далее создайте класс, который реализует этот протокол. 2. Организуйте способ передачи этого интерфейса из одного класса в другой: свойством или методом. Например, TTargetedClass.SetSomeDependency(someDependency : ISomeDependency); Все, используйте зависимость по своему усмотрению.
    1 балл
  10. SergeyIT

    RAD 11 на подходе?

    @haword Это Samsung который, если правильно понял. ИМХО, на одном С++ они проиграют. Даже если все школьники Кореи начнут писать на нем, начиная с памперсов. Мир изменился - приложения сейчас если и живут долго мобильные, то должны постоянно обновляться. С++ имеет высокий порог вхождения и более низкую скорость разработки. Им в альянс войти надо с Причалом и Delphi - основным языком туда. Учитывая опыт в компиляторах... Это была бы БОМБА!
    1 балл
  11. Kitty

    RAD 11 на подходе?

    Лучше пусть приложения в новой студии для Андроид станут стабильными и быстыми и без падений студии и приложений (и в дельфи и С++ среде). А новые не перспективные рынки лучше не охватывать: http://www.theverge.com/2016/1/28/10864034/windows-phone-is-dead Навести порядок в том, что есть, лучше.
    1 балл
  12. Для ищущих ответа: Есть стандартное demo Object Pascal\Mobile Snippets\AndroidIntents\AndroidIntentsGroup.groupproj, в котором показано как из одного приложения передавать данные другому. С помощью этого примера удалось передавать данные из сервиса в основное приложение. В юните основного приложения пишем: uses FMX.Platform, FMX.Platform.Android, Androidapi.JNI.JavaTypes, Androidapi.JNI.Net, Androidapi.JNI.Os, Androidapi.Helpers, System.Messaging, Androidapi.JNI.GraphicsContentViewText; private { Private declarations } function HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; procedure HandleActivityMessage(const Sender: TObject; const M: TMessage); function HandleIntentAction(const Data: JIntent): Boolean; procedure TForm1.FormCreate(Sender: TObject); var AppEventService: IFMXApplicationEventService; begin ... if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, AppEventService) then AppEventService.SetApplicationEventHandler(HandleAppEvent); // Register the type of intent action that we want to be able to receive. // Note: A corresponding <action> tag must also exist in the <intent-filter> section of AndroidManifest.template.xml. MainActivity.registerIntentAction(TJIntent.JavaClass.ACTION_VIEW); TMessageManager.DefaultManager.SubscribeToMessage(TMessageReceivedNotification, HandleActivityMessage); end; procedure TForm1.HandleActivityMessage(const Sender: TObject; const M: TMessage); begin if M is TMessageReceivedNotification then HandleIntentAction(TMessageReceivedNotification(M).Value); end; function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean; var StartupIntent: JIntent; begin Result := False; if AAppEvent = TApplicationEvent.BecameActive then begin StartupIntent := MainActivity.getIntent; if StartupIntent <> nil then HandleIntentAction(StartupIntent); end; end; function TForm1.HandleIntentAction(const Data: JIntent): Boolean; var Extras: JBundle; begin Result := False; if Data <> nil then begin Memo1.ClearContent; // записываем в Memo пришедшее сообщение Extras := Data.getExtras; if Extras <> nil then Memo1.Text := JStringToString(Extras.getString(TJIntent.JavaClass.EXTRA_TEXT)); Invalidate; end; end; в AndroidManifest.template.xml добавляем <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:mimeType="text/pas" /> Отправка сообщения из сервиса делается так: SendTextViaIntent('Hello from service'); procedure TAndroidServiceDM.SendTextViaIntent(const AText: string); var Intent: JIntent; begin Intent := TJIntent.Create; Intent.setType(StringToJString('text/pas')); Intent.setAction(TJIntent.JavaClass.ACTION_VIEW); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); // добавил такой флаг, без него сервис затыкался Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(AText)); if TJContextWrapper.Wrap(System.JavaContext).getPackageManager.queryIntentActivities(Intent, TJPackageManager.JavaClass.MATCH_DEFAULT_ONLY).size > 0 then TJContextWrapper.Wrap(System.JavaContext).startActivity(Intent); // заменил MainActivity на TJContextWrapper.Wrap(System.JavaContext), т.к. это сервис end; Работает исправно, хоть 100%-ую правильность кода не гарантирую Но как передать сообщение из основной программы обратно в сервис я пока не знаю. Также делать хендл внутри сервиса? Попытался просто добавить FMX.Platform, в результате получаю ошибку в FMX.Platform.Android вываливается ошибка об использовании Activity внутри сервиса.
    1 балл
  13. function idHttpGet(const aURL: string): string; // uses System.Net.HttpClient, System.Net.HttpClientComponent, System.Net.URLClient; var Resp: TStringStream; Return: IHTTPResponse; begin Result := ''; with TNetHTTPClient.Create(nil) do begin Resp := TStringStream.Create('', TEncoding.ANSI); Return := Get( { TURI.URLEncode } (aURL), Resp); Result := Resp.DataString; Resp.Free; Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(idHttpGet('http://airnav.tj/ru/online/utdd')); end; Держи
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...