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

Лидеры

  1. zairkz

    zairkz

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


    • Баллы

      6

    • Постов

      135


  2. Rusland

    Rusland

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


    • Баллы

      4

    • Постов

      1 204


  3. Andrey Efimov

    Andrey Efimov

    Модераторы


    • Баллы

      2

    • Постов

      842


  4. beklexx

    beklexx

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


    • Баллы

      2

    • Постов

      67


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

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

  1. На 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;
    3 балла
  2. Вы уже достаточно много знаете... осталось только собрать информацию воедино. Под настоящей инфой подразумевается Адрес, который определяется по клику на карте? Значит вам понадобится MapView (понадобится прописать ApiKey в VersionInfo). Алгоритм такой - обрабатываете OnMapClick чтобы получить координату для маркера, через Geocoder получаете адрес, с помощью процедуры AddMarker добавляете маркер на карту, указав в качестве Title. Советую скачать компонент TMapsEngine, с ним очень удобно работать, когда дело касается MapView.
    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
    2 балла
  4. ммм... я так понимаю что на форме 5 лежит TRectangle под именем left... бывает, когда переработаешь, отдохнуть вам надо бы... пивка там
    2 балла
  5. zairkz, спасибо! Правда оказалось немного не то что мне нужно. Горизонтальный скролл оказывается нужен только вертикальный скролл. Пытаюсь сделать подобие каталога, как на скриншоте. Нужно в зависимости от ширины экрана выводить список товаров в одну/две/три колонки. Только с вертикальным скролом. Пробую через TListView, но что то не получается. Опыта написания для Android можно сказать нет, весь опыть - написание БД, много лет назад. Буду благодарен за помощь, можно в личку.
    1 балл
  6. walexw

    listBoxItem управление цветом

    zairkz, большое спасибо за развернутый ответ! Буду переваривать. Думаю пригодится не только мне. Для Крапоткина: тоже большое спасибо, учту ваши советы.
    1 балл
  7. На VCL это очень легко делается. Сделаете TransparentColor = true, и color формы сделаете одинаково со свойством TransparentColorValue На FMX пока не нашел
    1 балл
  8. krapotkin

    listBoxItem управление цветом

    да, если строк > 10 listBox сразу идет в топку положить в ListViewItem все нужные компоненты вообще не очень сложно при этом главное помнить что в FMX можно вкладывать что хочешь куда попало! и совсем не обязательно использовать уже положенные туда Text Detail и т.д.
    1 балл
  9. Тема создана по просьбе Mantikor Сообщения перенесены из темы TListViewHorz
    1 балл
  10. POV

    Косяк при показе формы в среде

    Так, я всё последнее накиданное на форму перенёс на фрейм (через "вырезать-вставить"), который создаётся динамически и опять же на форму помещается. Ошибка перестала выскакивать. В том числе нет ошибки и на показе фрейма. Но вопрос остался - что за фигня, куда копать когда это опять неизбежно появится по причине космических флуктуаций? О! Опять началось. Теперь уже для фрейма.
    1 балл
  11. 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;
    1 балл
  12. Rusland

    Android compile

    Вроде писали, что минимально поддерживаемая версия 4.1
    1 балл
  13. masmat

    Push под iOS

    Завтра-послезавтра тоже начинаю в iOS версии Push делать. Пока для себя оставил вот эту закладочку Ссылка Может пригодится.
    1 балл
  14. Нужен 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;
    1 балл
  15. Update. Исправили недостаток на Android 5. Большое спасибо Rusland за тестирование. Итоговый файл прикладываю. По прежнему не рекомендую использовать этот модуль, если создаваемые в runtime контролы ложатся напрямую на форму. Перед написанием претензий, пожалуйста прочитайте known issues в комментарии в начале файла. vkbdhelper.zip
    1 балл
  16. Да не надо ваш проект или пример. Создайте новый проект с двумя формами аналогично вашему, если там эта проблема будет повторяться, то выложите, здесь проверят. Если такой ошибки не возникнет, то значит листайте 1,5 тысяч строк по-видимому они не полностью рабочие.
    1 балл
  17. может конфликт имен... посмотрите внимательнее...
    1 балл
  18. Andrey Efimov

    Помогите начать

    спасибо. вроде понятно что проблема просто в версии android. сейчас попросил запустить приложение человека с android 4 - у него работает. Проблема в поддержке версии Андроид, в данном случае, 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, самое неблагодарное дело (как вспомню, сколько там багов было, даже в дрожь бросает), переходите на новую версию.
    1 балл
  19. Ядро Андроида - Linux Kernel, написан, в основном, на си, и серьезность проекта коррелируется скорее с навыками программера чем со средой RAD. Приложения под операционную систему Android являются программами в нестандартном байт-коде для виртуальной машины Dalvik. Программы для Dalvik пишутся на языке Java. Несмотря на это, стандартный байт-код Java не используется, вместо него Dalvik исполняет байт-код собственного формата. После компиляции исходных текстов программы на Java (при помощи javac) утилита dx из Android SDK преобразует файлы классов (расширение .class) в файлы собственного формата (с расширением .dex), которые и включаются в пакет приложения (.apk). Android Native Development Kit позволяет портировать библиотеки и компоненты приложений, написанные на Си и других языках.
    1 балл
  20. нет, я просто отрисовал нужные контролы в Item'e. а тот класс это для покраски TListView, через него я убрал разделитель. все что вам нужно находиться в OnUpdateObjects, посмотрите на константы и как присваиваются данные
    1 балл
  21. В топике старый протокол отправки пушей на ИОС. Не более 256 знаков, а с учетом юникода так вообще не более около 50 букв на русском!!! Переписал на новый 2-й протокол, чуток попапрился с байтами-битами ), но все же сделал. Теперь на русском можно около 400 букв, а на инглише как и разрешено около 2000. Это лучший ответ, но не хочу и первую версию снимать со счета...она ведь для ИОС ниже 8. Вообщем Enjoy : procedure TForm1.Button2Click(Sender: TObject); var i,j,p: integer; s,c,t,m: string; vStr: TStringStream; begin if not TCPClient.Connected then TCPClient.Connect; m := EscapeString(edMsg.Text); c := edToken.Text; t := ''; for i := 0 to (length(c) div 2) - 1 do t := t + AnsiChar(Byte(('$'+copy(c,i*2+1,2)).ToInteger)); s := '{"aps":{"alert":"'+ m +'","sound":"default","badge":0}}'; p := length(s); j := p + 38; s := #2#0#0 + AnsiChar(hi(j)) + AnsiChar(lo(j)) + #1#0#32 + t + #2 + AnsiChar(hi(p)) + AnsiChar(lo(p)) + s; vStr := TStringStream.Create(s); try SSLHandler.write(vStr); finally vStr.Free; end; end; p.s: нафиг 4 байта для общей длины...если дали разрешение на длину сообщения в 2 килобайта...
    1 балл
  22. XE8 без апдейтов. На какой строке AV? Provisioning profile должен включать APN. uses: System.PushNotification, FMX.PushNotification.iOS
    1 балл
  23. ophion

    Как получить IMEI?

    Дам вам подсказку из Android доков... public String getDeviceId () Added in API level 1 Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones. Return null if device ID is not available. Requires Permission: READ_PHONE_STATE public String getDeviceId (int slotId) Added in API level 23 Returns the unique device ID of a subscription, for example, the IMEI for GSM and the MEID for CDMA phones. Return null if device ID is not available. Requires Permission: READ_PHONE_STATE Parameters slotId of which deviceID is returned
    1 балл
  24. TScrollBox автоматически высчитывает размер скролируемого контента. Поэтому, когда вы помещаете в него контрол и перемещаете его за видимые границы контрола (ViewPort), то TScrollBox пересчитывает размеры контента и добавляет полосы прокрутки. Отсюда следует важный факт, что размер контента TScrollBox зависит от внутернний контролов. Вы пытаетесь добавить внутрь контента Layout, выравненный по всей области скроллбокса. Что вы вы этом случае ожидаете получить на выходе? Как я думаю, вы догадываетесь, что это выравнивание зависит от размер родительского контрола. А сам скролл бокс (предок), использует ваш Layout для определение размера контента. Так что в вашей ситуации TScrollBox для контента возьмет размер самого скролл бокса. Чтобы вам добавить прокрутку нужно: Взять за основу TVertScrollBox Поместить внутрь TLayout (если хотите, можно без него напрямую складывать контролы). Выравнять его по верхнему краю. В этом случае вы сможете руками задать требуемую высоту, при получении новых данных Когда вы будите знать размер вашего изображения, пересчитать высоту и обновить ее для вашего Layout.
    1 балл
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...