-
Постов
131 -
Зарегистрирован
-
Посещение
-
Победитель дней
7
Сообщения, опубликованные Олег Киреев
-
-
-
-
Здравствуйте Уважаемые.
Подскажите пожалуйста как устранить ошибку (скрин в приложении) на строке TNetworkState.Create в приложении для OS Android в Delphi 10.3. на телефоне 10-й Андроид.
Процедура такая:
//Поделиться сохранённым файлом
procedure TForm_DB_BOKA_Glavn.ButtonПоделитьсяClick(Sender: TObject);
var
NS: TNetworkState;
begin
NS := TNetworkState.Create;
if not NS.IsConnected then
begin
ShowMessage('Нет подключения к интернету.');
Abort;
end else
begin
if NS.IsWifiConnected then ShowMessage('Подключено через WiFi');
if NS.IsMobileConnected then ShowMessage('Подключено через WWAN');
if FileExists(TPath.GetDownloadsPath+'/Модель_'+ComboBoxВсеМодели.Selected.Text+'.txt') then
begin
ShareFile(TPath.GetDownloadsPath+'/Model_'+ComboBoxВсеМодели.Selected.Text+'.txt', 'Это файл карточки модели '++ComboBoxВсеМодели.Selected.Text);
Application.ProcessMessages;
end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/Model_'+ComboBoxВсеМодели.Selected.Text+'.txt'+' не найден.');
end;
end;Процедура ShareFile такая:
procedure ShareFile(aFileName, aComment : String);
{$IFDEF ANDROID}
var Intent : JIntent;
uri : Jnet_Uri;
AttachmentFile: JFile;
S : String;
{$ENDIF ANDROID}begin
{$IFDEF ANDROID}Intent := TJIntent.Create;
Intent.setAction(TJIntent.JavaClass.ACTION_SEND);
Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK);
S:=TPath.GetFileName(aFileName);
Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(aComment));
Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(aComment));
AttachmentFile := TJFile.JavaClass.init(StringToJString(aFileName));
Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile);
Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID));
Intent.setType(StringToJString('text/plain'));
// Intent.setDataAndType(StrToJURI('file:' + TPath.Combine(TPath.GetSharedDownloadsPath, 'picture.png')), StringToJString ('image/png'));
SharedActivity.startActivity(Intent);
{$ENDIF ANDROID}
end;
При этом разрешение к памяти у телефона есть на это приложение. Интересно что в другом моём приложении где те же процедуры всё работает. Но перед тем как это 2-е приложение я запустил после обновления 9-го Андроида на 10-й система спросила сама разрешения а в этом нет. Я вручную разрешал. Может тут дело не в разрешениях??? -
-
Здравствуйте Уважаемые.
В продолжение темы. У меня тоже что и у пользователя "Cody71727172" выше. Может кто знает как решить эту проблему???
С Уважением. Олег.
-
Здравствуйте уважаемые.
Думаю что мой вопрос в продолжении этой темы. Пожалуйста, кто знает, подскажите как решить следующую проблему.
Есть приложение для OS Android сделанное на Сиэтле 10.0 (IDE установлена на ПК с OS Win 7) протестированное успешно на телефоне Самсунг Галакси J6 (OS Android 9). Пробую скомпелировать и запустить это же приложение на IDE Rio 10.3.2. Компеляция проходит успешно а само приложение на телефоне запускается до заставки и виснет. При установке на телефон его OS сообщает что приложение разработано для другой версии OS Android и будет работать не корректно. Телефон остался тот же с той же OS Android 9. Файлы AndroidManifest старый и новый прилагаю. Также прилагаю фото юнита и SDK менеджера. Всё в архивном файле.
С Уважением. Олег.
-
Приложение для получения информации расчётным путём об углах:
- вертикальной плоскости;
- в горизонтальной плоскости;
- объёмный;
- эквивалентный
в шарнирах карданных валов на
основе сделанных замеров на собранном автобусе, троллейбусе, грузовике.
Может пригодиться работникам сервисных служб, лицам эксплуатирующим грузовую или
пассажирскую автомобильные техники, лицам не конструкторских служб.
Особенно в случае нахождения в месте недоступном к интернету и компьютеру.
Работает на устройствах под OS Android.
Существует и более расширенная версия для OS Windows.
Пожалуйста, с предложениями и пожеланиями обращайтесь к разработчику:
Кирееву Олегу по тел. +375 29 676 13 84 или пишите на kireevoleg1966@gmail.com.
Буду рад Вашему любому отзыву.
С Уважением. -
Сергей.
Я у себя (Delphi 10 Seattle) попробовал загрузить 3D модель формата dae. В приложении Вы можете посмотреть что модель не прозрачная.
С Уважением. Олег.
-
-
Да Вы правы. Я быстро прочёл Ваш вопрос и не обратил внимание на слово Андроид. Прошу извинить.
С Уважением. Олег.
-
-
Я делаю так:
1.Создаю файл базы (БД) например для Виндовс Acces (пример моего в приложении).
2.Создаю файл TreeView.dat.
3.Подключаюсь к БД.
4.Создаю нове ветки так:
//Ввести ветку
procedure TForm_Glavn.SpeedButton_vvod_vetkiClick(Sender: TObject);
begin
//проверка наличия текста в Едите
if Edit_Mame_Vetok.Text = '' then
begin
MessageDl.MessageDlg('Вы не ввели название ветки!', mtInformation,[mbYes],0);
Abort;
end;
TreeView1.Items. Add (TreeView1. Selected, Edit_Mame_Vetok.Text) ;
//база
Query_Glav.Insert;
Query_Glav.FieldByName('Dat').AsString:=DateToStr(Now);
Query_Glav.FieldByName('Imya_vetok').AsString:=Edit_Mame_Vetok.Text;
Query_Glav.FieldByName('Opisanie').AsString:=Memo_opisanie.Text;
Query_Glav.Post;//сохраняем дерево
F := TFileStream.Create(Base+'\Data\TreeView.dat', fmCreate or fmShareCompat);
try
F.WriteComponent(TreeView1);
finally
F.Free;
end;
Edit_Mame_Vetok.Text:='';
end;5.Создаю подветки так:
//Ввести подветку
procedure TForm_Glavn.SpeedButton_vvod_podvetkiClick(Sender: TObject);
begin
if TreeView1.Selected = nil then
begin
MessageDl.MessageDlg('Вы не выбрали в какой ветке делаем подветку!', mtInformation,[mbYes],0);
Exit; //если не выбрана ветка выходим
end;//проверка наличия текста в Едите
if Edit_Mame_Vetok.Text = '' then
begin
MessageDl.MessageDlg('Вы не ввели название ветки!', mtInformation,[mbYes],0);
Abort;
end;TreeView1.Items.AddChild (TreeView1. Selected, Edit_Mame_Vetok.Text);
//база
Query_Glav.Insert;
Query_Glav.FieldByName('Dat').AsString:=DateToStr(Now);
Query_Glav.FieldByName('Imya_vetok').AsString:=Edit_Mame_Vetok.Text;
Query_Glav.FieldByName('Opisanie').AsString:=Memo_opisanie.Text;
Query_Glav.Post;//сохраняем дерево
F := TFileStream.Create(Base+'\Data\TreeView.dat', fmCreate or fmShareCompat);
try
F.WriteComponent(TreeView1);
finally
F.Free;
end;
Edit_Mame_Vetok.Text:='';
end;6.Прикрепляю файл так:
// Прикрепить файл
procedure TForm_Glavn.SpeedButton_FileClick(Sender: TObject);
var
IconStream:TMemoryStream;
begin
if TreeView1.Selected = nil then
begin
MessageDl.MessageDlg('Вы не выбрали в какой ветке делаем подветку!', mtInformation,[mbYes],0);
Exit; //если не выбрана ветка выходим
end;OpenDialog1.InitialDir:=Base;
if Opendialog1.Execute then
begin
//заносим файл в потоке
SpeedButton_File.Caption:='Подождите......';
Application.ProcessMessages;
IconStream:=TMemoryStream.Create;
IconStream.LoadFromFile(OpenDialog1.FileName);
//становимся в невидимой таблице на указанной модели
Query_Glav.Locate('Imya_vetok',Edit_Mame_Vetok.Text,[loPartialKey, loCaseInsensitive]);
Query_Glav.Edit;
if (ExtractFileExt(Opendialog1.FileName) = '.pdf')then Query_Glav.FieldByName('RashirenieFile').AsInteger:=3;
if (ExtractFileExt(Opendialog1.FileName) = '.docx')then Query_Glav.FieldByName('RashirenieFile').AsInteger:=2;
if (ExtractFileExt(Opendialog1.FileName) = '.jpg')then Query_Glav.FieldByName('RashirenieFile').AsInteger:=0;
if (ExtractFileExt(Opendialog1.FileName) = '.rar')then Query_Glav.FieldByName('RashirenieFile').AsInteger:=1;
(Query_Glav.FieldByName('File') as TBlobField).LoadFromStream(IconStream);
IconStream.Free;
Application.ProcessMessages;
MessageDl.MessageDlg('Файл добавлен в базу!', mtInformation,[mbYes],0);
SpeedButton_File.Caption:=' Прикрепить файл';
end else MessageDl.MessageDlg('Ошибка ввода!', mtInformation,[mbYes],0);
end;7. Удаляю ветку или подветку так:
//Удалить ветку/ подветку
procedure TForm_Glavn.SpeedButton_DeleteClick(Sender: TObject);
begin
if TreeView1.Items.Count = 0 then //проверка наличия веток вообще
begin
MessageDl.MessageDlg('Так нет же веток!', mtInformation,[mbYes],0);
Abort;
end;
if TreeView1.Selected.HasChildren=True then //проверка наличия подветки
begin
MessageDl.MessageDlg('Сначала удалите подветку!', mtInformation,[mbYes],0);
Image1.Refresh;
Abort;
end;
if TreeView1.Selected.HasChildren=False then //проверка наличия подветки
begin
SpeedButton_Delete.Caption:='Подождите.....';
Application.ProcessMessages;
//становимся в невидимой таблице на указанной ветке
Query_Glav.Locate('Imya_vetok',TreeView1.Selected.Text,[loPartialKey, loCaseInsensitive]);
if Query_Glav.FieldByName('Imya_vetok').AsString <> '' then Query_Glav.Delete;//удаляем в базе
Application.ProcessMessages;
TreeView1.Items.Delete(TreeView1.Selected); //удаляем в дереве
Application.ProcessMessages;
Image1.Refresh;
Application.ProcessMessages;
SpeedButton_Delete.Caption:=' Удалить ветку/ подветку';
end;//сохраняем дерево
F := TFileStream.Create(Base+'\Data\TreeView.dat', fmCreate or fmShareCompat);
try
F.WriteComponent(TreeView1);
finally
F.Free;
end;
Edit_Mame_Vetok.Text:='';
end;
8. Переименовываю ветки так:
//Переименовать ветку/ подветку
procedure TForm_Glavn.SpeedButton3Click(Sender: TObject);
begin
//проверка наличия текста в Едите
if Edit_Mame_Vetok.Text = '' then
begin
MessageDl.MessageDlg('Вы не ввели название ветки!', mtInformation,[mbYes],0);
Abort;
end;
//становимся в невидимой таблице на указанной модели
Query_Glav.Locate('Imya_vetok',TreeView1.Selected.Text,[loPartialKey, loCaseInsensitive]);TreeView1.Selected.Text:=Edit_Mame_Vetok.Text;
//база
Query_Glav.Edit;
Query_Glav.FieldByName('Dat').AsString:=DateToStr(Now);
Query_Glav.FieldByName('Imya_vetok').AsString:=Edit_Mame_Vetok.Text;
Query_Glav.FieldByName('Opisanie').AsString:=Memo_opisanie.Text;
Query_Glav.Post;
//сохраняем дерево
F := TFileStream.Create(Base+'\Data\TreeView.dat', fmCreate or fmShareCompat);
try
F.WriteComponent(TreeView1);
finally
F.Free;
end;
Edit_Mame_Vetok.Text:='';
end;
9.Открываю прикреплённый файл так:
// Открыть прикреплённый файл отдельно
procedure TForm_Glavn.SpeedButton4Click(Sender: TObject);
var
ImageData:TMemoryStream;
begin
if TreeView1.Selected = nil then
begin
MessageDl.MessageDlg('Вы не выбрали в какой ветке делаем подветку!', mtInformation,[mbYes],0);
Exit; //если не выбрана ветка выходим
end;//становимся в невидимой таблице на указанной модели
Query_Glav.Locate('Imya_vetok',Edit_Mame_Vetok.Text,[loPartialKey, loCaseInsensitive]);ImageData:=TMemoryStream.Create;
(Query_Glav.FieldByName('File') as TBlobField).SaveToStream(ImageData);
ImageData.Position:=0;
if ImageData.Size<>0 then
begin
if Query_Glav.FieldByName('RashirenieFile').AsInteger=3 then Path:=Base+'\Temp\Dokument.pdf';
if Query_Glav.FieldByName('RashirenieFile').AsInteger=2 then Path:=Base+'\Temp\Dokument.docx';
if Query_Glav.FieldByName('RashirenieFile').AsInteger=0 then Path:=Base+'\Temp\Dokument.jpg';
if Query_Glav.FieldByName('RashirenieFile').AsInteger=1 then Path:=Base+'\Temp\Dokument.rar';
ImageData.SaveToFile(Path);
ImageData.Free;
ImageData:=nil;if FileExists(Path) then
begin
ShellExecute (0, 'open', pChar(Path), nil, nil, SW_SHOW);
end else
MessageDl.MessageDlg('Файл'+Path+' в папке Data не найден.', mtInformation,[mbYes],0);
end else
MessageDl.MessageDlg('В этой ветке документа нет.', mtInformation,[mbYes],0);
end; -
СпасиБО Андрей.
С Уважением. Олег.
-
Подскажите пожалуйста почему когда я пытаюсь заполнить ComboBox из базы SQLite в мобильном приложении для Android вот так:
//заполняем ComboBox двигателя
FDQuery_ComboBox.Active:=False;
FDQuery_ComboBox.SQL.Clear;
FDQuery_ComboBox.SQL.Add('SELECT Dvig_ob FROM TabSR ');
FDQuery_ComboBox.Active:=True;
//ShowMessage('Количество строк: '+IntToStr(FDQuery_ComboBox.RecordCount));
for i:=1 to FDQuery_ComboBox.RecordCount do
Begin
FDQuery_ComboBox.RecNo := i;
ComboBox_Engin.Items.Add(FDQuery_ComboBox.Fields[0].AsString);
End;в FDQuery_ComboBox.RecordCount всего ровно 50 позиций хотя в таблице TabSR 288 строк????
СпасиБО. С Уважением.
-
Сам спросил и сам ответил:
Сделал проще вот так:
//Поделится БД
procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
begin
if FileExists(TPath.GetDownloadsPath+'/DB_BOKA.db3') then
begin
ShareFile(TPath.GetDownloadsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
Application.ProcessMessages;
end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/DB_BOKA.db3'+' не найден.');
Form_glavn.Realign;
end;Теперь телефон не зависает.
-
3 часа назад, mazayhin сказал:
Возможно? это связано с восстановлением подключения к БД? На момент от правки она закрыта?
Если попробовать отправить другой какой-то файл, который не используется приложением, будет ли эта проблема?
Попробовал другой файл. Та же проблема зависает телефон. Может что ещё подскажете?
-
1 час назад, mazayhin сказал:
На сколько знаю, на разных устройствах путь может отличаться.
Посмотрите статью https://delphifmandroid.blogspot.com/2014/02/deployment-manager.html
Там описано про пути деплоя, и как потом найти на устройстве, используя System.IOUtils
СпасиБо с этим разобрался.
А ещё подскажите пожалуйста почему зависает телефон когда я отправляю файл так:
//Поделится БД
procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
begin
if FileExists(TPath.GetDownloadsPath+'/DB_BOKA.db3') then
begin
Try
ShareFile(TPath.GetDownloadsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
Sleep(100);
ShowMessage('Отправлено.');
Except
ShowMessage('Не отправлено.');
End;
end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/DB_BOKA.db3'+' не найден.');
end;Хотя файл и сообщение отправляются нормально на указанный мной в приложении адрес. Хотя я поставил скобки исключения.
С Уважением. Олег Киреев.
-
А ещё подскажите пожалуйста почему зависает телефон когда я отправляю файл так:
//Поделится БД
procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
begin
if FileExists(TPath.GetDownloadsPath+'/DB_BOKA.db3') then
begin
Try
ShareFile(TPath.GetDownloadsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
Sleep(100);
ShowMessage('Отправлено.');
Except
ShowMessage('Не отправлено.');
End;
end else ShowMessage('Файл '+TPath.GetDownloadsPath+'/DB_BOKA.db3'+' не найден.');
end;Хотя файл и сообщение отправляются нормально на указанный мной в приложении адрес. Хотя я поставил скобки исключения.
С Уважением. Олег Киреев.
-
1 час назад, mazayhin сказал:
Олег, если файл деплоится в external, то путь к нему надо получать так:
TPath.Combine(TPath.GetSharedDocumentsPath, 'DB_BOKA.db3')
СпасиБО. Буду знать.
Но я до этого попробовал задеплоить сюда .\assets\Download\ и приложение нашло его так:
//поиск файла
procedure TForm_glavn.Button10Click(Sender: TObject);
var
FileToFind: string;
begin
FileToFind := FileSearch('/storage/emulated/0/Android/data/com.embarcadero.BOKA/files/Download/DB_BOKA.db3', GetCurrentDir);
if FileToFind = '' then
ShowMessage('Не смог найти: ' + 'DB_BOKA.db3' + '.')
else
ShowMessage('Нашёл в каталоге ' + FileToFind + '.');
end; -
В 16.11.2019 в 15:19, Евгений Корепов сказал:
Файл будет лежать там, куда вы его положили. Откуда нам знать где на вашем телефоне может лежать какой то файл?
Дело в том что этот файл задеплоин так:
Я пытаюсь узнать действительно ли он там вот так:
//поиск файла
procedure TForm_glavn.Button10Click(Sender: TObject);
var
FileToFind: string;
begin
FileToFind := FileSearch('.\assets\external\DB_BOKA.db3', GetCurrentDir);
if FileToFind = '' then
ShowMessage('Не смог найти: ' + 'DB_BOKA.db3' + '.')
else
ShowMessage('Нашёл в каталоге ' + FileToFind + '.');
end;Сообщение показывает "Не смог найти".
Подскажите пожалуйста что здесь не так?
С Уважением. Олег Киреев.
-
В 03.05.2018 в 10:29, Евгений Корепов сказал:
Вот так:
procedure ShareFile(aFileName, aComment : String); {$IFDEF ANDROID} var Intent : JIntent; uri : Jnet_Uri; AttachmentFile: JFile; S : String; {$ENDIF ANDROID} begin {$IFDEF ANDROID} Intent := TJIntent.Create; Intent.setAction(TJIntent.JavaClass.ACTION_SEND); Intent.setFlags(TJIntent.JavaClass.FLAG_ACTIVITY_NEW_TASK); S:=TPath.GetFileName(aFileName); Intent.putExtra(TJIntent.JavaClass.EXTRA_SUBJECT, StringToJString(aComment)); Intent.putExtra(TJIntent.JavaClass.EXTRA_TEXT, StringToJString(aComment)); AttachmentFile := TJFile.JavaClass.init(StringToJString(aFileName)); Uri := TJnet_Uri.JavaClass.fromFile(AttachmentFile); Intent.putExtra(TJIntent.JavaClass.EXTRA_STREAM, TJParcelable.Wrap((Uri as ILocalObject).GetObjectID)); Intent.setType(StringToJString('text/plain')); // Intent.setDataAndType(StrToJURI('file:' + TPath.Combine(TPath.GetSharedDownloadsPath, 'picture.png')), StringToJString ('image/png')); SharedActivity.startActivity(Intent); {$ENDIF ANDROID} end;
Из давнего проекта, возможно нужно будет подправить согласно сообщениям компилятора.
P.S. И файл должен находится в общедоступной папке (к примеру TPath.GetSharedDocumentsPath)
Здравствуйте Евгений.
Пожалуйста ответьте мне на такой вопрос по этой теме.
Я пытаюсь отправить файл базы вот так:
//Поделится БД
procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
begin
if FileExists(TPath.GetSharedDocumentsPath+'/DB_BOKA.db3') then
begin
Try
ShareFile(TPath.GetSharedDocumentsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
ShowMessage('Отправлено.');
Except
ShowMessage('Не отправлено.');
End;
end else ShowMessage('Файл '+TPath.GetSharedDocumentsPath+'/DB_BOKA.db3'+' не найден.');
end;себе на почту.
Появляется сообщение что файл не найден. Наверное дело в пути? Подскажите пожалуйста как узнать где лежит файл базы на телефоне? Поделитесь пожалуйста своим опытом.
С Уважением. Олег.
-
В 03.05.2018 в 12:21, Вадим Шавров сказал:
Всё работает, огромное Вам СПАСИБО!
Здравствуйте Вадим.
Пожалуйста ответьте мне на такой вопрос по этой теме.
Я пытаюсь отправить файл базы вот так:
//Поделится БД
procedure TForm_glavn.ButtonПоделитсяБДClick(Sender: TObject);
begin
if FileExists(TPath.GetSharedDocumentsPath+'/DB_BOKA.db3') then
begin
Try
ShareFile(TPath.GetSharedDocumentsPath+'/DB_BOKA.db3', 'Это файл DB_BOKA.db3 из приложения БОКА.');
ShowMessage('Отправлено.');
Except
ShowMessage('Не отправлено.');
End;
end else ShowMessage('Файл '+TPath.GetSharedDocumentsPath+'/DB_BOKA.db3'+' не найден.');
end;себе на почту.
Появляется сообщение что файл не найден. Наверное дело в пути? Подскажите пожалуйста как узнать где лежит файл базы на телефоне? Поделитесь пожалуйста своим опытом.
С Уважением. Олег.
-
СпасиБО SLAVZ. Попробую.
Может Вам пригодится я вот так вышел и положения:
Сначала:
//выбираем фото из галереи устройства
procedure TForm_haracteristik.TakePhotoFromLibraryAction1DidFinishTaking(
Image: TBitmap);
begin
Image_ФотоХаракДвиг.Bitmap.Assign(Image);
end;Потом вношу в Базу:
//ввести харак-ку
procedure TForm_haracteristik.Button_ВвестиClick(Sender: TObject);
begin
if Edit_НазваниеХарактеристики.Text='' then
begin
ShowMessage('Вы не ввели название характеристики.');
Abort;
end;
//проверяем наличие дубля названия характеристики:
FDQuery_Engin.Open;
FDQuery_Engin.SQL.Clear;
FDQuery_Engin.SQL.Add('select * from Tab_Harak_Engin where Name_Harak = ' + #39+ Edit_НазваниеХарактеристики.Text +#39);
FDQuery_Engin.Active:=True;
if FDQuery_Engin.RecordCount > 0 then
begin
ShowMessage('Такое название уже есть !');
Abort;
end else
begin
Try
FDQuery_Engin.Active:=False;
FDQuery_Engin.SQL.Clear;
FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin ORDER BY Name_Harak' );
FDQuery_Engin.Active:=True;
//вставляем строку новой модели:
FDQuery_Engin.Insert;
FDQuery_Engin.FieldByName('Name_Harak').AsString:=Edit_НазваниеХарактеристики.Text;
//заносим в поток файл картинки
IconStream:=TMemoryStream.Create;
Image_ФотоХаракДвиг.Bitmap.SaveToStream(IconStream);
IconStream.Position := 0;
(FDQuery_Engin.FieldByName('Harak_Engin') as TBlobField).LoadFromStream(IconStream);
IconStream.Free;
FDQuery_Engin.Post;
ShowMessage('Введено.');
Except
ShowMessage('Ошибка ввода в базу.');
End;
end;
//перезагружаем Boxы
Box_НазвХарДвиг.Clear;
Box_НазвХарДвигУдаление.Clear;
FDQuery_ComboBox_Engin.Active:=False;
FDQuery_ComboBox_Engin.SQL.Clear;
FDQuery_ComboBox_Engin.SQL.Add('SELECT Name_Harak FROM Tab_Harak_Engin ORDER BY Name_Harak');
FDQuery_ComboBox_Engin.Active:=True;
for i:=1 to FDQuery_ComboBox_Engin.RecordCount do
begin
FDQuery_ComboBox_Engin.RecNo:=i;
Box_НазвХарДвиг.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString);
Box_НазвХарДвигУдаление.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString);
end;
end;Так удаляю из базы если надо:
//удалить
procedure TForm_haracteristik.Button_УдалитьClick(Sender: TObject);
begin
if Box_НазвХарДвигУдаление.ItemIndex=-1 then
begin
ShowMessage('Вы не выбрали имя характеристики.');
Abort;
end;
TX:='';
TX:=Box_НазвХарДвигУдаление.Selected.Text;//становимся на эту позицию
FDQuery_Engin.Active:=False;
FDQuery_Engin.SQL.Clear;
FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin where Name_Harak= '+#39+TX+ #39);
FDQuery_Engin.Active:=True;
Try
FDQuery_Engin.Delete;
ShowMessage('Удалено.');
Except
ShowMessage('Не удалось удалить.');
End;//перезагружаем Boxы
Box_НазвХарДвиг.Clear;
Box_НазвХарДвигУдаление.Clear;
FDQuery_ComboBox_Engin.Active:=False;
FDQuery_ComboBox_Engin.SQL.Clear;
FDQuery_ComboBox_Engin.SQL.Add('SELECT Name_Harak FROM Tab_Harak_Engin ORDER BY Name_Harak');
FDQuery_ComboBox_Engin.Active:=True;
for i:=1 to FDQuery_ComboBox_Engin.RecordCount do
begin
FDQuery_ComboBox_Engin.RecNo:=i;
Box_НазвХарДвиг.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString);
Box_НазвХарДвигУдаление.Items.Add(FDQuery_ComboBox_Engin.FieldByName('Name_Harak').AsString);
end;
end;
Так просматриваю:
//просмотр картинки
procedure TForm_haracteristik.ComboBox_НазвХарДвигChange(Sender: TObject);
begin
//становимся на эту позицию
//FDQuery_Engin.Locate('Name_Harak',TX,[loPartialKey, loCaseInsensitive]);FDQuery_Engin.Active:=False;
FDQuery_Engin.SQL.Clear;
FDQuery_Engin.SQL.Add('SELECT * FROM Tab_Harak_Engin where Name_Harak= '+#39+Box_НазвХарДвиг.Selected.Text+ #39);
FDQuery_Engin.Active:=True;
Try
//заносим в поток файл картинки
IconStream:=TMemoryStream.Create;
(FDQuery_Engin.FieldByName('Harak_Engin') as TBlobField).SaveToStream(IconStream);
If IconStream.Size<>0 then
begin
IconStream.Position:=0;
Image_Просмотр.Bitmap.LoadFromStream(IconStream);
IconStream.Free;
end else
begin
ShowMessage('Нет фото.');
Exit;
end;
Except
ShowMessage('Не удалось загрузить фото.');
End;
end; -
Здравствуйте Ярослав.
СпасиБО за ссылку. Я её изучил. Очень полезно. Но у меня немного другая задача. Мне надо занести в БД сфотографированную картинку. Как заносить в БД потоком я знаю, но как получить в переменную имя этого файла фото???? Под Виндовс есть компонент OpenDialog и через него всё просто. Под Андроид такого компонента нет. Пожалуйста Ярослав посоветуйте как это реализовать?
С Уважение Олег.
Изменить ширину скроллбара
в Стилизация
Опубликовано
Здравствуйте уважаемый Azaz.
1. Я извиняюсь но уважаемый Администратор просит в правилах: "
2.2. Каким должен быть текст вопроса?
2. У компонента TListBox есть своё свойство-ШоуСкроллБарс. Достаточно поставить птичку.
С Уважением. Олег.