-
Постов
394 -
Зарегистрирован
-
Посещение
-
Победитель дней
45
Активность репутации
-
AngryOwl отреагировална x11 в Ошибка при подключении к MySQL Windows
Я за UniDac!
Там безо всяких библиотек.
-
AngryOwl отреагировална progilic в Ошибка при подключении к MySQL Windows
hi, i think its better to use UniDac
-
AngryOwl получил реакцию от Шамсуддин в Отпечатки пальцев
Посмотрите в сторону "оберток". Например тут. Там есть файл android.hardware.fingerprint.pas (и не только). Вроде бы, есть все, что нужно. А уж как все это использовать - это другой вопрос, смотрите примеры.
-
AngryOwl отреагировална Pax Beach в Инструкция по установке набора компонентов FGX
Сообщение об ошибке справедливое.
Но, всегда нужно помнить, что циганский поезд, типа Эмбы лучше ставить в отдельную не системную папку, желательно с правами на запись.
-
AngryOwl получил реакцию от Julia в Отпечатки пальцев
Посмотрите в сторону "оберток". Например тут. Там есть файл android.hardware.fingerprint.pas (и не только). Вроде бы, есть все, что нужно. А уж как все это использовать - это другой вопрос, смотрите примеры.
-
AngryOwl получил реакцию от Anatoliy в Отпечатки пальцев
Посмотрите в сторону "оберток". Например тут. Там есть файл android.hardware.fingerprint.pas (и не только). Вроде бы, есть все, что нужно. А уж как все это использовать - это другой вопрос, смотрите примеры.
-
AngryOwl получил реакцию от Ingalime в TLang + TEdit.TextPrompt?
Добрый!
Никак. Как и многие другие элементы...
Решение, до сих пор, - создание своего компонента или модуля для мультиязычных приложений.
Пример - Мультиязычность в андроиде.
Код, конечно, давно изменился и оптимизировался не раз. Если будет свободное время - выложу как-нибудь последнюю версию.
-
AngryOwl получил реакцию от Ingalime в Странное поведение TEdit при вводе на некоторых устройствах
Попробуйте установить у TEdit свойство KeyboardType = Alphabet, а не Default.
-
AngryOwl отреагировална brunnengi в Как получить доступ к значениям элементов TJSON?
Не за что.
Если что спрашивай.
XML формат мне всегда был противен, хоть и понятен, но все равно внутренне я был против него и как следствие принципиально не использовал в своих программах.
Но вот формат JSON мне очень понравился. Его легко написать от руки, легко читать, даже через регулярки парситься легко, если приспичило. И он не избыточен как XML, а значит по канала связи передается меньше трафика.
Так что не бросай этот формат
И кстати, что касается утечек. Я когда сам только начинал разбираться в формате JSON и с тем как работать с ним в Delphi, у меня тоже были утечки, ибо я использовал JSON для парсинга ответа с сервера, в потоке. Я тогда начал склоняться к всеобщему мнению что просто сама реализация работы с этим форматом в делфи кривая.
Но поколебавшись все таки принял во внимание ту мысль, что разработчики Embacadero на девять жизней умнее меня, и вряд ли они выпустили модуль с таким явным глюком. И решил все таки углубиться дальше.
Как оказалось просто поставить JS.Free в конце не достаточно.
Т.е. вот так вот делать не стоит:
var JS: TJSONObject; begin s := '{"jsonString":"ok"}; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; ShowMessage(JS.GetValue('jsonString').Value); JS.Free; end; В процессе работы потока с ним может случиться все что угодно - обрыв связи, тайоут сработает, или некорректные данные, или еще что нибудь. И JS объект может не освободиться. Т.е. поток может уже и не существует, но в оперативке созданный объект лежит.
К тому же при таком подходе могут быть и ошибки, например параметра 'jsonString' может и не быть, и все вывалиться в ошибку (но в потоке этого можно и не увидеть) и до JS.Free код никогда не дойдет. А значит будет опять утечка памяти.
Так что правильней всего делать через Assigned:
var JS: TJSONObject; begin s := '{"jsonString":"ok"}'; JS := TJSONObject.ParseJSONValue(s) as TJSONObject; if Assigned(JS) then begin ShowMessage(JS.GetValue('jsonString').Value); JS.Free; end; end; Тогда утечек не будет. Это я теперь точно знаю!)))
-
AngryOwl отреагировална mazayhin в Программно развернуть свернутое приложение
Вот здесь, когда оборачиваете в PendingIntent, присваиваете ему уникальный номер (в примере выше это 1), этот номер где-то храните.
PendingIntent := TJPendingIntent.JavaClass.getBroadcast (TAndroidHelper.Context, _ТУТ НОМЕР_, intent, 0); Потом, что бы отменить, создаете идентичный PendingIntent, с номером, с которым запускали, и
TAndroidHelper.AlarmManager.cancel(PendingIntent);
-
AngryOwl отреагировална Andrey Efimov в TEdit не понятное удаление последнего символа
Здравствуйте.
Это баг, я сообщил о нём ещё в мае (RSP-14928 и RSP-14929), в тех. поддержке предложили временное решение (ответ ниже). (Тема В TEdit стирается предыдущий текст аналогичная).
find FMX.Platform.Android.pas find procedure TTextServiceAndroid.SetCaretPosition(const Value: TPoint); change code to: procedure TTextServiceAndroid.SetCaretPosition(const Value: TPoint); var SelStart, SelEnd: Integer; begin if FCaretPosition <> Value then begin FCaretPosition := Value; CalculateSelectionBounds(SelStart, SelEnd); if (FTextView <> nil) and not FInternalUpdate then PlatformAndroid.SynchronizeOnUIThread( procedure begin //Fix By [龟山]Aone(1467948783) //https://quality.embarcadero.com/browse/RSP-14928 // if (SelEnd - SelStart) > 0 then // FTextView.setSelection(SelStart, SelEnd) // else FTextView.setCursorPosition(CaretPosition.X); end); end; end;
-
AngryOwl отреагировална FREEFAR в Приложение для получения раздражителей в работе Магазинов розничной сети
Всем привет.
Смотрю сегодня тренд на публикацию приложений разработанных на Emb'e.
Вот наше приложение которое тоже на днях поедет в маркеты
Регаемся по номеру
подтверждаем эСэМэСиной.
Придумываем пин код и подтверждаем его
После входа приложение покажет магазины в радиусе 500м
Заходим в меню магазина
Выбираем категорию для жалобы ---- жалуемся , если надо прикладываем фото
Еще кое что
подтверждаем отправку жалобы
PROFIT!
-
AngryOwl отреагировална ENERGY в [Отклонение] TFloatAnimation и TFrame
Столкнулся с такой же проблемой, если любой компонент (в моем случае TImage ) лежит на фрейме не работает TFloatAnimation вообще.
Решение:
При создании фрейма нужно указывать Self формы, а не nil.
: MyFrame := TMyFrame.Create(Self);
-
AngryOwl отреагировална ENERGY в Сглаживание при рисовании в буфер bitmap
Итак на Android и iOS нет сглаживания при отрисовке примитивов (линий, кругов, вектора).
Метод 1 (Native Draw, Delphi ONLY ) - лучший и простой.
На Canvas PaintBox рисуем как обычно.
Если нужно нарисовать на Canvas Bitmap'a, а не на PaintBox, тогда нужно правильно подготовить Bitmap:
if Scene <> nil then lScale := Scene.GetSceneScale else lScale := 1; // fBitmap.BitmapScale := lScale; //это только для DrawPath fBitmap.SetSize(Ceil(Width * lScale), Ceil(Height * lScale) );
Все детали здесь, также там ссылка на сайт (используйте гугл переводчик)
https://github.com/OneChen/FMXNativeDraw
Если нужно сохранить в Bitmap, то делаем PaintBox.MakeScreenshot (TControl.PaintTo) в результате получаем сглаженный Bitmap. Кстати вызвать PaintTo не получится в Paint и Afterpaint методах текущего контрола - будет циклический вызов Paint и в результате переполнение стэка, нужно делать это в AfterPaint формы или фрейма.
Метод 2.
http://riversoftavg.com/blogs/index.php/2016/06/09/use-supersampling-for-offscreen-bitmaps-on-delphi-mobile/
-
AngryOwl отреагировална Равиль Зарипов (ZuBy) в Что невозможно сделать на Delphi для Android?
С++ ваше всё, наше всё Делфи
-
AngryOwl отреагировална sinuke в Возможно ли сделать такой интерфейс с ЛистВью?
да, легко
вот мое расписание в листвью
-
AngryOwl отреагировална Akad в Application.ProcessMessages - плохой стиль?
Так же плохой для многих стиль - goto, break и continue. А многим коллегам ума не хватает даже использовать free /release и глобальные переменные, для них созданы всякие диезы с явами. И дальше что? Подстраиваться под всех, не используя возможности полноценного языка?
Application.ProcessMessages надо просто использовать с осторожностью. Таймеры отключать, за нажатиями на закрытие форм и пр. следить. Если есть какое-то долгое вычисление, которое не предсказуемо через какое время закончится, а таблицу уже начали обновлять, то милое дело запустить его в другом потоке, параллельно в GUI проигрывая анимашку. Другие варианты реализаций - это очень сложно, и интерфейс получится не отзывчивым.
Splash с прогрессом надо делать только так, если максимальной скорости загрузки хотим. Вообще много областей применений есть у Application.ProcessMessages. Надо помнить об основных нюансах, иначе будут проблемы.
-
AngryOwl отреагировална ENERGY в Что невозможно сделать на Delphi для Android?
Нет как раз таки. Berlin Update 2 более стабильный и там меньше багов FMX чем в Tokyo. В Токио от одного бага со сменой главного потока целая эпопея, с потерей производительности и проблем с анимацией - много что посыпалось. Была, а может еще и будет. Некоторые программисты с форума EMBT вообще считают Токио самой неудачной версией Delphi, в плане багов за всю ее историю.
-
AngryOwl отреагировална Andrey Efimov в Что невозможно сделать на Delphi для Android?
Не обманывай людей . Это что: procedure onReceivePermissionsResult(const ASender: TObject; const AMessage: TMessage); ?
-
AngryOwl отреагировална DMS в Что невозможно сделать на Delphi для Android?
И куда? Пробовал и IDEA, и Eclipse, и Android Studio. Работа в Delphi - самая комфортная.
-
AngryOwl получил реакцию от sargon в Sphere Live - мультиплатформенная система c функциями видеоконференцсвязи, файлового обмена, облачного хранилища
Проект закрыт (уже около года как), ввиду ряда экономических и юридических вопросов.
-
AngryOwl отреагировална sinuke в Ошибки при переходе в Токио
Как я понимаю модуль FMX.FontGlyphs.Android.pas подключен из Берлинской версии студии. Вам нужен этот файлик для Токио. Как я понимаю, используете что-то типа FontAwesome. Например, на гитхабе Равиля этот файл есть версии и для Берлин и для Токио.
-
AngryOwl отреагировална ENERGY в Двигать объект по окружности (кругу) - Moving an object in a circular path
X := originX + cos(angle)*radius;
Y := originY + sin(angle)*radius;
-
AngryOwl отреагировална haword в [Андроид]не видно картинки
в делфи делается так -
li:= lv.Items.Add;
lii:=li.Objects.FindObjectT<TListItemImage>('Image');
lii.OwnsBitmap:=True;
далее можно грузить картинку, если в потоке то
TThread.Synchronize(TThread.CurrentThread, procedure()
begin
// присваивание битмапу картинки
lii.Bitmap:= TBitmap.Create;
lii.Bitmap.SetSize(ItemBitmap.Width, ItemBitmap.Height);
lii.Bitmap.Clear(TAlphaColors.Null);
lii.Bitmap.CopyFromBitmap(ItemBitmap);
end
);
-
AngryOwl получил реакцию от Freezer_86 в Как нарисовать круглый TImage
var BmpNew : TBitmap; begin BmpNew := TBitmap.Create; BmpNew.SetSize({нужный размер}, {нужный размер}); BmpNew.Canvas.BeginScene; try BmpNew.Canvas.Fill.Kind := TBrushKind.Bitmap; BmpNew.Canvas.Fill.Bitmap.WrapMode := TWrapMode.TileStretch; BmpNew.Canvas.Fill.Bitmap.Bitmap := {ваш битмап}; BmpNew.Canvas.Clear(0); BmpNew.Canvas.FillEllipse(RectF(0, 0, {нужный размер}, {нужный размер}), 1); finally BmpNew.Canvas.EndScene; end; TImage{ваш объект}.Bitmap.Assign(BmpNew); end; думаю так