ENRGY

Пользователи
  • Публикации

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

  • Посещение

  • Days Won

    7

ENRGY last won the day on 4 апреля

ENRGY had the most liked content!

1 подписчик

О ENRGY

  • Звание
    Продвинутый пользователь
  1. DisposeOf не освобождает память, а просто вызывает деструктор. Можно не использовать его, а использовать обычный Close с TCloseAction.caFree. Я проверял на мобильном компиляторе (Android) - все уничтожается корректно, срабатывает деструктор формы. Обязательно создавать надо форму с Owner nil, иначе форма не уничтожится. frmLoading := TfrmLoading.Create(nil); frmLoading.Show; //В форме: procedure TfrmLoading.FormClose(Sender: TObject; var Action: TCloseAction); begin Action := TCloseAction.caFree; end; //Уничтожаем: frmLoading.Close; frmLoading := nil; Если на ARC компиляторах вместо Close, вызвать FreeAndNil(frmLoading) - форма не уничтожится и останется видимой.
  2. @Евгений Корепов Я не собираюсь использовать Error Code, т.к. там может быть проблема с прокси. Но насчет JSON не согласен. Не понимаю эти заделы на будущее. Сколько лет уже программирую, и всегда приходилось писать под текущую задачу, а универсальные вещи\классы пылились на полке. Мне напоминает это серванты с посудой и дорогим постельным бельем у наших родителей и бабушек, с надеждой на применение их в лучшем будущем или по особым случаям, которые у многих и не наступают.. Или например напоминает создание всех форм и компонентов сразу при старте. В результате юзер в основном использует только одну форму, но программа забирает больше ресурсов и медленнее загружается. Я не сторонник такого подхода, точнее даже категорически против, т.к. универсальность влияет на производительность. Я за принцип бритвы Оккама. Имхо если нужно будет возвращать доп. данные, то их добавить просто, но делать это нужно тогда когда это реально понадобится. Стандартного "ОК или ошибка" вполне достаточно (тем более если появится ошибка, то она будет не в стандарте json\xml, а обычным текстом), для другого будет другой запрос. Если бы скрипт возвращал не обычное бинарное подтверждение - да\нет, а какое то значение, тогда было бы лучше использовать json - можно добавить и новые параметры, в новых версиях, не нарушив работу старых версий программы.
  3. function FileSize(const aFilePath: string): Int64; var vSR : TSearchRec; begin if FindFirst(aFilePath, faAnyFile, vSR ) = 0 then begin Result := vSR.Size; FindClose(vSR); end else Result := -1; end; Мультиплатформенный вариант без открытия файла (размер берется из файловой системы).
  4. Понять легко, если использовать не зарезервированные номера. Мануал это и рекомендует, первая цифра класс статуса, остальные 2 свои. Другое дело что может быть проблема с прокси серверами.
  5. Здесь вы не совсем правы. Эти коды и придуманы в том числе и для использования в своих целях. Они разделены на классы. 200 это коды "удачные", 400 "не удачные" итп. Есть зарезервировнные значения, все остальное можно использовать. Не спорю, это не так удобно как текст. Но имхо в таких простых boolean запросах проще использовать текст 'ОК', если это не ОК, значит интепретировать как ошибку, ведь по факту какая нибудь ошибка скрипта отображается простым текстом, без json форматирования. И код станет и прозрачней и быстрее. А если понадобится возвращать сложные данные, то это будет уже другой запрос, со своей описанной в доках структурой (json).
  6. Как вы к примеру подтверждаете из скрипта (напр. PHP) о том что запись добавилась в базу? Есть 2 варианта - возвращать нужный код (не вижу причин почему не рекомендуется возвращать свой Custom Error Code, имхо это вполне логично), или возвращать текст (напр. ошибки или "ОК"). Возвращать пустую строку при удачном добавлении при error code 200 на мой взгляд не совсем правильно. Что то пропустите в коде скрипта - что -то отвалиться, и в итоге запись не добавиться, при этом в ответ вернется 200 и пустая строка. Этот код работает под iOS? Равиль ведь писал что там какая то проблема с IHTTPResponse и он не возвращает код. Я к сожалению не смогу проверить в ближайшее время на iOS .
  7. Разве этот код не будет работать под iOS? Под Android он работает.
  8. Можно еще сокращенный вариант, без объявления TStringStream; Get возвращает IHTTPResponse . Там есть и StatusCode и ContentAsString. Напомню, переменные тип которых начинаются с буквы I (Interface), как IHTTPResponse не нужно уничтожать, они самоуничтожаются при выходе из процедуры. uses System.Net.HttpClient; with THTTPClient.Create do try Result := Get(vURL).StatusCode = ADDED_TO_DB; finally Free; end; Также в этом теме описано как отправить файл.
  9. Скорее всего проблема в 17 строчке..
  10. Как залить с Delphi Android в базу MySql строки, я примерно понял - составляем GET запрос и вставляем строки в параметры, затем считываем их в PHP скрипте и в базу. А вот как быть с картинкой. Как добавить картинку через PHP скрипт из программы на Android? POST запрос? Кто нибудь делал такое уже? Спасибо P.s. На данный момент FireDAC не поддерживает работу с MySQL из под Android. Пока только SQLite и InterBase ToGo. Даже если в будущем будет поддерживать, многие на этом форуме рекомендуют не использовать прямое подключение к базам из под мобильных систем, а использовать прямые GET запросы к примеру к PHP скриптам. Это связано с нестабильностью интернета т.к. так интернет может часто переключаться (от вышки к вышке) и менять параметры подключения.
  11. нет, тут речь идет про Handle формы (хотя я не пойму причем тут Handle формы под Android, это же фишка Windows). Почему то сначала он <> nil, затем при втором срабатывании onResize Handle = Nil , и где то в дебрях в результате получается AV после присваивания Image1.Height . Причем это новый проект. .
  12. На Android без вот этого кусочка программа молча вылетает (Segmentation Failed) if Handle = nil then exit;
  13. Огромное спасибо Равиль! Как хорошо что вы помогаете. Итак для тех кто не знает, в TListView есть режим DynamicAppearance , который позволяет добавлять предустановленные элементы - картинки, текст, GlyphButon. В хелпе написано что их может быть любое количество. Итак добавляем TListView, в панели Structure выбираем TListView > ItemAppearance > Item. В инспекторе объектов выбрать свойство Appearance и комбобоксе Dynamic Appearance. Рядом в инспекторе появится свойство Objects - нажать на него и там уже добавляем нужные поля. Там же можно переименовать поле, в AppearanceObjectName чтобы позже использовать в RunTime. У меня периодически на этих этапах вылетает Catastrophic Failure и среду приходится терминировать с диспетчера (Berlin Update 2). Дальше, жмем правой кнопкой мыши по ListView и выбираем Toggle Design Mode, где можно увидеть эти добавленные Custom поля и расставить их мышкой и указать выравнивание. Это имя затем можно использовать в Runtime, для картинки это индекс в ImageList, который нужно указать в ListView таким образом (за это еще раз спасибо Равилю! :), почему это сделали так неочевидно и почему это не указано в мануале, остается загадкой.. Для TImageObjectAppearance с именем Star - ListView1.Items.Add.Data['Star'] := Integer(1); Например заполняем список с картинками с индексами 0 и 1: procedure TForm5.FormShow(Sender: TObject); var I: Integer; begin for I := 0 to 9 do begin with ListView1.Items.Add do begin Text := 'Item ' + I.ToString; Data['Star'] := Integer(I mod 2 = 0); end; end; end; Переключаем с картинки с индексом 1 на 0 и наоборот. procedure TForm5.ListView1ItemClick(const Sender: TObject; const AItem: TListViewItem); begin AItem.Data['Star'] := AItem.Data['Star'].AsInteger xor 1; end ;
  14. Привет. Я к своему стыду так и не научился толком работать с TListView. TListBox это сделать просто, а вот как это сделать в TListView... Это сложный компонент. Подскажите как правильно реализовать. Нужно добавить с правой стороны каждого Item иконку избранное, которая работала бы как чекбокс - если нажать по ней то звездочка становится желтой и без заливки (Checked/unchecked) . Насколько я понял в GlyphButton нельзя добавить картинку.. Как же тогда это сделать? Спасибо.
  15. Я работаю на Windows 10, линии появляются на ней. Если использовать GlobalUseGPUCanvas := true то баг пропадает. Но с этим флагом другая проблема, если в системе установлено dpi больше 100%, напр. как у меня 150%, то программа не масштабируется автоматически, т.е. форма становится пропорционально меньше, выглядит как для 100% dpi на 150%. Это аналог Form Scaled := true на VCL. Хотя мне так больше нравится, я давно искал где же выключается это некрасивое масштабирование в FMX (слишком большое на мой взгляд). Большое спасибо @andrew4010!