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

Лидеры

  1. OnePeople

    OnePeople

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


    • Баллы

      18

    • Постов

      326


  2. krapotkin

    krapotkin

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


    • Баллы

      18

    • Постов

      2 185


  3. Martifan

    Martifan

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


    • Баллы

      12

    • Постов

      396


  4. Slym

    Slym

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


    • Баллы

      11

    • Постов

      182


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

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

  1. о... да мы меряемся? на 1000: 250-333fps как тебе такое Sulion 10000... fps3.zip
    3 балла
  2. Vladimir Gaivoronsky

    ShoesMaster

    Программа для администрирования обувного цеха. Переписана с VCL на FMX. Проверена и оттестирована на Windows (10) Linux (ubunti 21 - 23, openSuse) MacOS (10, 11 intel) на silicon негде проверять и нет SDK. Работает с Firebird версии 3 и 5. Поддерживает сканеры штрих кодов. Позволяет отследить весь процесс производства: от приемки заказа до отправки в магазин (продажей занимается другая программа) Написана с использованием TMS.FNC. В программе есть несколько тем оформления ( в основном темные, но есть и светлые). Пока еще происходит обкат в нескольких цехах, но скоро можно будет "пощупать" всем желающим. Также чуть позже будет версия на Android. Требует внешний сервер БД (для MacOS и Android). В макинтоше запустить и настроить firebird очень нетривиально, например сортировка по названиям без учета регистра не реализовано в 3 версии.
    2 балла
  3. Или просто сделайте borderstyle формы none. И сами сделайте рамки, кнопки закрыть, свернуть и т.д.
    2 балла
  4. Не по теме, но у оператора от таких цветов в конце дня нет желания кого-нибудь убить?
    2 балла
  5. В Delphi для усиления звука записи можно воспользоваться классом TAudioCaptureDevice и его свойством Volume. Это свойство позволяет установить уровень громкости для записи звука. Чем выше значение Volume, тем громче будет записанный звук. Вот пример, как можно использовать свойство Volume: uses FMX.AudioCapture, System.SysUtils; procedure RecordAudio(const AFileName: string; const AVolume: Single); var AudioCapture: TAudioCaptureDevice; begin AudioCapture := TAudioCaptureDevice.Create(nil); try AudioCapture.FileName := AFileName; AudioCapture.PauseLength := 0; AudioCapture.Volume := AVolume; // Установка уровня громкости AudioCapture.Active := True; Sleep(5000); // Запись в течение 5 секунд AudioCapture.Active := False; finally AudioCapture.Free; end; end; procedure TForm1.Button1Click(Sender: TObject); begin // Задайте путь и имя файла, в который будет сохранен звук // Укажите значение громкости от 0 до 1 (например, 0.5 для половины максимальной громкости) RecordAudio('/sdcard/MyRecording.wav', 0.8); ShowMessage('Запись завершена.'); end; В этом примере в процедуре RecordAudio добавлен дополнительный параметр AVolume, который позволяет задать уровень громкости записи. Значение AVolume должно быть в диапазоне от 0 до 1, где 0 соответствует минимальной громкости, а 1 - максимальной. Вы можете экспериментировать с различными значениями AVolume, чтобы найти наиболее подходящий уровень усиления звука для вашего приложения и устройства.
    2 балла
  6. Когда вы говорите, что приложения на Андроиде весят 400КБ и используют библиотеки Java размером 2ГБ, вы, по-видимому, имеете в виду разницу между размером исполняемого файла приложения и размером всех библиотек, которые оно может использовать во время выполнения. Современные фреймворки, такие как Java для Android или .NET, часто используют большое количество библиотек, которые содержат общий код, используемый многими приложениями. Эти библиотеки обычно устанавливаются один раз и затем используются множеством приложений, поэтому их размер не влияет на размер каждого отдельного приложения. С другой стороны, приложения, созданные с использованием Delphi, обычно компилируются в нативный код и включают в себя все необходимые библиотеки и зависимости. Это может привести к тому, что исполняемые файлы будут больше, чем если бы они использовали общие библиотеки, но они не зависят от установленных библиотек времени выполнения. С точки зрения конечного пользователя, размер приложения часто не является ключевым фактором, особенно с учетом того, что современные устройства имеют большое количество памяти. Однако для разработчиков может быть важно минимизировать размер приложения, чтобы сократить время загрузки и уменьшить использование ресурсов. В итоге, вопрос "маленькие или большие приложения" зависит от контекста и требований конкретного приложения. В некоторых случаях использование общих библиотек может быть выгодно, в других - предпочтительнее иметь самодостаточное приложение с включенными в него всеми необходимыми библиотеками.
    2 балла
  7. что за детский сад на андроиде приложения весят 400К и при этом используют библиотеки Java на 2G это как - маленькие или большие приложения? то же с .NET Приложение с пустой формой тащит за собой весь функционал, который вы можете использовать, при этом не требуя установки дополнительных run-time библиотек, чем, собсн, всегда и хороша была Делфи mp3 файл весит 8-10 мб. а 5 сек видео "опы - 120. Не видел я чтобы кто-то плакал по этому поводу
    2 балла
  8. OnePeople

    миграция на 11.3

    Все проще Target - Android - Libraries -Revert System Files to Default
    2 балла
  9. нет никакой технологии, есть набор Bitmap и рисование этих битмап напрямую на Canvas объем памяти ровно такой, что требуется для хранения этих битмапов. скорость отрисовки - максимальная, потому что кроме отрисовки вы собсно ничего не делаете вообще)
    1 балл
  10. А зачем постоянно bringtofront? одного раза не достаточно? там реально медленно... я полагаю нужна глубина сцены? многие ее делают слоями: дальний фон (горы), ближний фон (лес), сцена (персы), и воздух (падающий снег) кидаем 4 лейаута и на них распределяем спрайты
    1 балл
  11. Slym

    Клонирование объекта

    Result := MemStream.ReadComponent(nil);
    1 балл
  12. Tumaso

    Параллельный отладчик

    Сама суть Synchronize в том, чтобы выполнить код в главном потоке
    1 балл
  13. krapotkin

    Параллельный отладчик

    а вы понимаете в котором потоке выполняется Synchronize() ? попробуйте сначала получить ThreadId, а уже потом переходить в ГП и выводить это значение на экран
    1 балл
  14. GASCHE

    Google Play and Delphi

    Как все
    1 балл
  15. OnePeople

    bluetooth что не так

    Может их нет, новых, а есть устройства которые уже подключались ранее Bluetooth.GetPairedDevices; FPairedDevices := Bluetooth.GetPairedDevices; if FPairedDevices.Count > 0 then for I:= 0 to FPairedDevices.Count - 1 do ListBox.Items.Add(FPairedDevices[I].DeviceName) Ну и если Android API >= 31 if TJBuild_VERSION.JavaClass.SDK_INT >= 31 then begin FPermissionBTConnectSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_CONNECT); FPermissionBTScanSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_SCAN); FPermissionBTAdvertiseSettings := JStringToString(TJManifest_permission.JavaClass.BLUETOOTH_ADVERTISE); PermissionsService.RequestPermissions([FPermissionBTConnectSettings] + [FPermissionBTScanSettings] + [FPermissionBTAdvertiseSettings], nil); end;
    1 балл
  16. Решено! Если кому интересно: При долгом нажатии на PUSH, активизируется виртуальная клавиатура! А у меня навешено событие на OnVirtualKeyboardShown() ...
    1 балл
  17. krapotkin

    Параллельный отладчик

    https://bitbucket.org/vkrapotkin/commonapi/src/master/UVKCommonLog.pas log.log('TrqdAttributes LoadFromFolder (' + Attributes.Count.ToString + ')'); в логе 14:15:13.463 (000013D8) TrqdAttributes LoadFromFolder (5) или 14:15:12.504 (main) Login successful.
    1 балл
  18. krapotkin

    ProgressBar и потоки

    не понял вопрос. мы работаем в обработчике одного из событий очереди сообщений в главном потоке. событие отрисовки тоже стоит в очереди в главном потоке. закончим обработчик, запустится следующий, произойдет перерисовка.
    1 балл
  19. krapotkin

    Создание Dockable формы

    floatingTabs.zip вот. примерно то же самое надо делать при mousedragover
    1 балл
  20. krapotkin

    Создание Dockable формы

    я так понимаю, вопрос упирался в красивый драг, а не способ отсоединить таб от родителя ?
    1 балл
  21. krapotkin

    TLocationSensor - километраж

    тут написано, что проблема сложная и не решается в лоб https://android-developers.googleblog.com/2020/12/improving-urban-gps-accuracy-for-your.html можно попробовать оставить только Manifest.permission.ACCESS_FINE_LOCATION и исключить Manifest.permission.ACCESS_COARSE_LOCATION чтобы попадали только данные со спутников но вот тут написано, что в современных ОС вы должны это запрашивать, и не факт что получите https://developer.android.com/training/location/permissions
    1 балл
  22. Dmitry_4501

    Удалить файлы отмеченные

    Попробуйте вот так (не самый идеальный вариант, но он работает и ошибок не выдает). procedure TForm1.Button1Click(Sender: TObject); begin var selectedItems: TArray<TListBoxItem>; // Объявляем массив из объектов TListBoxItem for var item: TFMXObject in ListBox1.Children.Items[1].Children do // Перебираем каждый дочерний компонент в ListBox, который является экземпляром класса TListBoxItem. begin if item is TListBoxItem then // Проверяем, является ли item экземпляром класса TListBoxItem if TListBoxItem(item).IsChecked then // Проверяем, является ли элемент отмеченным галочкой begin System.SetLength(selectedItems, System.Length(selectedItems) + 1); // Увеличиваем длину массива selectedItems[High(selectedItems)] := TListBoxItem(item); // Вставляем элемент в массив end; end; DeleteAllCheckedFiles(selectedItems); end; procedure TForm1.DeleteAllCheckedFiles(items: TArray<TListBoxItem>); begin if System.Length(items) < 1 then Exit; for var i: Integer := 0 to System.Length(items) - 1 do begin var item: TListBoxItem := items[i]; if Assigned(item) then begin // TFile.Delete(item.Text); item.Free(); // Освобождаем память, тем самым объект уничтожится и больше не будет находиться в списке элементов TListBox end; end; end;
    1 балл
  23. Оконные сообщения в FMX можно обрабатывать так же как и в VCL. Достаточно в вашу WindowProc добавить это: var Message: TMessage; Message.Msg := uMsg; Message.WParam := wParam; Message.LParam := lParam; Message.Result := 0; frm.Dispatch(Message); Тогда потом можно будет смело написать что-то вроде procedure WMNCPaint(var Message: TWMNCPaint); message WM_NCPAINT; И оно будет работать.
    1 балл
  24. krapotkin

    Размер приложения

    В RTL за годы тоже произошло 100500 изменений и добавлений. Функционал форм поменялся. Добавились стили в VCL. Все это отразилось на размере. Но я по-прежнему не вижу проблем. Вот питонные программы тянут почти 500м самого питона. Сишарп и другие - гигабайты дотнета. И ничего, никто не морщится даже.
    1 балл
  25. В общем рисовать как оказалось на неклиентской части формы вообще не проблема. Но я делаю форму Acrylic (Полупрозрачную с размытым фоном), и вот тут появляются проблемы. Если рисовать обычным способом, как на Canvas, то цвет получается тоже полупрозрачный. Путём экспериментов выяснил, что относительно нормально рисуется таким методом: uses Winapi.Windows; BitBlt( GetWindowDC( WindowHandleToPlatform( Form.Handle ).Wnd ), 0, 0, BitMap.Width, BitMap.Height, BitMap.Canvas.Handle, 0, 0, cmMergePaint ); В обычном случае последний аргумент должен быть cmSrcCopy, но с ним тоже получается полупрозрачная картинка. Помогает только cmMergePaint, НО! таким способом рисуется картинка с инвертированными цветами. То есть перед таким рисованием нужно её самому инвертировать. Следующий шаг – это рисовать png картинку, так как редко надо рисовать просто непрозрачную прямоугольную картинку. С 32-битным TBitMap у меня пока что-то не получилось, а вот TPngImage вполне хорошо рисуется. uses FMX.Platform.Win, Winapi.Windows, Vcl.Graphics, Vcl.Imaging.pngimage; function TForm1.WinHandle: HWND; begin Result := WindowHandleToPlatform( Self.Handle ).Wnd; end; procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); var ACanvas: Vcl.Graphics.TCanvas; png: TPngImage; begin ACanvas := Vcl.Graphics.TCanvas.Create; ACanvas.Handle := GetWindowDC(Self.WinHandle); png := TPngImage.Create; png.LoadFromFile('C:\Image.png'); try PatBlt( ACanvas.Handle, 0, 0, png.Width, png.Height, cmBlackness ); png.Draw( ACanvas, Rect( 0, 0, png.Width, png.Height ) ); finally ReleaseDC(Self.WinHandle, ACanvas.Handle); ACanvas.Handle := 0; ACanvas.DisposeOf; png.DisposeOf; end; end; Но и тут есть подводные камни. Метод TPngImage.Draw, если заглянуть в его код становится понятно, что рисует он поверх того, что уже нарисовано и картина накладывается одна на другую быстро теряя прозрачность полупрозрачных пикселей. Поэтому перед её рисованием нужно стереть, что было до этого, с чем отлично справляется функция Winapi.Windows.PatBlt. Но таким образом появляется мерцание. А так же я ещё не нашёл, как отловить в FireMonkey отловить у формы событие WM_NCPAINT. Пока что навесил рисование на событие формы OnPaint, но оно не стабильно работает в данном случае и бывает, когда картинка стирается и не рисуется, пока не наступит надобность перерисовать клиентскую часть формы.
    1 балл
  26. К сожалению, в FireMonkey для Windows нет встроенной поддержки для размещения компонентов или рисования на заголовке окна (title bar). Однако, есть несколько возможных вариантов для достижения похожего эффекта: Создать собственный кастомный компонент на основе TControl, который будет перекрывать заголовок окна и имитировать его. Можно нарисовать свой фон, кнопки и т.д. Использовать Windows API функции для настройки и изменения заголовка окна. Например, SetWindowText, SetWindowLong и другие. Это более сложный подход, но дает больше контроля. Рассмотреть сторонние компоненты и библиотеки. Возможно, кто-то уже реализовал похожую функциональность для FireMonkey. Попробовать поместить TControlAboveTarget на TForm и настроить его позицию/размер чтобы перекрывал заголовок. Не идеальный вариант, но может сработать. Так что в целом это возможно реализовать в FireMonkey, но нет встроенного прямого решения как в VCL. Придется поиграться с кастомными компонентами и низкоуровневым API.
    1 балл
  27. Martifan

    Протестировать приложение

    Для тестирования приложения, написанного на Delphi 10.4 для Android, можно использовать различные инструменты и ресурсы. Реальные устройства: Тестирование на реальных устройствах позволяет вам увидеть, как приложение будет работать в реальных условиях. Используйте устройства с различными характеристиками экрана, версиями ОС и производительностью для более обширного тестирования. Эмуляторы Android: Эмуляторы позволяют вам запускать приложения Android на компьютере. Вы можете настроить эмуляторы с различными размерами экрана, разрешениями и плотностью пикселей. Android Studio: Это официальная среда разработки для Android, и она включает в себя эмулятор Android. Вы можете создать различные виртуальные устройства с разными характеристиками для тестирования вашего приложения. Genymotion: Это еще одна популярная среда для эмуляции Android-устройств. Она предлагает некоторые функции, которые могут быть полезны для разработчиков, такие как встроенные инструменты для тестирования GPS и акселерометра. Сервисы облачного тестирования: Если вы не хотите заниматься настройкой эмуляторов или не имеете доступа к множеству реальных устройств, вы можете воспользоваться сервисами облачного тестирования. Firebase Test Lab: Это услуга от Google, которая позволяет вам тестировать ваше приложение на реальных устройствах, хостед в облаке Google. AWS Device Farm: Это услуга от Amazon, которая позволяет вам тестировать и взаимодействовать с вашим Android-приложением на множестве реальных устройств. При тестировании приложения уделите внимание таким аспектам как адаптивный дизайн, работоспособность на различных версиях ОС и корректность работы функционала.
    1 балл
  28. Dmitry_4501

    Удалить файлы отмеченные

    Проходишь циклом по всему списку и у каждого элемента проверяешь свойство IsChecked, если оно true, то тогда при помощи TFile.Delete удаляешь файл. Как-то так: procedure DeleteAllCheckedFiles(); begin if ListBox1.Count < 1 then Exit; // Если количество элементов меньше 1, то выходим из процедуры for var I: Integer := 0 to ListBox1.Count - 1 do if ListBox1.ListItems[I].IsChecked then // Проверяем свойство IsChecked (т.е отмечен ли элемент) TFile.Delete(ListBox1.ListItems[I].Text); // Удаляем файл (только в том случае, если в тексте элемента записан путь до файла, иначе придется переделать эту строчку под свои нужды) end; Для TFile.Delete необходимо подключить юнит System.IOUtils
    1 балл
  29. не думаю, что это сделано путем установки некоей "громкости" когда у нас есть оцифрованный сигнал, то дальше уже идет цифровая обработка этого сигнала например, нормализация, или компрессия https://habr.com/ru/articles/379395/ операция не очень сложная, но нужно поискать описания хороших алгоритмов и поэкспериментировать с их настройками
    1 балл
  30. https://docwiki.embarcadero.com/CodeExamples/Sydney/en/FMX.AudioRecPlay_Sample
    1 балл
  31. В контексте Delphi, вы можете использовать Indy компоненты для этого. TIdStack имеет метод ResolveHost() который может быть использован для разрешения имени хоста. var GStack: TIdStack; begin GStack := TIdStack.Create; try ShowMessage(GStack.ResolveHost('localhost', Id_IPv4).ToString); finally GStack.Free; end; end; Учтите, что разрешение имени хоста в IP-адрес не гарантирует, что хост будет доступен для подключения. Если имя хоста не может быть разрешено, будет вызвано исключение UnknownHostException. Также обратите внимание, что операции с сетью, такие как разрешение имени хоста, могут быть медленными, и рекомендуется выполнять их в фоновом потоке, чтобы не блокировать главный поток приложения. По поводу вашей проблемы с локальной сетью - возможно, имя хоста, которое вы пытаетесь разрешить, не зарегистрировано в локальном DNS. В этом случае, вы можете попробовать использовать полное доменное имя (FQDN) хоста, или использовать прямой IP-адрес, если он известен. Если метод разрешения имен не работает для локальной сети, вероятно, проблема связана с настройками DNS в вашей локальной сети. Имена хостов в локальной сети обычно разрешаются с помощью механизма DNS, поэтому если ваш DNS сервер или файлы hosts не содержат соответствующих записей для имени хоста, который вы пытаетесь разрешить, то метод разрешения имен вернет ошибку. Если вы контролируете настройки DNS в вашей локальной сети, вы можете добавить соответствующие записи для всех хостов, которые вы хотите разрешать. Кроме того, некоторые системы поддерживают механизмы обнаружения служб на локальной сети, такие как mDNS (Multicast DNS), который используется в протоколе Zeroconf/Bonjour. Если ваши устройства и приложения поддерживают mDNS, вы можете использовать имена хостов с суффиксом .local для разрешения имён в локальной сети. Пожалуйста, учтите, что разрешение имён хостов в IP-адреса - это сложная область, которая зависит от многих факторов, включая конфигурацию вашей сети, настройки DNS, поддержку протоколов обнаружения служб и т.д. Если вы столкнулись с проблемами, вам может потребоваться обратиться к системному администратору или к специалисту по сетям для получения помощи.
    1 балл
  32. Martifan

    Теряются Push уведомления

    Firebase Cloud Messaging (FCM) предоставляет возможность установить приоритет сообщения, но это не гарантирует, что все сообщения будут доставлены в определенном порядке или что все сообщения будут доставлены вообще. Когда устройство находится в режиме отключения от интернета, FCM хранит только последнее сообщение для каждого топика. Это означает, что если вы отправляете три разных уведомления на одно и то же устройство, когда оно отключено от интернета, FCM сохранит только последнее уведомление. Когда устройство снова подключается к интернету, оно получит только это последнее уведомление. Если вам нужно, чтобы все уведомления были доставлены, вам нужно будет реализовать свою собственную систему очереди на стороне клиента. Это может включать в себя сохранение уведомлений в локальной базе данных на устройстве и отображение их в нужном порядке, когда устройство подключается к интернету.
    1 балл
  33. Hevard

    Delphi 11 Transparent StatusBar

    Проверено на Александрии. Работает.
    1 балл
  34. Hevard

    Вышла Delphi 11 Community Edition

    Вы не любитель - профессионал мазохизма! Не забудьте, Win x64 должна быть...
    1 балл
  35. Hevard

    Вышла Delphi 11 Community Edition

    Смех-смехом, но Вы единственный в чате с таким траблом.... Моё скромное... не надо было устанавливать ненужные "продукты", потом прописывать пути с этих продуктов... и т.п. (господин "@Krapotkin" даже устал от безумия, которое Вы творите) 1. удаляем 10.4 через Удаление программ 2. От имени Админа запускаем установку. 3. Выбираем х64, Android 4. В Additional выбираем Andriod (меня даже не спросили - куда) накатываем ADB Пишем, компилируем
    1 балл
  36. Hevard

    Вышла Delphi 11 Community Edition

    Вы не просто "косноязычный", капитально сложный.... Всё ставится предельно просто, но только Вы придумали схему, как всё усложнить. P.S.: Причём тут Android Studio? И, конечно, меня напрягает установка на "несистемный" диск... Плюс: зачем ставить и Delphi и Builder? Они конфликтуют между собой. Да и CЕ не позволяет ставить обе среды разработки. И требования к ОС х64 - исполнено?
    1 балл
  37. Hevard

    Вышла Delphi 11 Community Edition

    Программирование на Delphi. Часть 1. Установка Delphi Community Edition (бесплатная версия) - Школа программирования ProgTips
    1 балл
  38. OnePeople

    Компиляция приложения android

    Ну у вас в настройках sdk API-Level location версии 26, а был наверное 29 и выше вот ошибки и небыло
    1 балл
  39. OnePeople

    Компиляция приложения android

    Нигде в деплоймент не указана внешняя память ??????? Вообще то requestLegacyExternalStorage это параметр у вас в AndroidManifest.xml
    1 балл
  40. OnePeople

    Иконка приложения

    procedure loadbit; begin if JStringToString(Drawable.getClass.toString) = TJBitmapDrawable.ClassName then begin if (TJBitmapDrawable.Wrap((Drawable.getCurrent as ILocalObject).GetObjectID).getBitmap<>nil) then begin Bitmap := TJBitmapDrawable.Wrap((Drawable.getCurrent as ILocalObject).GetObjectID).getBitmap end else Bitmap:=nil; end else begin bmp:=TJBitmap.JavaClass.createBitmap(Drawable.getIntrinsicWidth, Drawable.getIntrinsicHeight, TJBitmap_Config.JavaClass.ARGB_8888); Canv:= TJCanvas.JavaClass.init(bmp); drawable.setBounds(0, 0, Canv.getWidth(), Canv.getHeight()); drawable.draw(Canv); Bitmap:=bmp; end; end;
    1 балл
  41. Используй TNetHTTPClient вместо инди, проблема с ssl уйдет. При использовании инди и указании https в URL например в виндах требуется две дополнительные dll-ки (libeay32.dll / ssleay32.dll), для андроида libcrypto.so / libssl.so и т.д. Поэтому проще перейти на TNetHTTPClient
    1 балл
  42. dnekrasov

    Помогите начать работу с Oracle

    Для того, чтобы это работало нужна FireDACOracleDriver25(6)0.bpl. Не факт что она идёт вместе с Trial (в Community её точно нет).
    1 балл
  43. В событии OnResize формы проверять width > height и для каждого из двух вариантов переприсваивать позиции и размеры тех контролов, которые должны меняться.
    1 балл
  44. Pavel Vasilev

    Аналог GLScene для Firemonkey

    Только с тех пор адрес и название сменилось для поддержки OpenVX на https://sourceforge.net/p/glscene/code/HEAD/tree/branches/VXScene/
    1 балл
  45. ENERGY

    Размер компилируемого файла

    Системе не навредит, просто смысла в этом нет. Лучше упаковать архиватором, или инсталлятором. Упакованные exe распаковываются целиком в память, и остаются там до конца, плюс дольше запускаются. Не упакованные exe загружаются по сегментам, частично, только то, что нужно. http://api.farmanager.com/ru/articles/packers.html Я такой обычно код вставляю в dpr файл, для Windows проектов. uses Windows; {$IFDEF RELEASE} {$SETPEFlAGS IMAGE_FILE_RELOCS_STRIPPED or IMAGE_FILE_DEBUG_STRIPPED or IMAGE_FILE_LINE_NUMS_STRIPPED} {$WEAKLINKRTTI ON} {$RTTI EXPLICIT METHODS([]) FIELDS([]) PROPERTIES([])} {$ENDIF} Конечно же нужно выбрать Release в Build Configurations в правой панели. Есть смысл упаковывать вирусы итп, чтобы быстрее скачать, чтобы зашифровать и сменить сигнатуру. Или кеиген или что-то подобное.
    1 балл
  46. uses AndroidApi.JNI.Media; procedure MakeSound(ADuration: Integer); var Volume: Integer; StreamType: Integer; ToneType: Integer; ToneGenerator: JToneGenerator; begin Volume := TJToneGenerator.JavaClass.MAX_VOLUME; // задаем громкость StreamType := TJAudioManager.JavaClass.STREAM_ALARM; ToneType := TJToneGenerator.JavaClass.TONE_DTMF_0; // тип звука ToneGenerator := TJToneGenerator.JavaClass.init(StreamType, Volume); ToneGenerator.startTone(ToneType, ADuration); end; Типы звука можно посмотреть здесь
    1 балл
  47. Посмотрел на код и решил еще на пару строк сократить, совместил проверку на "пусто" и минус в одном условии procedure TFormMain.Edit1ChangeTracking(Sender: TObject); Var FEdit : TEdit; FFloat : Single; begin If Not (Sender is TEdit) Then // Защитимся от не выспавшегося самого себя Exit; FEdit:=(Sender as TEdit); // Для удобства... FEdit.Text:=FEdit.Text.Replace(' ',''); // Убираем случайные пробелы if (FEdit.Text.IsEmpty) or (FEdit.Text.Equals('-')) then // Если пусто (ничего не введено или все удалено) или только минус, ничего не делаем Exit; FEdit.Text:=FEdit.Text.Replace('.',','); // Заменяйм точку запятой if FEdit.Text.Equals(',') then // Если введен разделитель, добавляем перед ним ноль для красоты (не обязательно) begin FEdit.Text:='0,'; FEdit.CaretPosition:=FEdit.CaretPosition+1; // без этого курсор останется между нулём и запятой end; if TryStrToFloat(FEdit.Text,FFloat) Then // Пробуем преобразовать в число FEdit.TagString:=FEdit.Text // Если удалось, сохраняем в временном хранилище Else FEdit.Text:=FEdit.TagString; // Если не удалось, восстанавливаем из временного хранилища end;
    1 балл
  48. Добрый день О том, как получить доступ к любому свойству через StylesData (в том числе к свойству text) частично описано тут: Как получить значение свойства объекта стиля, используя StylesData? Как получить объект стиля? Назначение обработчиков событий для элементов стиля через StylesData Допустим, что TSpinBox в стиле назван (StyleName), как 'spinbox', тогда Присваивание обработчика для SpinBox: ListBoxItem1.StylesData['spinbox.OnChange'] := TValue.From<TNotifyEvent>(SBCountChange); Доступ к свойству Text у TSpinBox: ListBoxItem1.StylesData['spinbox.Text'].ToString; Таким способом можно получить доступ к любому свойству и событию любого элемента стиля.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...