Major
-
Постов
163 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Major
-
-
kami,
спасибо за помощь.
В статье Я.Бровина про удаление объектов под Андроидом ни слова о методе Release:
http://yaroslavbrovin.ru/object_life_cycle_in_delphi_part_2_android_ios-ru/
-
enatechno,
спасибо за ответ!
1 Вариант. Заменой удаления фреймов на скрытие (подправленный проект приложил).
Фреймов будет много и они будут не такими голыми, как в тестовом примере, поэтому скрывать/показывать - не подойдет (думаю, что быстро кончится память).
2 Вариант. Расположить панель с кнопкой Back на главной форме, а не дублировать ее в каждом фрейме. (При необходимости саму кнопку Back можно скрывать при возврате на первый таб).
Идея интересная, только тогда получится два тулбара (один - для Back, второй - для самого фрейма, где на тулбаре будет несколько кнопок). Не очень красиво
3 Вариант. Использовать отложенное удаление фрейма (например в потоке).
а есть пример? интересно очень
-
-
запустил программу через отладчик, получил такую ситуацию. Открывается FMX.Controls, а в нем:
procedure TControl.MouseClick(Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin if FPressed and not(FDoubleClick) and PointInObjectLocal(X, Y) then begin Click; FPressed := False; StartTriggerAnimation(Self, 'Pressed'); end; end;
-
4 часа назад, enatechno сказал:
Ну а причина зависания - то, что вы в процедуре обработчика кнопки фрейма OnClick вызываете TForm1.TabControl1Change и там удаляете этот фрейм и саму кнопку.а как можно решить эту проблему? как перейти из фрейма на главную вкладку не только через vkHardwareBack?
вот приложил тестовый проект
-
Господа, помогите пожалуйста разобраться, в чем проблема.
В программе одна форма, на ней табконтрол с двумя вкладками. TabPosition - None. Одна вкладка выполняет роль меню, из которой можно перейти во вторую вкладку, куда грузится фрейм.
Если возвращаться в главную вкладку из фрейма через обработку OnKeyUp, то всё норм, без зависаний:
procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; var KeyChar: Char; Shift: TShiftState); begin if (Key = vkHardwareBack) then begin Key := 0; if (TabControl1.ActiveTab = TabItem1) then Close else TabControl1.ActiveTab := TabItem1; end; end;
А если через кнопку внутри фрейма
Form1.TabControl1.ActiveTab := Form1.TabItem1;
то виснет.
Уничтожаю фрейм так:
procedure TForm1.TabControl1Change(Sender: TObject); begin if (TabControl1.ActiveTab = TabItem1) then if (FFrame <> nil) then begin FFrame.Parent := nil; FFrame.DisposeOf; FFrame := nil; end; end;
-
Что-то я не понял, а почему для TFrame нет события OnCreate? Оверрайд что ли делать?
-
В 17.02.2017 в 15:58, Равиль Зарипов (ZuBy) сказал:
где вы это прочитали?
в андроиде нет ресурсов таких как Windows
я вот сейчас еще раз проверил. Всё, что кидалось в Deployment, - в apk-файле находится в папке assets. А то, что подключалось через ресурсы (brcc32), то находится в .so-файле.
Delphi 10.1 Berlin.
Можете сами проверить
-
В настройках проекта Version Info, label можно выставить надпись, которая будет показываться на смартфоне для иконки программы. А как ее динамически менять при установке на смартфон? (в зависимости от языка системы)
-
Есть ли способ сделать стандартные контроли (TGroupbox, например) прозрачными? В Windows-приложении они прозрачные, а в Android-приложении имеют белый фон.
Спасибо.
-
3 часа назад, krapotkin сказал:
я просто в SharedDocuments пишу. Это не очень хорошо, но полезно
если каждый туда будет писать, представляю, какой бардак там может образоваться))
-
3 часа назад, Равиль Зарипов (ZuBy) сказал:
её давно нет на многих телефонах, начиная с SDK 14 вроде Android отошел от этой идеологии.
а Samsung Galaxy S4 относится ко многим телефонам? На нем есть Menu.
-
3 часа назад, Равиль Зарипов (ZuBy) сказал:
как понять список доступных кнопок?
на моем смартфоне есть кнопки HardwareBack, Home, Menu, а на планшете кнопки Menu физически нет
-
Можно ли как-то узнать список доступных кнопок (HardwareBack, Home, Menu) на том или ином девайсе?
Еще заметил, что кнопки vkHardwareBack и vkMenu можно перехватить в OnKeyUp, а кнопка vkHome выполняется так, как системе угодно.
-
ENRGY,
а как вам такой способ (не мой)?
uses Androidapi.Helpers, Androidapi.JNI.App, Androidapi.JNI.JavaTypes, Androidapi.JNI.GraphicsContentViewText; var SP: JSharedPreferences; SPE: JSharedPreferences_Editor; procedure TMain.FormShow(Sender: TObject); begin SP := TAndroidHelper.Activity.getSharedPreferences(StringToJString('ZTApp'), 0); IP.Text := JStringToString(SP.getString(StringToJString('IP'), StringToJString('127.0.0.1'))); end; procedure TMain.SaveClick(Sender: TObject); begin SPE := SP.edit; SPE.putString(StringToJString('IP'), StringToJString(IP.Text)); SPE.commit; end;
-
Господа, а есть ли в Андроиде нечто подобное реестру в Windows?
Нужно записать некоторые данные в систему, которые не должны теряться при удалении программы.
И как работать с этим, используя Delphi? Заранее спасибо.
-
kami,
то есть самый верный способ для Андроида - это такой (если именно перебирать в цикле детей):
for K := Layout1.ChildrenCount - 1 downto 0 do if Layout1.Children[K].ClassNameIs('TCircle') then (Layout1.Children[K] as TCircle).Release;
-
Господа, есть ли способ проверить утечки памяти в Android-приложении?
ReportMemoryLeaksOnShutdown работает только для Windows.
-
5 часов назад, Равиль Зарипов (ZuBy) сказал:
у меня почему-то идея, взятая из той статьи, приводит к exception class EArgumentOutOfRangeException with message 'Argument out of range' с выбросом в
procedure TListHelper.CheckItemRange(AIndex: Integer); begin CheckItemRangeInline(AIndex); end;
Мой код:
for K := Layout1.ChildrenCount - 1 downto 0 do begin if Layout1.Children[K].ClassNameIs('TCircle') then begin (Layout1.Children[K] as TCircle).Parent := nil; (Layout1.Children[K] as TCircle).Free; end; end;
-
или лучше:
for K := Layout1.ChildrenCount - 1 downto 0 do if Layout1.Children[K].ClassNameIs('TCircle') then begin (Layout1.Children[K] as TCircle).DisposeOf; (Layout1.Children[K] as TCircle) := nil; end;
или так:
for K := Layout1.ChildrenCount - 1 downto 0 do begin if Layout1.Children[K].ClassNameIs('TCircle') then begin (Layout1.Children[K] as TCircle).Parent := nil; (Layout1.Children[K] as TCircle).Free; (Layout1.Children[K] as TCircle) := nil; end; end;
-
Читал несколько статей по удалению объектов в Android-приложениях, но до сих пор каша в голове.
Помогите прояснить ситуацию, пожалуйста.
Вот я создаю в run-time объекты:
for J := 0 to Num - 1 do begin MyCircle := TCircle.Create(Layout1); MyCircle.Parent := Layout1; MyCircle.Width := 100; MyCircle.Height := 100; MyCircle.Align := TAlignLayout.Left; MyCircle.Fill.Color := TAlphaColors.Red; end;
Потом я хочу почистить слой от кружков. Так будет правильно?for K := Layout1.ChildrenCount - 1 downto 0 do if Layout1.Children[K].ClassNameIs('TCircle') then (Layout1.Children[K] as TCircle).Free;
Или кроме Free еще что-то надо?
-
А с какого перепуга на Андроиде у имаджа свойство Bitmap.Canvas.Scale = 3?
Рисую я на канве имаджа примитивы разные, под Виндоуз всё красиво отображается, под Андроидом - всё огромное.
Дай думаю проверю Scale, а он почему-то трем равняется!
-
3 часа назад, Равиль Зарипов (ZuBy) сказал:
для заливки используется
Canvas.Fill.Color := цвет; Canvas.FillEllipse();
а как сделать, чтобы по окружности был черный цвет?
Уже всё перепробовал с Canvas.Stroke, не появляется черный периметр(
-
спасибо!
Delphi поднялся на 2 позиции (с 11 на 9)
в Прочие вопросы
Опубликовано
Источник:
https://www.tiobe.com/tiobe-index/
В марте 2016 года был по популярности на 11 месте, через год - на 9 месте, скинув Ruby и Perl.
Это нужно отметить.