Лидеры
Популярный контент
Показан контент с высокой репутацией 20.01.2017 во всех областях
-
Защита FMX
egorea1999 и 2 других отреагировал kami за вопрос
клиентскую часть, т.е. непосредственно само приложение - никак. Без доступа к серверу в моем случае оно бесполезно. Сервер может обладать информацией о всех устройствах, которые когда-либо к нему подключались и может блокировать новые, если лимит используемых устройств превышен. Или блокировать конкретные, если они выведены из эксплуатации. Или вообще залочить доступ всем устройствам клиента - по усмотрению. Но это в моем случае, т.к. приложение не общедоступно и не будет выкладываться в AppStore. Ну и "вылечивать" приложение в моем случае смысла нет - достаточно скоро его функционал просто устареет, и крякнутая программа просто станет не актуальной. В общем и целом, если программе требуется подключение к серверу - защиту нужно реализовывать имено на нем. Но от взлома защищаться бессмысленно - когда приложение станет действительно популярным, его все равно поломают. А до тех пор - можно спать спокойно, взломщики даже не посмотрят в вашу сторону.3 балла -
Можешь попробовать такой вариант:2 балла
-
Чем отличается Debug от Release?
Kitty и ещё один отреагировал Равиль Зарипов (ZuBy) за вопрос
Ну как-бы все вроде из названия понятно Debug конфиг есть возможность пользоваться дебагером вес приложения больше из-за доп. файлов (deployment) Release конфиг дебагер не работает вес меньше возможность публикации приложении в магазины платформ2 балла -
Для таких таблиц лучше ее рисовать на ListView. Пока не видел достойных гридов для Андроид. Пример реализации:2 балла
-
) Откуда Вы все это знаете ) Спасибо!!! Так и есть. Вставил код: -------------------------- Uses ...Registry, Windows...; ... Var Reg: TRegistry; ... Reg := TRegistry.Create; Reg.RootKey := HKEY_CURRENT_USER; Reg.OpenKey('Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_BROWSER_EMULATION\',True); Reg.WriteInteger(ExtractFileName(ParamStr(0)),11000); Reg.Free; Webbrowser1.Navigate('maps.google.com'); ... -------------------------- Теперь все работает PS: тестирую для версии IE 11 // Reg.WriteInteger(ExtractFileName(ParamStr(0)),11000);1 балл
-
Защита FMX
Равиль Зарипов (ZuBy) отреагировал kami за вопрос
Давайте сперва уточним, что именно вы подразумеваете под взломом? Потому что если рассматривать взлом, как его понимаю я - то всякие "проверки сертификатов" будут убраны в ходе этого взлома. Поскольку являются неотъемлимой частью хака приложения. Взлом и дальнейшее распространение на мой взгляд - это "сделать так, чтобы программа всегда считала себя лицензионной и работала как ни в чем ни бывало".1 балл -
Защита FMX
Brovin Yaroslav отреагировал kami за вопрос
Вы подменяете терминологию. Никакое приложение само по себе не является устойчивым к взлому, если оно не содержит средства защиты от этого взлома. На каком бы языке ни было написано. Более того, нужно отличать хак приложения (чтобы оно запустилось вне зависимости от наличия лицензии) и получение данных, с которыми работает это приложение.1 балл -
Занимаемая приложением память
Major отреагировал Andrey Efimov за вопрос
Если грубо, то примерно вот так: uses Androidapi.JNI.App, Androidapi.Helpers, Androidapi.JNI.GraphicsContentViewText, Androidapi.JNI.JavaTypes, Androidapi.JNI.Os, Androidapi.JNIBridge; function IntArrayToJArray(const OrigArray: array of Integer): TJavaArray<Integer>; var I: Integer; begin Result := TJavaArray<Integer>.Create(Length(OrigArray)); for I := Low(OrigArray) to High(OrigArray) do Result.Items[I] := OrigArray[I]; end; procedure TForm3.Button1Click(Sender: TObject); var ActivityManager: JActivityManager; List: JList; Iterator: JIterator; Process: JActivityManager_RunningAppProcessInfo; ArrayMemoryInfo: TJavaObjectArray<JDebug_MemoryInfo>; begin ActivityManager := TJActivityManager.Wrap(TAndroidHelper.Context.getSystemService(TJContext.JavaClass.ACTIVITY_SERVICE)); List := ActivityManager.getRunningAppProcesses; Iterator := List.iterator; while Iterator.hasNext do begin Process := TJActivityManager_RunningAppProcessInfo.Wrap(Iterator.next); ArrayMemoryInfo := ActivityManager.getProcessMemoryInfo(IntArrayToJArray([Process.pid])); Memo1.Lines.Add(JStringToString(Process.processName) + ' ' + ArrayMemoryInfo[0].getTotalSharedDirty.ToString); end; end; Повторюсь, это грубый, но рабочий пример. Рекомендуется доработать его перед использованием в рабочем проекте!1 балл -
Тоже интересовал этот вопрос. Нарыл кучу информации, но в конце концов реализовал этот механизм. Смотрите прикрепленный архивчик - там простенький проект, показывающий как ото сделать. Проверял на Delphi 10 Seattle + OS X El Capitan 10.11.4 OpenWith.zip1 балл
-
RAD 11 на подходе?
egorea1999 отреагировал SergeyIT за тема
Вы меня простите, Господа. Но позвольте высказать мнение человека нового в 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? Это не моя тема. Мне трудно думать про указатели, когда надо думать про логику. Увы, не дано... Не владею темой. Так что пока нас не слишком много в сравнении с Китаем, есть шанс, что быстро ответят на заданный вопрос... Скоро эта халява закончится...1 балл -
Как в FM нарисовать текст на Canvas под углом?
rareMax отреагировал Brovin Yaroslav за вопрос
В общем ничего кроме стандартных знаний линейной алгебры здесь не требуется. Согласно линейной алгебры нужно построить матрицу трансформации задать ее для канвы и рисовать все что угодно. Если вспомнить, то выполнить нужно следующее: Сместить Систему Координат (СК) на вектор центра поворота. Повернуть СК на угол поворота Сместить СК на обратные вектор центра поворота. В коде это будет выглядеть так: uses System.Math.Vectors; {$R *.fmx} procedure TForm1.ButtonDrawRotatedTextClick(Sender: TObject); var RotationMatrix: TMatrix; TranslationMatrix: TMatrix; ReverseTranslationMatrix: TMatrix; begin Image1.Bitmap.SetSize(200, 200); Image1.Bitmap.Clear(TAlphaColorRec.Null); with Image1.Bitmap.Canvas do begin BeginScene; try TranslationMatrix := TMatrix.CreateTranslation(100, 100); RotationMatrix := TMatrix.CreateRotation(-Pi / 180 * nbAngle.Value); ReverseTranslationMatrix := TMatrix.CreateTranslation(-100, -100); SetMatrix(ReverseTranslationMatrix * RotationMatrix * TranslationMatrix); Fill.Color := TAlphaColorRec.Red; Fill.Kind := TBrushKind.Solid; Font.Size := 20; FillText(TRectF.Create(50, 50, 150, 150), 'Текст', False, 1, [], TTextAlign.Center, TTextAlign.Center); finally EndScene; end; Image1.Repaint; end; end; Результат: Проект: DrawRotatedTextDemo.zip1 балл