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

Лидеры

  1. Равиль Зарипов (ZuBy)

    Равиль Зарипов (ZuBy)

    Модераторы


    • Баллы

      12

    • Постов

      2 517


  2. Vitaldj

    Vitaldj

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


    • Баллы

      7

    • Постов

      847


  3. krapotkin

    krapotkin

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


    • Баллы

      4

    • Постов

      2 184


  4. ENERGY

    ENERGY

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


    • Баллы

      4

    • Постов

      568


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

Показан контент с высокой репутацией 06.04.2017 во всех областях

  1. Доброго времени суток уважаемые пользователи форума! Часто в постах Вы делаете отсылку(упоминание) на пользователя, но как правило делается это не правильно. Я записал небольшое видео, которое поможет сделать это правильно При упоминании пользователя, он получает уведомление (даже если он не подписан на эту тему) и сможет быстрее ответить на вопрос Удачи!
    4 балла
  2. Ссылка: http://blog.rzaripov.kz/2017/04/android.html Автор: @Равиль Зарипов (ZuBy) Описание: Устанавливаем тему для нативных диалогов в Android
    4 балла
  3. думаю, подойдет a:=lst1.ItemByPoint(10,0); b:=lst1.ItemByPoint(10,lst1.height);
    3 балла
  4. Я хоть не начинающий, но нет андроида и если и программирую для мобил, то только на iOs. Я это использую для десктопов. Я думаю, для андроида почти также. У вас должен быть доступ к серверу. Вы ложите туда готовый файлик с sql кодом. Там куча инсертов разделёных точно с запятой. Ты по http его закачиваешь. Я использую для этого indy, но для андроида, точно знаю его нельзя использовать, ибо так глюк какой то в 6 андроиде. Поэтому используй NetHTTPClient я делаю так: lStream1 := TMemoryStream.Create; form1.idhttp1.Get( 'http://твой сайт/file_base_update/'+'имя файла', lStream1); lStream1.SaveToFile(ExtractFilePath(ParamStr(0)) + 'имя файла' ); Я дальше забрасываю этот файлик в базу данных. Я не использую стандартную обертку, а использую от Devart- LiteDac. Но думаю и в fireDac есть тоже самое. Там есть LiteScript1 в него кидаешь файл sql с разделителями ; и он разом выполняется.
    3 балла
  5. Где здесь шутка? Просто описался, хотел написать слово "скачать", а написал "сказать". Ничего вам не мешает скачать из приложения файл БД и заменить на этом же приложении.
    2 балла
  6. Обратите внимание: 1) На пост Виталия с примером кода по скачиванию файла из Интернета 2) На пост Равиля, две темы, в одной есть ссылка на мою статью, во второй код из моей статьи 3) Совместите два этих пункта и получите Профит. p.s. Не забудьте, перед непосредственным обновлением файла (или раньше), необходимо отключиться от базы!
    2 балла
  7. На мобильных платформах обычно не принято указывать пути, хотя есть конечно исключения. На Android нет стандартного диалога, на iOS есть, но Apple не рекомендует использовать его. Important: An iOS app should never use an Open or Save panel to prompt the user for the location of a file within the app’s sandbox. iOS apps should always save files to known locations inside their sandbox, and apps should use a custom interface when presenting those documents to the user. iOS apps can, however, use a UIDocumentPickerViewController to prompt the user to import, export, open, or move files to or from some areas outside the app’s sandbox. For more information, see the Document Picker Programming Guide. https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/UsingtheOpenandSavePanels/UsingtheOpenandSavePanels.html unit frmSelect; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Edit, FMX.Layouts, FMX.ListBox, FMX.Controls.Presentation; type TCallback = procedure (ASelected: String) of object; TfmSelect = class(TForm) Panel1: TPanel; btnRefresh: TButton; lstItems: TListBox; edtCurrentFolder: TEdit; pnlDirectoryNotExist: TPanel; lblDirectoryNotExist: TLabel; btnSelect: TButton; procedure btnRefreshClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure lstItemsClick(Sender: TObject); procedure btnSelectClick(Sender: TObject); private { Private declarations } public const CONST_STRING_PARENT = '..'; CONST_X = '/'; { I know is function for this } var Callback: TCallback; { Public declarations } function CD(AFolder: String): Boolean; end; var fmSelect: TfmSelect; implementation {$R *.fmx} uses System.IOUtils; procedure TfmSelect.btnSelectClick(Sender: TObject); var LResult: String; begin if Assigned(Callback) then begin if lstItems.ItemIndex = -1 then LResult := EmptyStr else LResult := lstItems.Items[lstItems.ItemIndex]; Callback(LResult); end; Close; end; function TfmSelect.CD(AFolder: String): Boolean; var LParent: String; LDirs, LFiles: TStringDynArray; s: String; begin lstItems.Clear; pnlDirectoryNotExist.Visible := False; if (AFolder <> EmptyStr) and (AFolder <> CONST_X) and (AFolder[AFolder.Length - 1] <> CONST_X) then AFolder := AFolder + CONST_X; edtCurrentFolder.Text := AFolder; { http://stackoverflow.com/questions/20318875/how-to-show-the-availble-files-in-android-memory-with-firemonkey } if not TDirectory.Exists(AFolder, True) then begin lblDirectoryNotExist.Text := 'Directory ' + AFolder + ' does not exist.'; pnlDirectoryNotExist.Visible := True; Exit(False); end; { } LParent := TDirectory.GetParent(AFolder); { } if LParent <> AFolder then lstItems.Items.Add(CONST_STRING_PARENT); { } LDirs := TDirectory.GetDirectories(AFolder, '*'); // Get all files. Non-Windows systems don't typically care about // extensions, so we just use a single '*' as a mask. LFiles := TDirectory.GetFiles(AFolder, '*'); for s in LDirs do lstItems.Items.Add(s + CONST_X); for s in LFiles do lstItems.Items.Add(s); Result := True; end; procedure TfmSelect.FormCreate(Sender: TObject); begin pnlDirectoryNotExist.Visible := False; end; procedure TfmSelect.lstItemsClick(Sender: TObject); var s: String; begin if lstItems.ItemIndex = -1 then Exit; if SameText(lstItems.Items[lstItems.ItemIndex], CONST_STRING_PARENT) then { Or we need to use global var for Parent } CD(TDirectory.GetParent(edtCurrentFolder.Text)) else begin s := lstItems.Items[lstItems.ItemIndex]; if s = EmptyStr then Exit; if s[s.Length - 1] = CONST_X then CD(s); end; end; procedure TfmSelect.btnRefreshClick(Sender: TObject); begin if edtCurrentFolder.Text <> EmptyStr then CD(edtCurrentFolder.Text) else CD(TPath.GetDocumentsPath); end; end. Использование if fmSelect = nil then begin Application.CreateForm(TfmSelect, fmSelect); fmSelect.Callback := Yahoo; end; fmSelect.Show; fmSelect.CD(TPath.GetDocumentsPath); procedure TFormXX.Yahoo(ASelectedItem: String); begin ShowMessage(ASelectedItem); // end;
    2 балла
  8. Друзья, нашел тут интересную статью, где тестируются разные jSON парсеры. Ссылка: http://www.webdelphi.ru/2016/10/ishhem-samyj-bystryj-parser-json-v-delphi/ Автор: Владислав Баженов Описание (26/10/2016):
    1 балл
  9. Да почему, все позволяет. Не надо переустанавливать приложение. Что вам мешает просто сказать новый файл БД и заменить старый?
    1 балл
  10. EqualRect(Control1.BoundsRect.Intersect(Control2.BoundsRect), Control2.BoundsRect) Если True, то Control2 не вышел за пределы Control1, иначе - вышел
    1 балл
  11. dnekrasov

    Работа с Printer->Canvas

    Конечно будет очень мелкое, ведь Вы устанавливаете 1200 точек на дюйм и ширина листа А4 в портретном режиме у Вас получается чуть меньше 100000 точек. Исходя из этого просто задайте адекватные значения для h, w, x0, y0, x, y и все у Вас будет в порядке. Например, для печати битмапки, я ипользую такой код: var bmp: TBitmap; SrcRect, DestRect: TRectF; DPI: TPoint; cx, cy: Extended; begin Printer.ActivePrinter.SelectDPI(1200, 1200); DPI := Printer.ActivePrinter.DPI[Printer.ActivePrinter.ActiveDPIIndex]; {$IFDEF MSWINDOWS} cx := DPI.X / GetDeviceCaps(GetDC(GetDesktopWindow), LOGPIXELSX); cy := DPI.Y / GetDeviceCaps(GetDC(GetDesktopWindow), LOGPIXELSY); {$ENDIF} bmp := TBitmap.Create(0, 0); try FEditor.GetAsBitmap(bmp); SrcRect := TRectF.Create(0, 0, bmp.Width * cx, bmp.Height * cy); DestRect := TRectF.Create(0, 0, Printer.PageWidth, Printer.PageHeight); if SrcRect.Width / SrcRect.Height > DestRect.Width / DestRect.Height then Printer.Orientation := TPrinterOrientation.poLandscape else Printer.Orientation := TPrinterOrientation.poPortrait; if (SrcRect.Width < DestRect.Width) and (SrcRect.Height < DestRect.Height) then begin DestRect.Left := (DestRect.Width - SrcRect.Width) / 2; DestRect.Width := SrcRect.Width; DestRect.Top := (DestRect.Height - SrcRect.Height) / 2; DestRect.Height := SrcRect.Height; end else begin SrcRect.Fit(DestRect); DestRect := SrcRect; end; Printer.BeginDoc; try Printer.Canvas.DrawBitmap(bmp, TRectF.Create(0, 0, bmp.Width, bmp.Height), DestRect, 1); finally Printer.EndDoc; end; except Printer.Abort; end; FreeAndNil(bmp); end;
    1 балл
  12. А можно еще просто использовать встроенную команду Windows "MSG" Например, команда msg * /server:192.168.0.2 "Тестовое сообщение " отправит сообщение, написанное в кавычках всем пользователям компьютера с адресом 192.168.0.2 В XP/2000 еще была команда net send, но начиная с Висты она больше не поддерживается
    1 балл
  13. Подскажите как можно обновить целиком файл БД (SQLite) без закрытия приложения, например, по нажатию кнопки <Обновить БД>. Интересуют особенности реализации для Android и iOS. Принимаются любые идеи, реализации и т.д. Delphi Seattle 10
    1 балл
  14. Читайте мой ответ выше (по закачке). Если вы закачиваете файл БД, то он меняет ВСЮ базу! И то что было у клиента затирается! Если вы обновляете через insert update через файл sql - то ничего не затирается!
    1 балл
  15. у меня XSO нормально 200 мб файл съел. и без проблем работал
    1 балл
  16. При смене какого еще режима?
    1 балл
  17. А если решитесь писать свой, то присмотретьсь к App Tethering
    1 балл
  18. Равиль Зарипов (ZuBy)

    ItemAppearance Button click

    я то как раз понял, а вы видимо нет Клик был по Item'y, не задевая другие объекты if ItemObject = nil then begin ShowMessage('Click to Item'); exit; end; Как можно различить объекты в Item'e? ShowMessage('Name: ' + ItemObject.Name + sLineBreak + 'Text: ' + (ItemObject as TListItemText).Text);
    1 балл
  19. у @Andrey Efimov есть статья от себя: 1) это качать с сервера (неважно с какого, хоть с облака) 2) инкрементное имя для базы, файла и тд. сейчас объясню: папка с файлами test_1.db test_2.db test_3.db всегда брать файл с большей циферкой, а другие например удалять. (как будут в эту папку попадать файлы не важно, деплой или скачивание) может не лучший вариант, зато кроссплатформенный
    1 балл
  20. При указанном мной способе, файл перезаписывается на УРА
    1 балл
  21. Под Android я делаю так. Вставляю изначально файл БД в Deploy. Потом вызываю при необходимости процедуру procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } var PackageName: JString; zip: TZipFile; begin // Отключаемся от базы FDConnection1.Connected := False; // Получаем имя apk файла PackageName := SharedActivityContext.getPackageResourcePath; if TFile.Exists(JStringToString(PackageName)) then begin // Удаляем старый файл базы TFile.Delete(TPath.GetHomePath + PathDelim + 'DBGK.db'); // Извлекаем новый файл базы zip := TZipFile.Create; zip.Open(JStringToString(PackageName), TZipMode.zmRead); zip.Extract('assets/internal/DBGK.db', TPath.GetDocumentsPath, False); zip.Close; zip.free; end; // Подключаемся к базе FDConnection1.Connected := True; end; Под iOS вставляю в ресурсы, потом вот так procedure TForm1.RefreshBD; { TODO -cKod : RefreshBD - обновление БД } begin // Отключаемся от базы FDConnection1.Connected := False; if FindResource(0, 'res_bd', PChar(RT_RCDATA)) <> 0 then rs_bd := TResourceStream.Create(0,'res_bd',PChar(RT_RCDATA)); if TFile.Exists(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db') then begin TFile.Delete(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db'); rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db'); end else begin rs_bd.SaveToFile(TPath.GetHomePath+PathDelim+'Documents'+PathDelim +'dbgkios.db'); end; FDConnection1.Connected := True; end;
    1 балл
  22. Закрываешь все соединения (FDConnection.Close) и спокойно перезаписываешь файл базы данных. Главное - это не деплоить файл базы данных в apk, а создавать его при первом открытии. иначе андроид не даст его удалить или перезаписать.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...