Лидеры
Популярный контент
Показан контент с высокой репутацией 06.04.2017 во всех областях
-
Отсылка на пользователя
AngryOwl и 3 других отреагировал Равиль Зарипов (ZuBy) за тема
Доброго времени суток уважаемые пользователи форума! Часто в постах Вы делаете отсылку(упоминание) на пользователя, но как правило делается это не правильно. Я записал небольшое видео, которое поможет сделать это правильно При упоминании пользователя, он получает уведомление (даже если он не подписан на эту тему) и сможет быстрее ответить на вопрос Удачи!4 балла -
[Заметка] Устанавливаем тему для нативных диалогов в Android
sinuke и 3 других отреагировал Равиль Зарипов (ZuBy) за тема
Ссылка: http://blog.rzaripov.kz/2017/04/android.html Автор: @Равиль Зарипов (ZuBy) Описание: Устанавливаем тему для нативных диалогов в Android4 балла -
думаю, подойдет a:=lst1.ItemByPoint(10,0); b:=lst1.ItemByPoint(10,lst1.height);3 балла
-
Как перезаписать локальную базу SQLite скачав новую с сервера в Интернете
Andrey Efimov и 2 других отреагировал Vitaldj за вопрос
Я хоть не начинающий, но нет андроида и если и программирую для мобил, то только на 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 балла -
Обновление файлов при установке через GooglePlay
Олег Киреев и ещё один отреагировал Vitaldj за вопрос
Где здесь шутка? Просто описался, хотел написать слово "скачать", а написал "сказать". Ничего вам не мешает скачать из приложения файл БД и заменить на этом же приложении.2 балла -
Как перезаписать локальную базу SQLite скачав новую с сервера в Интернете
Евгений Корепов и ещё один отреагировал Andrey Efimov за вопрос
Обратите внимание: 1) На пост Виталия с примером кода по скачиванию файла из Интернета 2) На пост Равиля, две темы, в одной есть ссылка на мою статью, во второй код из моей статьи 3) Совместите два этих пункта и получите Профит. p.s. Не забудьте, перед непосредственным обновлением файла (или раньше), необходимо отключиться от базы!2 балла -
2 балла
-
Выбор файла через диалог
Равиль Зарипов (ZuBy) и ещё один отреагировал ENERGY за вопрос
На мобильных платформах обычно не принято указывать пути, хотя есть конечно исключения. На 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 балла -
Друзья, нашел тут интересную статью, где тестируются разные jSON парсеры. Ссылка: http://www.webdelphi.ru/2016/10/ishhem-samyj-bystryj-parser-json-v-delphi/ Автор: Владислав Баженов Описание (26/10/2016):1 балл
-
Обновление файлов при установке через GooglePlay
Andrey Efimov отреагировал Vitaldj за вопрос
Да почему, все позволяет. Не надо переустанавливать приложение. Что вам мешает просто сказать новый файл БД и заменить старый?1 балл -
EqualRect(Control1.BoundsRect.Intersect(Control2.BoundsRect), Control2.BoundsRect) Если True, то Control2 не вышел за пределы Control1, иначе - вышел1 балл
-
Конечно будет очень мелкое, ведь Вы устанавливаете 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 балл
-
А можно еще просто использовать встроенную команду Windows "MSG" Например, команда msg * /server:192.168.0.2 "Тестовое сообщение " отправит сообщение, написанное в кавычках всем пользователям компьютера с адресом 192.168.0.2 В XP/2000 еще была команда net send, но начиная с Висты она больше не поддерживается1 балл
-
Обновление файла БД без перезапуска приложения
Олег Киреев отреагировал #WAMACO за вопрос
Подскажите как можно обновить целиком файл БД (SQLite) без закрытия приложения, например, по нажатию кнопки <Обновить БД>. Интересуют особенности реализации для Android и iOS. Принимаются любые идеи, реализации и т.д. Delphi Seattle 101 балл -
Обновление файла БД без перезапуска приложения
Олег Киреев отреагировал Vitaldj за вопрос
Читайте мой ответ выше (по закачке). Если вы закачиваете файл БД, то он меняет ВСЮ базу! И то что было у клиента затирается! Если вы обновляете через insert update через файл sql - то ничего не затирается!1 балл -
у меня XSO нормально 200 мб файл съел. и без проблем работал1 балл
-
При смене какого еще режима?1 балл
-
А если решитесь писать свой, то присмотретьсь к App Tethering1 балл
-
ItemAppearance Button click
Ra72 отреагировал Равиль Зарипов (ZuBy) за вопрос
я то как раз понял, а вы видимо нет Клик был по 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 балл -
Обновление файлов при установке через GooglePlay
Олег Киреев отреагировал Равиль Зарипов (ZuBy) за вопрос
у @Andrey Efimov есть статья от себя: 1) это качать с сервера (неважно с какого, хоть с облака) 2) инкрементное имя для базы, файла и тд. сейчас объясню: папка с файлами test_1.db test_2.db test_3.db всегда брать файл с большей циферкой, а другие например удалять. (как будут в эту папку попадать файлы не важно, деплой или скачивание) может не лучший вариант, зато кроссплатформенный1 балл -
Обновление файла БД без перезапуска приложения
Константин Паньков отреагировал masmat за вопрос
При указанном мной способе, файл перезаписывается на УРА1 балл -
Обновление файла БД без перезапуска приложения
Вадим Шавров отреагировал masmat за вопрос
Под 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 балл -
Обновление файла БД без перезапуска приложения
Константин Паньков отреагировал bigjorj за вопрос
Закрываешь все соединения (FDConnection.Close) и спокойно перезаписываешь файл базы данных. Главное - это не деплоить файл базы данных в apk, а создавать его при первом открытии. иначе андроид не даст его удалить или перезаписать.1 балл