-
Постов
1 204 -
Зарегистрирован
-
Посещение
-
Победитель дней
26
Активность репутации
-
Rusland отреагировална Равиль Зарипов (ZuBy) в Порядок запуска TBitmapListAnimation
картинка из примера
Загружаем её в BitmapListAnimation
настройка BitmapListAnimation
ну и не забываем
BitmapListAnimation1.Enabled := true;
-
Rusland отреагировална ENERGY в Серия статей, как настроить Android, OS X, iOS Simulator, iOS с RAD Studio (Delphi, C++ Builder)
Наоборот, профи советуют ставить рекомендуемые, протестированные версии SDK, те что идут по умолчанию с пакетом.
Note: You need to use the recommended versions of the Android development tools. RAD Studio might not support changes that alternative versions introduce.
http://docwiki.embarcadero.com/RADStudio/Seattle/en/Installing_the_Android_Development_Tools
Хотите случайных багов, - все в ваших руках.
Можно и без устройства, на симуляторе.
Все руководства уже расписаны: http://docwiki.embarcadero.com/RADStudio/Berlin/en/Mobile_Tutorial:_Set_Up_Your_Development_Environment_on_the_Mac_(iOS)
-
Rusland отреагировална ENERGY в Фотография стандартной камерой смартфона
Сделал решение для описанного выше варианта.
Добавил его на Stackoverflow
unit Misc.Android; interface uses SysUtils, Androidapi.JNI.GraphicsContentViewText, Androidapi.Helpers, Androidapi.JNI.JavaTypes, Androidapi.JNIBridge, Androidapi.JNI.Provider; type TGallery = class public class function GetLastImageID: integer; class function GetNextImageIDFromID(aFromID: integer; out aImagePath: string): integer; class function DeleteImageByID(aID: integer): boolean; end; implementation const _ID = '_id'; // TJBaseColumns.JavaClass._ID // uri in Androidapi.JNI.Provider { TGallery } {If you're using action TakePhotoFromCameraAction remember to set NeedSaveToAlbum to true. It does not work, because of Android problems, but it can work in future.} class function TGallery.GetLastImageID: integer; var vContent: JContentResolver; vValues: TJavaObjectArray<JString>; vOrderBy: JString; vCursor: JCursor; begin Result := -1; vContent := TAndroidHelper.Activity.getContentResolver; vValues := TJavaObjectArray<JString>.Create(1); vValues[0] := TJBaseColumns.JavaClass._ID; vOrderBy := StringToJString(_ID + ' DESC'); vCursor := vContent.query(TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI, vValues, nil, nil, vOrderBy); try if vCursor.moveToFirst then Result := vCursor.getInt( vCursor.getColumnIndex(TJBaseColumns.JavaClass._ID) ); finally vCursor.close; end end; // Result is next Image ID and its aImagePath - is path to jpg image class function TGallery.GetNextImageIDFromID(aFromID: integer; out aImagePath: string): integer; var vContent: JContentResolver; vValues: TJavaObjectArray<JString>; vFilter: JString; vOrderBy: JString; vArgs : TJavaObjectArray<JString>; vCursor: JCursor; begin Result := -1; aImagePath := ''; vContent := TAndroidHelper.Activity.getContentResolver; vValues := TJavaObjectArray<JString>.Create(2); vValues[0] := TJMediaStore_MediaColumns.JavaClass.DATA; vValues[1] := TJBaseColumns.JavaClass._ID; // vValues[1] := TJMediaStore_MediaColumns.JavaClass.SIZE; // vValues[1] := TJImages_ImageColumns.JavaClass.DATE_TAKEN; vOrderBy := StringToJString(_ID + ' DESC'); vFilter := StringToJString(_ID + '>?'); vArgs := TJavaObjectArray<JString>.Create(1); vArgs[0] := StringToJString(aFromID.ToString); vCursor := vContent.query(TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI, vValues, vFilter, vArgs, vOrderBy); try if (vCursor.getCount > 0) and vCursor.moveToFirst then begin Result := vCursor.getInt( vCursor.getColumnIndex(TJBaseColumns.JavaClass._ID) ); // vCursor.getLong(imageCursor.getColumnIndex(MediaStore.Images.Media.DATE_TAKEN)); //vSize := wCursor.getLong(wCursor.getColumnIndex(TJMediaStore_MediaColumns.JavaClass.SIZE)); aImagePath := JStringToString(vCursor.getString( vCursor.getColumnIndex(TJMediaStore_MediaColumns.JavaClass.DATA) )); end; finally vCursor.close; end; end; class function TGallery.DeleteImageByID(aID: integer): boolean; var vContent: JContentResolver; begin vContent := TAndroidHelper.Activity.getContentResolver; Result := vContent.delete(TJImages_Media.JavaClass.EXTERNAL_CONTENT_URI, StringToJString(_ID + '=' + aID.ToString), nil) = 1; end; end. -
Rusland отреагировална Евгений Корепов в [TMultiView] Починили TMultiView.Enable в Tokyo
Починили TMultiView.Enable в Tokyo, вот небольшой видео-пример:
https://www.youtube.com/watch?v=T0gJwfiyRyY
-
Rusland отреагировална ENERGY в Кто вызвал процедуру
Upd
Используйте Call Stack (View > Debug Windows)
-
Rusland отреагировална denprox в TCombobox и TextSettings
Изменить размер шрифта у ComboBox можно таким образом:
procedure TForm1.ComboBox1ApplyStyleLookup(Sender: TObject); var Item : TListBoxItem; i : Integer; begin for i := 0 to ComboBox1.Count-1 do begin Item := ComboBox1.ListItems[i]; Item.Font.Size := 18; Item.StyledSettings := Item.StyledSettings - [TStyledSetting.Family,TStyledSetting.Size,TStyledSetting.FontColor]; end; end;
-
Rusland получил реакцию от Menkos1 в Клавиша Tab
Так всегда и надо делать, тогда Tab / Shift+Tab работает корректно
-
Rusland отреагировална Равиль Зарипов (ZuBy) в DeviceInfo - модуль для получения информации о девайсе
ну если вам для андроида, то есть один вариант
ANDROID_ID
// uses Androidapi.Helpers, Androidapi.JNI.Provider; // permission read_phone_state ShowMessage(JStringToString(TJSettings_Secure.JavaClass.getString(TAndroidHelper.ContentResolver, TJSettings_Secure.JavaClass.ANDROID_ID)));
-
Rusland отреагировална AliZairov в "Cant load package..." ошибка
Привет. Я сделал установку на CorssOver ( WineHQ ).
-
Rusland отреагировална krapotkin в Get запросы в iOS
Пользуйтесь Try - Except
try THttpClient.Create.Get(URL); HasConnection := true; except HasConnection := false; end;
Ну и вместо компонента TNetHTTPClient я обычно пользуюсь классом THTTPClient в отдельном потоке
-
Rusland отреагировална Равиль Зарипов (ZuBy) в Get запросы в iOS
проверка интернета
function CheckInet: boolean; var aResp: IHTTPResponse; aHTTP: THTTPClient; begin Result := false; aHTTP := THTTPClient.Create; try try aResp := aHTTP.Head('http://google.com'); Result := aResp.StatusCode < 400; except Result := false; end; finally FreeAndNil(aHTTP); end; end; get запрос
function HTTPGet(const aURL: string): string; var aHTTP: THTTPClient; aResp: TStringStream; begin Result := 'Error'; aResp := TStringStream.Create('', TEncoding.UTF8); aHTTP := THTTPClient.Create; try try aHTTP.Get(aURL, aResp); Result := aResp.DataString; except Result := 'Error'; end; finally FreeAndNil(aHTTP); FreeAndNil(aResp); end; end;
-
Rusland отреагировална Евгений Корепов в Одинаковые логотипы и картинки
Получите от медицинского центра разрешение на использование их логотипа. Можно на русском языке. Текст произвольный - поручаем Kitty изготовление приложения и разрешаем использование логотипов, торговых марок, фирменных наименований и т.д. в приложениях.
Подробнее здесь https://play.google.com/intl/ru/about/ip-deception-spam/impersonation-ip/
И отправьте скан (pdf к примеру) этого письма в гугл, подробности тут https://support.google.com/googleplay/android-developer/answer/6320428
Последнее время все сложнее публиковать приложения, правила уже балансируют на грани маразма. Одно моё приложение заблокировали по причине того что я "выдавал" себя за магазин линолиума в какой то немецкой деревушке - логотип приложения был немного искаженной зеркальной копией логотипа этого магазина, так же отличались цвета - у магазина желтый, у приложения оранжевый. Вот такие дела...
Так же сильно зависит от места модерации - если повезет попасть в британский офис, то вам досконально объяснят причину блокировки, приведут примеры правильного и не правильного решения вашего вопроса. Вот пример из моей практики:
Если не повезет попасть в подмосковье - то вы не получите комментариев, апелляция будет проигнорирована и относится к вам будут как к ничтожеству. Российская специфика - мальчик получивший работу в Великом Гугле, благодаря двоюродному дяде, сам становится Великим. И естественно он обязан быть гавном, так у него в должностной инструкции написано ;-)
-
Rusland отреагировална AngryOwl в TVideoCaptureDevice, трансляция в потоке
Есть такое дело. Он (Боян Митов) один автор сего продукта. Делает его ооооочень давно. В последнее время ударился в создание компонент и библиотек для работы с Arduino (почитать все новости можно в блоге). Недавно объявил о том, что скоро появится версия VideoLab для FMX с поддержкой не только Windows, но и MacOS и Android.
-
Rusland отреагировална ASovtsov в ListVew как лента твиттера
Сделал маленький пример, как использовать Binding Expressions в Design Time. По прилагаемому снимку экрана легче ориентироваться в выборе компонент.
Подробнее на эту тему здесь: http://docwiki.embarcadero.com/RADStudio/Berlin/en/Using_Custom_Format_and_Parse_Expressions_in_LiveBindings
pLBExpr1.zip
-
Rusland отреагировална HyperZen в InputQuerySync реагирует только на OK
procedure GoToWithInputBox; begin TDialogServiceAsync.InputQuery('Введите номер страницы', ['№ страницы:'], [''], procedure(const AResult: TModalResult; const AValues: array of string) begin case AResult of mrOk: begin if AValues[0] <> '' then begin // делаем что надо с полученным значением по кнопке ОК, введенное значение в AValues[0] end; end; mrCancel: begin Exit; // тут выполняем действия по кнопке Отмена end; end; end ); end;
-
Rusland отреагировална krapotkin в TVideoCaptureDevice, трансляция в потоке
я не вдавался в прямо подробности, но
http://s408599889.onlinehome.us/forumdisplay.php?fid=18
это ветка форума
VideoLab / Firemonkey components
-
Rusland отреагировална AngryOwl в TVideoCaptureDevice, трансляция в потоке
Нет нет. Есть и под FMX. Смотрите на странице загрузки - Firemonkey and VCL, Current Version Installers.
Но проблемы все те же останутся. Только Windows и сложность организации rtmp-потоков.
-
Rusland отреагировална AngryOwl в TVideoCaptureDevice, трансляция в потоке
Называется VideoLab (библиотека для работы с видео)
Проблем с ним несколько.
Во-первых - это только под Windows (уточним, насколько я знаю, сейчас Митов занимается созданием кроссплатформенной версии библиотеки, и вроде у него уже есть "наброски" (разумеется - под FMX), но когда появится релиз - не знаю).
Во-вторых - непосредственно сама эта либа работать с RTMP не может. Так-что прийдется использовать фильтры, которые еще найти надо будет, если они есть )))
-
Rusland отреагировална AngryOwl в TVideoCaptureDevice, трансляция в потоке
На случай "своими руками", я бы порекомендовал Вам копать в сторону WebRTC. Разумеется все зависит от конечных задач, стоящих перед Вашей программой. Судя по всему - это организация потокового видео в режиме реального времени на соответствующие сервисы. А это значит, что:
- нужно организовать формирование и передачу RTMP (RTSP) потока, с чем в Delphi (если о нем речь идет) есть определенные сложности) (в ситуации с С++ будет немного проще);
- нужно использовать кодеки (encoder), формат которых поддерживается теми системами, на которых вы хотите видеть воспроизведение потока. Аналогично, как и в вопросе с rtmp-потоком, ситуация с реализацией в Delphi будет сложнее (хотя тоже можно);
- что касается конвертации кадров из одного формата в другой, то тут все немного проще. В интернете полно алгоритмов описывающих конвертацию битмапа из одного формата в другой. Разумеется - не все так просто. Поскольку необходимо не просто конвертировать кадры, перед тем как передать их энкодеру, но еще и правильно от энкодера получить сам поток и передать его. После энкодера, конечно, идут не просто "кадры". В зависимости от настроек энкодера, сначала идет "ключевой кадр" (и он повторяется с определенной периодичностью), а за ним последовательность "фреймов" - "описывающих" лишь изменения в "ключевом кадре".
Кратко как-то так...
В любом случае, я бы порекомендовал Вам сначала пошарить по ресурсу, описывающему работу с потоковым видео. Просто понять как это работает, в принципе. Ну и многое можно там же подчерпнуть. Например, просто как оптимальнее настроить энкодер для трансляции того или иного видео.
-
Rusland отреагировална sinuke в Учебное приложение "Слесарное дело"
Вышло обновление до версии 1.5.0:
- Исправлены переходы в глоссарии
- Значительно уменьшен размер приложения
- Настройки автоматической проверки обновлений
- [Windows] Переработка приложения для Windows
- [Windows] Добавлены анимации перехода
- [Windows] Минимальные размеры окна ограничены 800 пикселями по ширине и 600 по высоте
- [Android] Системная строка подкрашивается в "фирменный" синий во всех режимах работы приложения
- [Android] Отключена анимация перетаскивания элементов бокового меню
- [Android] Индикатор загрузки
- [Android] Навигационная панель больше не перекрывает интерфейс приложения
- [Android] Исправлена ошибка с сохранением PDF-документа
- [Android] Увеличена скорость вывода информации и тестирования
- [Android] Немного изменен внешний вид экрана вывода результата тестирования
Ссылка на скачивание Android-версии: https://yadi.sk/d/edIZR2VuuRFce
Ссылка на скачивание Windows-версии: https://yadi.sk/d/iIeC0OE8ukMoi
-
Rusland отреагировална ENERGY в Утечка при использовании анонимного метода или анонимные методы, циклические ссылки и ARC
https://quality.embarcadero.com/browse/RSP-17060
-
Rusland отреагировална Равиль Зарипов (ZuBy) в Подключение в VCL компонента FMX
Чтобы сделать аналог TLayout в VCL, достаточно унаследоваться от TWinControl
Я так понимаю, вам нужен прозрачный компонент с возможностью держать в себе компоненты?
Update: добавил компонент
TLayout Win32.zip
-
Rusland получил реакцию от Brovin Yaroslav в Не работает поток на других ПК
Как определили что поток не запускается на другом ПК? И что значит " Поток должен мониторить визуальный компонент"?
-
Rusland отреагировална enatechno в Зависает программа, использующая фреймы (Android)
1 Вариант. Заменой удаления фреймов на скрытие (подправленный проект приложил).
2 Вариант. Расположить панель с кнопкой Back на главной форме, а не дублировать ее в каждом фрейме. (При необходимости саму кнопку Back можно скрывать при возврате на первый таб).
3 Вариант. Использовать отложенное удаление фрейма).
...
и еще много разных вариантов.
Click; FPressed := False; StartTriggerAnimation(Self, 'Pressed') Отладчик выдал ошибку в методе объекта TControl (в Вашем случае это кнопка SpeedButton1 на фрейме). В этом методе в Click вы удаляете Frame, а значит и кнопку на ней. А в строке StartTriggerAnimation(Self, 'Pressed'); вы обращаетесь к этой удаленной кнопке (Self). Здесь и происходит AV.
test2.zip
-
Rusland отреагировална enatechno в FDQuery & LocalUpdate
FDQuery1.CachedUpdates := True; подробнее тут