-
Постов
135 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Активность репутации
-
zairkz отреагировална Brovin Yaroslav в [Android] [XE7] Как получить GPS координаты без компонента?
Добрый вечер,
Можно задействовать сенсоры из RTL напрямую:
Запросить менеджер сенсоров System.Sensors.TSensorManager.Current; Запросить у менеджера сенсоров список сенсоров по категории TSensorCategory.Location TSensorManager.GetSensorsByFilter Выбрать из списка сенсоров необходимый. Проверив, доступные свойства TCustomLocationSensor.AvailableProperties, которые каждый может выдавать и другие характеристики сенсоров. Работать на прямую с выбранным сенсором локации TCustomLocationSensor P.S. Но по сути вы получите тот же объект, что и в компоненте TLocationSensor.Sensor. Правда без использования непосредственно компонента.
-
zairkz отреагировална #WAMACO в Кнопка параллелограмм
так делайте это сразу в редакторе StyleBook, а не на форме!
-
zairkz отреагировална Alexander в Какие статьи вы хотели бы видеть в блогах?
Создание сложных стилей с привязкой к создаваемым пользовательским классам. Заполнение интерфейса DisignTime и RealTime.
-
zairkz отреагировална Andrey Efimov в [Android]Каталог, вывод в 2-3 колонки
Отдельную тему создавайте (в правилах ясно указано: одна тема-один вопрос), здесь обсуждается другая тема.
-
zairkz отреагировална krapotkin в listBoxItem управление цветом
да, если строк > 10 listBox сразу идет в топку
положить в ListViewItem все нужные компоненты вообще не очень сложно
при этом главное помнить что в FMX можно вкладывать что хочешь куда попало!
и совсем не обязательно использовать уже положенные туда Text Detail и т.д.
-
zairkz отреагировална walexw в listBoxItem управление цветом
zairkz, большое спасибо за развернутый ответ! Буду переваривать. Думаю пригодится не только мне.
Для Крапоткина: тоже большое спасибо, учту ваши советы.
-
zairkz получил реакцию от Равиль Зарипов (ZuBy) в listBoxItem управление цветом
На ListView скролл значительно лучше и без лагов, и вообще очень мощный компонент, все равно, рано или поздно вы откажетесь от ListBOX.
Кнопку можно разместить стандартным способам в настройках самой ListView. Если же вам нужно сто кнопок в одном Итеме, тогда да придется чуток заморочиться.
Во первых надо в настройках ListView в ItemAppearance включить ImageListItemBottomDetailRightButton.
Далее в ItemAppearanceObjects -> ItemObjects можете указывать любые настройки, через PlaseOffset.X - Y перемещать текст и детайл текст как хотите и куда хотите, тоже самое с картинкой и кнопкой, менять цвета и шрифты.
Можете повесить обработчик в свойствах на OnItemClick, а также нажатие на саму кнопку OnButtonClick.
При заполнении Item'ам присваивайте Tag и по ним ориентируйтесь.
Далее для покраски Item'ов подключите Хелпер Zuby(все таки не хелпер, а измененный исходник TListView) FMX.ListView.zip, пропишите пару процедур:
procedure myDefaultItemColor(const aLV: TListView; const aItemIndex: integer; const aUseCustomColor: Boolean = false);
begin with aLV.Items[aItemIndex] do begin Data['aUseCustomColor'] := aUseCustomColor; end; end; /// <summary> устанавливаем кастомный цвет для Item'a </summary> procedure myCustomItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor: TAlphaColor; const aUseCustomColor: Boolean = true); begin with aLV.Items[aItemIndex] do begin Data['aUseCustomColor'] := aUseCustomColor; Data['aCustomColor'] := aCustomColor; end; end; Далее к примеру заполняем ListView ListViewPoisk.BeginUpdate; for i := 0 to 15 do begin ListViewPoisk.Items.Insert(0); ListViewPoisk.Items[0].Tag := i; ListViewPoisk.Items[0].Text := 'X_text'; ListViewPoisk.Items[0].Detail := 'X_detail'; ListViewPoisk.Items[0].ButtonText := 'X_buttext'; ListViewPoisk.Items[0].Data['offer'] := 0; //Если нужно хранить не отображаемые данные. ListViewPoisk.Items[0].Bitmap.Assign(Image1.Bitmap); if i mod 2 = 0 then myCustomItemColor(ListViewPoisk, ListViewPoisk.Items[0].Index, TAlphaColors.Lime); // TAlphaColors.Lime можно заменить TAlphaColorF.Create(70 / 255, 130 / 255, 180 / 255, 155 / 255).ToAlphaColor; end; ListViewPoisk.EndUpdate; -
zairkz получил реакцию от Равиль Зарипов (ZuBy) в [Android]Каталог, вывод в 2-3 колонки
На ListView будет достаточно сложно это реализовать.
Попробуйте TPresentedScrollBox и элементы стиля.
Стиль нужен: к примеру:
Вам необходимо фиксированные размеры панелек, например глобальные переменные
ObjectHeight := 205;
ObjectWidth := 160;
PanHeight := 200;
PanWidth := 148;
Затем вычислить количество колонок на FormResize, тоже глобальные пр.
procedure TForm_main.FormResize(Sender: TObject);
begin
PrColumns := Floor(Form_main.ClientWidth / ObjectWidth);
AllMargins := (Form_main.ClientWidth - (PrColumns * PanWidth)) / (PrColumns + 1);
end;
Процедура заполнения, здесь только создания панелей в скроллбоксе, я использовал обычный button в виде панельки
procedure TForm_main.LoadObject();
var
x, i: integer;
LT: TLayout;
Butt: TButton;
begin
x := 0;
for i := 0 to OBJ.Count - 1 do
begin
if x mod PrColumns = 0 then
begin
LT := TLayout.Create(PresentScrolBox);
LT.Parent := PresentScrolBox;
LT.Position.y := PresentScrolBox.ContentBounds.Height + 100;
LT.Align := TAlignLayout.Top;
LT.Height := ObjectHeight;
LT.HitTest := false;
end;
Butt:= TButton.Create(LT);
Butt.Parent := LT;
Butt.Position.x := LT.Width;
Butt.Height := PanHeight;
Butt.Width := PanWidth;
Butt.Align := TAlignLayout.Left;
Butt.Margins.Top := (ObjectHeight - PanHeight) / 2;
Butt.Margins.Bottom := (ObjectHeight - PanHeight) / 2;
Butt.Margins.Left := AllMargins;
Butt.StyleLookup := 'buttonx';
Butt.text := '';
Butt.tag := 55; //Пример
Butt.TextSettings.WordWrap := True;
Butt.OnTap := Form_main.ButObjTap;
{$IFDEF MSWINDOWS}
Butt.OnClick := Form_main.ButtObjectClick;
{$ENDIF}
Butt.OnApplyStyleLookup := Form_main.ObjectStyle;
x := x + 1;
end;
end;
LT := TLayout.Create(SB_Object);
LT.Parent := SB_Object;
LT.Position.y := SB_Object.ContentBounds.Height + 100;
LT.Align := TAlignLayout.Top;
LT.Height := 72;
end;
После создания заполнять данными необходимо в Butt.OnApplyStyleLookup := Form_main.ObjectStyle;
procedure TForm_main.ObjectStyle(Sender: TObject);
var
i: integer;
begin
for i := 0 to 9 do
if TButton(Sender).tag=i then
begin
TButton(TButton(Sender).FindStyleResource('btn_add')).tag := i;
// TButton(TButton(Sender).FindStyleResource('btn_add')).text := ‘+’;
TButton(TButton(Sender).FindStyleResource('btn_add')).OnClick := Form_main.But_Main_Add;
TText(TButton(Sender).FindStyleResource('text')).text := 'i = '+inttostr(i);
TText(TButton(Sender).FindStyleResource('obj_price')).text := ‘500’;
TImage(TButton(Sender).FindStyleResource('img')).Bitmap.Assign(Какой нибудь битмап);
break;
end;
end;
Желательно данные и картинки загрузить сперва в Record, затем заполнять их в OnApplyStyleLookup.
ХЗ может подойдет вариант, на слабых телефонах лагов не много, но и ListView на слабых подлагивает.
Как вариант старое наше с Zuby приложение по доставке еды Gepard, не судите строго мы его забросили): https://play.google.com/store/apps/details?id=kz.vbaze.Gepard
-
zairkz отреагировална POV в Косяк при показе формы в среде
Так, я всё последнее накиданное на форму перенёс на фрейм (через "вырезать-вставить"), который создаётся динамически и опять же на форму помещается. Ошибка перестала выскакивать. В том числе нет ошибки и на показе фрейма.
Но вопрос остался - что за фигня, куда копать когда это опять неизбежно появится по причине космических флуктуаций?
О! Опять началось. Теперь уже для фрейма.
-
zairkz отреагировална Andrey Efimov в [Android]Каталог, вывод в 2-3 колонки
Тема создана по просьбе Mantikor
Сообщения перенесены из темы TListViewHorz
-
zairkz получил реакцию от walexw в listBoxItem управление цветом
На ListView скролл значительно лучше и без лагов, и вообще очень мощный компонент, все равно, рано или поздно вы откажетесь от ListBOX.
Кнопку можно разместить стандартным способам в настройках самой ListView. Если же вам нужно сто кнопок в одном Итеме, тогда да придется чуток заморочиться.
Во первых надо в настройках ListView в ItemAppearance включить ImageListItemBottomDetailRightButton.
Далее в ItemAppearanceObjects -> ItemObjects можете указывать любые настройки, через PlaseOffset.X - Y перемещать текст и детайл текст как хотите и куда хотите, тоже самое с картинкой и кнопкой, менять цвета и шрифты.
Можете повесить обработчик в свойствах на OnItemClick, а также нажатие на саму кнопку OnButtonClick.
При заполнении Item'ам присваивайте Tag и по ним ориентируйтесь.
Далее для покраски Item'ов подключите Хелпер Zuby(все таки не хелпер, а измененный исходник TListView) FMX.ListView.zip, пропишите пару процедур:
procedure myDefaultItemColor(const aLV: TListView; const aItemIndex: integer; const aUseCustomColor: Boolean = false);
begin with aLV.Items[aItemIndex] do begin Data['aUseCustomColor'] := aUseCustomColor; end; end; /// <summary> устанавливаем кастомный цвет для Item'a </summary> procedure myCustomItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor: TAlphaColor; const aUseCustomColor: Boolean = true); begin with aLV.Items[aItemIndex] do begin Data['aUseCustomColor'] := aUseCustomColor; Data['aCustomColor'] := aCustomColor; end; end; Далее к примеру заполняем ListView ListViewPoisk.BeginUpdate; for i := 0 to 15 do begin ListViewPoisk.Items.Insert(0); ListViewPoisk.Items[0].Tag := i; ListViewPoisk.Items[0].Text := 'X_text'; ListViewPoisk.Items[0].Detail := 'X_detail'; ListViewPoisk.Items[0].ButtonText := 'X_buttext'; ListViewPoisk.Items[0].Data['offer'] := 0; //Если нужно хранить не отображаемые данные. ListViewPoisk.Items[0].Bitmap.Assign(Image1.Bitmap); if i mod 2 = 0 then myCustomItemColor(ListViewPoisk, ListViewPoisk.Items[0].Index, TAlphaColors.Lime); // TAlphaColors.Lime можно заменить TAlphaColorF.Create(70 / 255, 130 / 255, 180 / 255, 155 / 255).ToAlphaColor; end; ListViewPoisk.EndUpdate; -
zairkz отреагировална Rusland в Android compile
Вроде писали, что минимально поддерживаемая версия 4.1
-
zairkz отреагировална Rusland в как получить адрес по карте
janovskis, почитайте темы в этом же разделе, узнаете много полезного.
Private FMarkers: TList<TMapMarker>; procedure Tfmain.FormCreate(Sender: TObject); begin FMarkers := TList<TMapMarker>.Create; End; Procedure AddMarker; var mapCenter: TMapCoordinate; MyMarker: TMapMarkerDescriptor; Begin mapCenter := TMapCoordinate.Create(StrToFloat(Lat), StrToFloat(Lon)); MyMarker := TMapMarkerDescriptor.Create(mapCenter, 'Text'); fmain.MapView1.Location := mapCenter; FMarkers.Add(fmain.MapView1.AddMarker(MyMarker)); End; -
zairkz получил реакцию от enatechno в listBoxItem управление цветом
На ListView скролл значительно лучше и без лагов, и вообще очень мощный компонент, все равно, рано или поздно вы откажетесь от ListBOX.
Кнопку можно разместить стандартным способам в настройках самой ListView. Если же вам нужно сто кнопок в одном Итеме, тогда да придется чуток заморочиться.
Во первых надо в настройках ListView в ItemAppearance включить ImageListItemBottomDetailRightButton.
Далее в ItemAppearanceObjects -> ItemObjects можете указывать любые настройки, через PlaseOffset.X - Y перемещать текст и детайл текст как хотите и куда хотите, тоже самое с картинкой и кнопкой, менять цвета и шрифты.
Можете повесить обработчик в свойствах на OnItemClick, а также нажатие на саму кнопку OnButtonClick.
При заполнении Item'ам присваивайте Tag и по ним ориентируйтесь.
Далее для покраски Item'ов подключите Хелпер Zuby(все таки не хелпер, а измененный исходник TListView) FMX.ListView.zip, пропишите пару процедур:
procedure myDefaultItemColor(const aLV: TListView; const aItemIndex: integer; const aUseCustomColor: Boolean = false);
begin with aLV.Items[aItemIndex] do begin Data['aUseCustomColor'] := aUseCustomColor; end; end; /// <summary> устанавливаем кастомный цвет для Item'a </summary> procedure myCustomItemColor(const aLV: TListView; const aItemIndex: integer; const aCustomColor: TAlphaColor; const aUseCustomColor: Boolean = true); begin with aLV.Items[aItemIndex] do begin Data['aUseCustomColor'] := aUseCustomColor; Data['aCustomColor'] := aCustomColor; end; end; Далее к примеру заполняем ListView ListViewPoisk.BeginUpdate; for i := 0 to 15 do begin ListViewPoisk.Items.Insert(0); ListViewPoisk.Items[0].Tag := i; ListViewPoisk.Items[0].Text := 'X_text'; ListViewPoisk.Items[0].Detail := 'X_detail'; ListViewPoisk.Items[0].ButtonText := 'X_buttext'; ListViewPoisk.Items[0].Data['offer'] := 0; //Если нужно хранить не отображаемые данные. ListViewPoisk.Items[0].Bitmap.Assign(Image1.Bitmap); if i mod 2 = 0 then myCustomItemColor(ListViewPoisk, ListViewPoisk.Items[0].Index, TAlphaColors.Lime); // TAlphaColors.Lime можно заменить TAlphaColorF.Create(70 / 255, 130 / 255, 180 / 255, 155 / 255).ToAlphaColor; end; ListViewPoisk.EndUpdate; -
zairkz отреагировална masmat в Push под iOS
Завтра-послезавтра тоже начинаю в iOS версии Push делать. Пока для себя оставил вот эту закладочку
Ссылка
Может пригодится.
-
zairkz получил реакцию от enatechno в [Android]Каталог, вывод в 2-3 колонки
На ListView будет достаточно сложно это реализовать.
Попробуйте TPresentedScrollBox и элементы стиля.
Стиль нужен: к примеру:
Вам необходимо фиксированные размеры панелек, например глобальные переменные
ObjectHeight := 205;
ObjectWidth := 160;
PanHeight := 200;
PanWidth := 148;
Затем вычислить количество колонок на FormResize, тоже глобальные пр.
procedure TForm_main.FormResize(Sender: TObject);
begin
PrColumns := Floor(Form_main.ClientWidth / ObjectWidth);
AllMargins := (Form_main.ClientWidth - (PrColumns * PanWidth)) / (PrColumns + 1);
end;
Процедура заполнения, здесь только создания панелей в скроллбоксе, я использовал обычный button в виде панельки
procedure TForm_main.LoadObject();
var
x, i: integer;
LT: TLayout;
Butt: TButton;
begin
x := 0;
for i := 0 to OBJ.Count - 1 do
begin
if x mod PrColumns = 0 then
begin
LT := TLayout.Create(PresentScrolBox);
LT.Parent := PresentScrolBox;
LT.Position.y := PresentScrolBox.ContentBounds.Height + 100;
LT.Align := TAlignLayout.Top;
LT.Height := ObjectHeight;
LT.HitTest := false;
end;
Butt:= TButton.Create(LT);
Butt.Parent := LT;
Butt.Position.x := LT.Width;
Butt.Height := PanHeight;
Butt.Width := PanWidth;
Butt.Align := TAlignLayout.Left;
Butt.Margins.Top := (ObjectHeight - PanHeight) / 2;
Butt.Margins.Bottom := (ObjectHeight - PanHeight) / 2;
Butt.Margins.Left := AllMargins;
Butt.StyleLookup := 'buttonx';
Butt.text := '';
Butt.tag := 55; //Пример
Butt.TextSettings.WordWrap := True;
Butt.OnTap := Form_main.ButObjTap;
{$IFDEF MSWINDOWS}
Butt.OnClick := Form_main.ButtObjectClick;
{$ENDIF}
Butt.OnApplyStyleLookup := Form_main.ObjectStyle;
x := x + 1;
end;
end;
LT := TLayout.Create(SB_Object);
LT.Parent := SB_Object;
LT.Position.y := SB_Object.ContentBounds.Height + 100;
LT.Align := TAlignLayout.Top;
LT.Height := 72;
end;
После создания заполнять данными необходимо в Butt.OnApplyStyleLookup := Form_main.ObjectStyle;
procedure TForm_main.ObjectStyle(Sender: TObject);
var
i: integer;
begin
for i := 0 to 9 do
if TButton(Sender).tag=i then
begin
TButton(TButton(Sender).FindStyleResource('btn_add')).tag := i;
// TButton(TButton(Sender).FindStyleResource('btn_add')).text := ‘+’;
TButton(TButton(Sender).FindStyleResource('btn_add')).OnClick := Form_main.But_Main_Add;
TText(TButton(Sender).FindStyleResource('text')).text := 'i = '+inttostr(i);
TText(TButton(Sender).FindStyleResource('obj_price')).text := ‘500’;
TImage(TButton(Sender).FindStyleResource('img')).Bitmap.Assign(Какой нибудь битмап);
break;
end;
end;
Желательно данные и картинки загрузить сперва в Record, затем заполнять их в OnApplyStyleLookup.
ХЗ может подойдет вариант, на слабых телефонах лагов не много, но и ListView на слабых подлагивает.
Как вариант старое наше с Zuby приложение по доставке еды Gepard, не судите строго мы его забросили): https://play.google.com/store/apps/details?id=kz.vbaze.Gepard
-
zairkz отреагировална Andrey Efimov в Помогите начать
Проблема в поддержке версии Андроид, в данном случае, XE5 не поддерживает разработку приложений под Android 5.
Как уже сказал Zuby, чтобы разрабатывать под пятый Андроид, необходимо установить более свежую версию RAD Studio. Поддержка появилась с версии XE7 Upd 1, ставьте её, а ещё лучше, сразу последнюю, RAD Studio Seattle и будет вам счастье.
Справка по поддерживаемым версиям Android:
XE5: http://docwiki.embarcadero.com/RADStudio/XE5/en/Android_Devices_Supported_for_Application_Development
XE6: http://docwiki.embarcadero.com/RADStudio/XE6/en/Android_Devices_Supported_for_Application_Development
XE7 (для Android 5, выпущен ап): http://docwiki.embarcadero.com/RADStudio/XE7/en/Android_Devices_Supported_for_Application_Development
XE8: http://docwiki.embarcadero.com/RADStudio/XE8/en/Android_Devices_Supported_for_Application_Development
Seattle: http://docwiki.embarcadero.com/RADStudio/Seattle/en/Android_Devices_Supported_for_Application_Development
p.s. Разрабатывать на XE5, самое неблагодарное дело (как вспомню, сколько там багов было, даже в дрожь бросает), переходите на новую версию.
-
zairkz отреагировална Mantikor в [Android]Каталог, вывод в 2-3 колонки
zairkz, спасибо! Правда оказалось немного не то что мне нужно. Горизонтальный скролл оказывается нужен только вертикальный скролл. Пытаюсь сделать подобие каталога, как на скриншоте. Нужно в зависимости от ширины экрана выводить список товаров в одну/две/три колонки. Только с вертикальным скролом. Пробую через TListView, но что то не получается. Опыта написания для Android можно сказать нет, весь опыть - написание БД, много лет назад. Буду благодарен за помощь, можно в личку.
-
zairkz получил реакцию от Равиль Зарипов (ZuBy) в Как реализовать это?
Нужен Timer и ListView
Например в ListView -> OnUpdateObjects
procedure TForm1.ListViewPoiskUpdateObjects(const Sender: TObject; const AItem: TListViewItem); var aTime: TListitemText; begin aTime := AItem.Objects.FindDrawable('time') as TListitemText; if aTime = nil then begin aTime := TListitemText.Create(AItem); aTime.Name := 'time'; aTime.PlaceOffset.X := 0; aTime.PlaceOffset.Y := 2; aTime.Font.Size := 14; aTime.TextVertAlign := TTextAlign.Center; aTime.TextAlign := TTextAlign.Center; end; aTime.Width := 72; aTime.Height := 20; //Двигаем Text итема с отступом AItem.Objects.TextObject.PlaceOffset.X := aTime.Width + 6; end; И таймер procedure TForm1.Timer1Timer(Sender: TObject); var i: integer; begin if ListView1.ItemCount > 0 then for i := 0 to ListView1.ItemCount - 1 do ListView1.Items[i].Data['time'] := FormatDateTime('ss сек.', Now); end; -
zairkz отреагировална Равиль Зарипов (ZuBy) в Как реализовать это?
нет, я просто отрисовал нужные контролы в Item'e. а тот класс это для покраски TListView, через него я убрал разделитель.
все что вам нужно находиться в OnUpdateObjects, посмотрите на константы и как присваиваются данные
-
-
zairkz отреагировална Kitty в Движок форума надо заменить
Не возможно пользоваться форумом с мобильных устройств
- режет сообщения
- закрывает клавиатурой текст сообщения и т.п.
Форум бесценен. Интерфейс ужасен.
-
zairkz отреагировална enatechno в [DX10] Drag-and-Drop Пример
https://www.youtube.com/watch?v=ta_N6DSi0Xg
с 22 минуты
-
zairkz отреагировална Kitty в BeaconFence
Прошу прощения, что не по теме FM, а по теме RAD в общем.
Просто на этом форуме можно получить вразумительный ответ от профессионалов.
Вот есть такая технология у Embarcadero: http://www.embarcadero.com/ru/products/beaconfence
Я смутно представляю, что это, поэтому вопрос такой:
Можно ли контролировать с помощью этой технологии, например, продавцов на месте их работы в магазине, чтобы контролировать учет их рабочего времени? Фиксация - пришел на работу, фиксация - ушел с работы?
Или эта технология совсем для других целей?
Спасибо.
-
zairkz отреагировална Равиль Зарипов (ZuBy) в Серьезно о FireMonkey на Android и iOS
если выбрать правильные инструменты, то возможно.
FMX + сервак + PHP (или любой серверный язык) всю работу с БД и с картами (такие как запросы геокодинга и прочие ssl запросы на другие сайты) на PHP, а клиент-приложение только в виде отображения контента.
и можно делать не только одноформенные приложения, а сложные