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

bigjorj

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

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

  • Посещение

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

    13

Активность репутации

  1. Thanks
    bigjorj получил реакцию от zairkz в Прогрессбар во время загрузки файла.   
    Вот пример моего потока загрузки
    Запуск:
    unit DownloadT; interface uses System.Classes, System.Net.URLClient, System.Net.HttpClient, System.Net.HttpClientComponent, System.SysUtils; type TonDownloadProgress = procedure (Progress:integer) of object; TonDownloadEnd = procedure (FileName:string; Done:boolean; MessageText:string='') of object; TDownloadThread = class(TThread) private IdHTTP1: TNetHTTPClient; fonDownloadProgress:TonDownloadProgress; FonDownloadEnd: TonDownloadEnd; Done: boolean; Max: integer; ProgressValue: integer; procedure ReceiveData(const Sender: TObject; AContentLength:int64; AReadCount:int64; var Abort:boolean); procedure SetonDownloadProgress(const Value: TonDownloadProgress); procedure SetonDownloadEnd(const Value: TonDownloadEnd); protected procedure Execute; override; public url, Status: string; Filename: string; property onDownloadProgress: TonDownloadProgress read FonDownloadProgress write SetonDownloadProgress; property onDownloadEnd: TonDownloadEnd read FonDownloadEnd write SetonDownloadEnd; end; implementation { TDownloadThread } procedure TDownloadThread.Execute; var MyFile: TMemoryStream; begin FreeOnTerminate := true; IdHTTP1 := TNetHTTPClient.Create(nil); MyFile := TMemoryStream.Create(); try IdHTTP1.OnReceiveData := ReceiveData; IdHTTP1.HandleRedirects := true; MyFile.Position := 0; IdHTTP1.Get(url, MyFile); MyFile.SaveToFile(Filename); Done := true; MyFile.Free; IdHTTP1.Free; if Assigned(FonDownloadEnd) then Synchronize(procedure begin FonDownloadEnd(Filename, True); end); except on E:Exception do if Assigned(FonDownloadEnd) then Synchronize(procedure begin FonDownloadEnd(Filename, False, E.Message); end); end; end; procedure TDownloadThread.ReceiveData(const Sender: TObject ; AContentLength:int64 ; AReadCount:int64 ;var Abort:boolean); begin if Terminated then Abort := true else begin Done := false; ProgressValue := AReadCount; if Assigned(fonDownloadProgress) then Synchronize(procedure begin if AContentLength>0 then fonDownloadProgress(Trunc(ProgressValue / AContentLength * 100)) else fonDownloadProgress(0); end); end; end; procedure TDownloadThread.SetonDownloadEnd(const Value: TonDownloadEnd); begin FonDownloadEnd := Value; end; procedure TDownloadThread.SetonDownloadProgress(const Value: TonDownloadProgress); begin FonDownloadProgress := Value; end; end. Запуск:
    procedure TMainForm.InstallUpdates(aDownloadLink:string); begin DownloadThread:=TDownloadThread.Create(true); DownloadThread.Filename := TPath.Combine(Options.WorkPath,'updates.exe'); DownloadThread.url := aDownloadLink; DownloadThread.onDownloadEnd := OnDownloadEnd; DownloadThread.onDownloadProgress := OnDownloadProgress; DownloadThread.Start;  
  2. Like
    bigjorj отреагировална Равиль Зарипов (ZuBy) в RAD 11 на подходе?   
    намек на то, что они тоже должны свернуться т.к. Embarcadero не хочет иметь с ними дело
  3. Like
    bigjorj получил реакцию от Rusland в Редактор ListView 2 - DynamicAppearance   
    А в чем проблема с ImageList?
    Присвоил ListView свой ImageList и при заполнении ListItem 
    var IItem:TListItemImage; IItem:=aItem.Objects.FindDrawable('Image5') as TListItemImage; if (IItem<>nil) then IItem.ImageIndex:=1  
  4. Like
    bigjorj отреагировална Равиль Зарипов (ZuBy) в Диалоговое окно на Андроид.   
    krapotkin выкладывал когда-то MyDialogs
    Изменения от меня:
      Переписан код, удалены лишние компоненты   Подогнал под стандартные диалоги платформ   Смена позиции кнопок "Oк", "Отмена" в зависимости от платформы   Профиксил MaxLength для TEdit (при установке ограничении ввода символов для мобильных платформ)   Возможность использования анонимных методов (TThreadProcedure) MyDialogs_ZuBy.7z
  5. Like
    bigjorj отреагировална RoschinSpb в RAD 11 на подходе?   
    Вангую, что второе
  6. Like
    bigjorj отреагировална RoschinSpb в RAD 11 на подходе?   
    Джентльмены, про проблему с инсталляцией на русскую винду, ответственные работники уже поставлены в известность. Разбираются. И ...это... санкции тут не при чем. 
     
  7. Like
    bigjorj получил реакцию от Sergionn в RAD 11 на подходе?   
    Опубликован новый прайс-лист... Ничего хорошего.
    Как и ожидалось подняли цену на все поставки на стоимость годовой подписки.
    Раньше профка стоила                   $ 1081
    Теперь (с 10% скидкой до 19 мая) $ 1265
    Можно только порадоваться за компанию, видимо лицензии раскупают как горячие пирожки раз приходится поднимать цены.
     
  8. Like
    bigjorj получил реакцию от Равиль Зарипов (ZuBy) в RAD 11 на подходе?   
    Опубликован новый прайс-лист... Ничего хорошего.
    Как и ожидалось подняли цену на все поставки на стоимость годовой подписки.
    Раньше профка стоила                   $ 1081
    Теперь (с 10% скидкой до 19 мая) $ 1265
    Можно только порадоваться за компанию, видимо лицензии раскупают как горячие пирожки раз приходится поднимать цены.
     
  9. Like
    bigjorj получил реакцию от Rusland в RAD 11 на подходе?   
    Опубликован новый прайс-лист... Ничего хорошего.
    Как и ожидалось подняли цену на все поставки на стоимость годовой подписки.
    Раньше профка стоила                   $ 1081
    Теперь (с 10% скидкой до 19 мая) $ 1265
    Можно только порадоваться за компанию, видимо лицензии раскупают как горячие пирожки раз приходится поднимать цены.
     
  10. Like
    bigjorj получил реакцию от Kitty в RAD 11 на подходе?   
    Опубликован новый прайс-лист... Ничего хорошего.
    Как и ожидалось подняли цену на все поставки на стоимость годовой подписки.
    Раньше профка стоила                   $ 1081
    Теперь (с 10% скидкой до 19 мая) $ 1265
    Можно только порадоваться за компанию, видимо лицензии раскупают как горячие пирожки раз приходится поднимать цены.
     
  11. Like
    bigjorj отреагировална Brovin Yaroslav в Как включать/выключать отображение пробок?   
    Обычные операции по работе с множествами :-)
    TMapLayerOption.Traffic in MapView.LayerOptions;  
  12. Like
    bigjorj отреагировална Равиль Зарипов (ZuBy) в DeviceInfo - модуль для получения информации о девайсе   
    * исправил падение приложении на IOS 64bit
    исправленная версия в первом сообщении
  13. Like
    bigjorj отреагировална Brovin Yaroslav в [TPopupBox] Как программно открыть PopupBox?   
    Странно, что у компонента TPopupBox нету публичного метода для этого. Добавим. Однако, пока открыть можно только так:
    type TOpenPopupBox = class(TPopupBox); procedure TForm1.Button1Click(Sender: TObject); begin TOpenPopupBox(PopupBox1).DoPopup; end;  
  14. Like
    bigjorj отреагировална kami в vkbdhelper - поднятие компонентов над клавиатурой   
    Коллеги, прошу при возможности протестировать очередную модификацию модуля.
    К сожалению, Santya видимо покинул форум надолго, так что отработать решение проблемы и возможные недостатки на "первом подопытном" не удалось.
     
    Основные изменения: очень многое переписал. По большому счету от исходного модуля осталась идея и два фундаментальных момента.
     
    Как обычно, спасибо Rusland за тестирование.    Осталось проверить, как ведет себя модуль с ScrollBox-ами, которые не растянуты на всю форму.
     
    vkbdhelper.zip
  15. Like
    bigjorj отреагировална Brovin Yaroslav в TShadowEffect   
    Все применения эффектов кэшируются, так как применение эффекта очень ресурсоемкая задача. То есть под конечное изображение выделяется дополнительный буфер, содержащий результирующее изображение с эффектом. Кэш обновляется либо в ручную, либо автоматически в нескольких случаях. При скроллировании, видимо эффект не обновляется. Это можно сделать в OnViewPortPositionChanged в ручную.
    var EffectContainer: IEffectContainer; begin if Supports(Button1, IEffectContainer, EffectContainer) then EffectContainer.NeedUpdateEffects; Но повторюсь, в этом случае у вас заметно замедлиться скорость прокрутки. Лучше использовать для тени прозрачную png картинку, подложенную в стиль итема.
  16. Like
    bigjorj получил реакцию от Равиль Зарипов (ZuBy) в RAD 11 на подходе?   
    Новый сайт Embarcadero https://www.embarcadero.com Вообще убрано упоминание про продукты кроме Студии (opd: их оказывается перенесли на сайт www.idera.com ). Похоже началась активная фаза слияния. Ой страшно мне.....
     
    И самое интересное! Смотрите https://www.embarcadero.com/app-development-tools-store/delphi я надеюсь это ошибка.... $83 129,88 
  17. Like
    bigjorj отреагировална Sergionn в Thoma Bravo Announces Sale of Embarcadero to Idera, Inc.   
    В примерах на сайте есть скриншот, и вверху такая фраза 
    "Created by Eugene", кроме Всеволода, не автор ли самого fmx, Евгений К. "стоит" за этим продуктом? 
    в любом случае мне кажется, что создатели этого плагина хотят еще раз (на бис?) повторить путь/"успех" vgscene
  18. Like
    bigjorj получил реакцию от Sergionn в Thoma Bravo Announces Sale of Embarcadero to Idera, Inc.   
    Это плагин для дизайна форм в XCode, а программирования в Delphi. Сомнительно как-то если уж писать в XCode, то писать.
    off: Кстати вот кто там продукт менеджер...
     
  19. Like
    bigjorj получил реакцию от Kitty в Android frames   
    Я обычно создаю фреймы динамически, особенно кода они на главной форме. Это нужно для того чтобы ускорить загрузку приложения на мобильных платформах. Потом при первой необходимости создаю и обычно не удаляю, опять-же потому что создание фрейма занимает время и каждый раз его пересоздавать затратно. Если фрейм используется редко, то конечно лучше удалять его из памяти.
  20. Like
    bigjorj получил реакцию от Andrey Efimov в Android frames   
    Я обычно создаю фреймы динамически, особенно кода они на главной форме. Это нужно для того чтобы ускорить загрузку приложения на мобильных платформах. Потом при первой необходимости создаю и обычно не удаляю, опять-же потому что создание фрейма занимает время и каждый раз его пересоздавать затратно. Если фрейм используется редко, то конечно лучше удалять его из памяти.
  21. Like
    bigjorj получил реакцию от Rusland в Bug fix list for RAD Studio 10 Seattle Update 1   
    Да. Только Upd1. Он исправляет утечку памяти при которой после некоторого времени работы со студией она начинает безбожно тормозить.
  22. Like
    bigjorj отреагировална Равиль Зарипов (ZuBy) в [Android] Как изменить цвет системного статус бара и разместить контролы под ним?   
    Тема оказалась настолько интересна что занялся ей подробней.
     
    Мы с zairkz убили много времени, чтобы понять как выкрасить в один цвет без полупрозрачности, взяв скриншот и фотошоп определили, что затемнение происходит на 40%
     
    Решение родилось само собой, затемнить цвет ToolBar'a на 40% и цвет выровняется.
    Казалось бы можно осветлить цвет для подложки и цвет тоже выровнится, но например белый или светлые цвета нельзя еще осветлить.
     

     
    также написал процедуру для определения высоты статус бара и панели навигации
    procedure androidGetBounds(out statusBar, navigationBar: Integer); {$IFDEF ANDROID} var KeyCharacterMap: JKeyCharacterMap; resourceID: Integer; ScreenService: IFMXScreenService; sScale: Single; {$ENDIF} begin navigationBar := 0; statusBar := 0; {$IFDEF ANDROID} if TOSVersion.Check(5, 0) then // вроде только работает с 5.0 ниже нет устройства проверить begin sScale := 1; if TPlatformServices.Current.SupportsPlatformService(IFMXScreenService, IInterface(ScreenService)) then sScale := ScreenService.GetScreenScale; //получаем скейл resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('status_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then statusBar := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID) / sScale); if not TJKeyCharacterMap.JavaClass.deviceHasKey(TJKeyEvent.JavaClass.KEYCODE_BACK) then // проверка на существование наэкранных кнопок или физических begin resourceID := TAndroidHelper.Activity.getResources.getIdentifier(StringToJString('navigation_bar_height'), StringToJString('dimen'), StringToJString('android')); if resourceID > 0 then navigationBar := Trunc(TAndroidHelper.Activity.getResources.getDimensionPixelSize(resourceID) / sScale); end; end; {$ENDIF} end; и в модуле FMX.Platform.Android нужно изменения внести (если вы используете измененный модуль для Intel'а)
    // Fix by Flying Wang & CallInUIThread( procedure begin if (not PlatformAndroid.GetFullScreen(nil)) and (SharedActivity.getWindow.getAttributes.Flags and TJWindowManager_LayoutParams.JavaClass.FLAG_FULLSCREEN <> TJWindowManager_LayoutParams.JavaClass.FLAG_FULLSCREEN) and (SharedActivity.getWindow.getAttributes.Flags and TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS <> TJWindowManager_LayoutParams.JavaClass.FLAG_TRANSLUCENT_STATUS) // fix by ZuBy ... SystemBar.zip
  23. Like
    bigjorj отреагировална Brovin Yaroslav в [Android] Как изменить цвет системного статус бара и разместить контролы под ним?   
    Поскольку тема вызывает не поддельный интерес у пользователей. Я расскажу, как это делал я для одной демо программы, которую я готовил для выступления в ИТМО. Сразу приложу скриншот, как это будет выглядеть:

     
    Сразу скажу, что это решение временное и имеет ряд определенных нюансов, которые появятся после его использования. О том, как исправить эти нюансы указано в самом конце.
    Теперь к делу. Андроид позволяет сделать статус бар прозрачным с наложением белого цвета с альфа каналом. Это значит, если мы разместим под статус баром зеленый цвет, то статус бар станет соответствующего темно зеленого цвета. Этим и воспользуемся. Основная идея такая:
    Говорим Андроиду, что хотим прозрачный статус бар. Указываем андроиду, что хотим размещать форму под статус баром. Размещаем под статус баром TRectangle нужного цвета, в тон TToolBar (если используете) Теперь по шагам:
     
    1. Говорим Андроиду, что хотим прозрачный статус бар. Указываем андроиду, что хотим размещать форму под статус баром.
    Создаем файл style.xml со стилем для нашего приложения.
    <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="AppTheme" parent="@android:style/Theme.Holo.Light"> <item name="android:windowTranslucentStatus">true</item> <item name="android:windowTranslucentNavigation">true</item> <item name="android:windowBackground">@drawable/splash_image_def</item> <item name="android:windowNoTitle">true</item> </style> </resources> В стиле указываем, что мы хотим использовать прозрачный статус бар.
     
    Открываем Менеджер развертывания Menu->Project->Deployment Manager и добавляем наш файл стиля в проект только для андроид конфигураций:

    Remote Path: "res\values\" Remote Name: "styles.xml" Теперь при запуске программы, андроид будет считать, что:
      Приложение будет развернуто на весь экран Статус бар будет прозрачного цвета. 3. Размещаем под статус баром TRectangle нужного цвета, в том TToolBar (если используете)
    Я разместил вверху формы TRectangle, который залил требуемым цветом, в тон тул бару:

    Высота статус бара у андроида равна 24.
     
    Если вы делаете кроссплатформенный проект и для ios тоже, то по умолчанию скрываем этот прямоугольник и добавляем код по его отображению в конструктор формы только на андроиде
    constructor TFormMain.Create(AOwner: TComponent); begin inherited Create(AOwner); {$IFDEF ANDROID} SystemStatusBarBackground.Visible := True; {$ENDIF} end; В принципе все готово.
     
    Побочные эффекты
     
    По скольку это решение сделано сбоку, то пара моментов, которые придется в вашей программе следить:
    Нативные контролы распологаются по старому, полагая, что форма располагается под статус баром, а не под формой. Поэтому для нативных контролов таких, как TMapView, нужно корректировать позицию или отступы. {$IFDEF ANDROID} MapView.Margins.Top := -SystemStatusBarBackground.Height; {$ENDIF} Формы располагается так же и под нижними программными кнопками: Назад, домой и меню. Поэтому нужно так же иметь в виду, что расположенные снизу контролы, не будут кликабельны. Так как перекрываются нижней панелью с кнопками. Решение - это разместить TLayout под нижней панелью, чтобы сдвинуть ваши контролы к верху.
  24. Like
    bigjorj отреагировална 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? Это не моя тема. Мне трудно думать про указатели, когда надо думать про логику. Увы, не дано... Не владею темой.
    Так что пока нас не слишком много в сравнении с Китаем, есть шанс, что быстро ответят на заданный вопрос... Скоро эта халява закончится...
  25. Like
    bigjorj отреагировална Gingercat в RAD 11 на подходе?   
    Доброго времени суток. Навеяно постом 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 на данный момент, по сути лучшая. Прошу не судить строго (далеко не профессионал в плюсах), но опыт кой какой имеется. Так что пущай развиваются))
×
×
  • Создать...