-
Постов
135 -
Зарегистрирован
-
Посещение
-
Победитель дней
12
Весь контент zairkz
-
На 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;
-
procedure TForm_Main.RegisterPush; var ADeviceID, ADeviceToken: string; begin {$IFDEF ANDROID} // Для Android APushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.GCM); APushService.AppProps[TPushService.TAppPropNames.GCMAppID] := '**************'; {$ELSE} // Для iOS APushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.APS); {$ENDIF} // Создаём подключение к серверу AServiceConnection := TPushServiceConnection.Create(APushService); // Активируем подключение AServiceConnection.Active := True; // Подключаем делегаты AServiceConnection.OnChange := OnServiceConnectionChange; AServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent; ADeviceID := APushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceID]; ADeviceToken := APushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken]; if (ADeviceID <> '') AND (ADeviceToken <> '') then begin // Регистрируем устройство на сервере для отправки push сообщений RegisterDevice(ADeviceID, ADeviceToken, User_id.ToString); end; end; GCM не работает для apple. Я так понимаю Вы сертификаты еще не сгенерировали для PUSH в iOS? Хотя судя по картинке может и работает)
-
А что именно в клиенте? В статье есть регистрация токенов и принятие OnReciveNotification, в iOS Push сообщения поддерживает перенос строки через (#13#10) или если на сервере PHP генерируете, тогда через %0A, кстати в пуше можно слать полноценный JSON, который не выводится в шторку (текст сообщения выводится), Zuby делал такое.
-
А какая задача именно? Может лучше на ListView сделать? Если ListView подойдет могу скинуть ListViewHelper(Zuby), но только он под Delphi Seatle 10, не знаю подойдет ли к Seatle 10 Update 1.
-
На 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
-
Нужен 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;
-
https://yadi.sk/d/ziNcatNipiKZD
-
[fmx] XML RPC API http://fire-monkey.ru/topic/1394-fmx-xml-rpc-api/ Уже давно)
-
А у меня вчера, действительно эпопея), поэтому и создал тему что бы кто нибудь не разбил свой монитор, не качал бы образ Мака гигов под 40), не убил свои клетки нервные))
-
Добрый день, это просто стрессовая ночь без сна, как меня з..бал APPLE (( Если кто то собирается выпускать сертификаты Apple (сертификаты разработчика или Push сертификаты), и начнет парится потому что сертификаты выпускаются просроченными, знайте что вы не виноваты) Вообщем в маке в "Связке ключей" в меню "Вид" кликнете на "Показать скрытые сертификаты" Далее в Связке "Система" найдите просроченный сертификат Apple и удалите его. После чего с кабинета разработчика скачайте и установите новый сертификат, ссылка на скачивания есть при создания нового сертификата в самом низу. (( Подробнее на http://stackoverflow.com/questions/35390072/this-certificate-has-an-invalid-issuer-apple-push-services/35399656#35399656 Извиняются...
-
Вам же написали, используйте OnTap прекрасно работает, не мешает при скроле. Вы хотите сказать что это не костыль? Какой же костыль)), костыль это при клике запускать таймер и если изменился фокус в течении секунды тогда что то делать, типа того, вот это костыль)) Tap - Нажатие
- 21 ответ
-
- scrollbox
- запрет нажатия
- (и ещё 1 )
-
Используйте Вам же написали, используйте OnTap прекрасно работает, не мешает при скроле.
- 21 ответ
-
- scrollbox
- запрет нажатия
- (и ещё 1 )
-
Вот так все работает, но может я не понял вопроса Желательно это делать в OnApplyStyleLookup данного объекта. например если хотите заполнить стилевой текст или картинку: Новый объект стиля TButton содержит TText, TLabel, TImage и TButton procedure TForm_main.Button1ApplyStyleLookup(Sender: TObject); begin TText(TButton(Sender).FindStyleResource('detail')).Text := 'Детали'; TLabel(TButton(Sender).FindStyleResource('titul')).Text := 'Наименование'; TImage(TButton(Sender).FindStyleResource('img')).Bitmap.Assign(BTMP); TButton(TButton(Sender).FindStyleResource('but_min')).Tag := 58; TButton(TButton(Sender).FindStyleResource('but_min')).OnClick := ButW_Min; end; Сделайте одну процедуру OnApplyStyleLookup и присвойте необходимым объектам. Можно напрямую заполнять хоть откуда например TText(Button1.FindStyleResource('detail')).Text := 'Детали'; но тогда страшные аномалии происходят если ваш объект находятся допустим в скролбоксе.
-
Запустил ради интереса этот пример. Если быстро двигать пальцем влево-вправо, приложение вылетает Да согласен не лучший пример)), но для освоения работы жестов думаю подойдет для начала
-
Удивительно, так тоже не работает! Выделение итема все равно остается... Да не может быть, все работает на MultiView.OnHidden procedure TForm1.MultiView1Hidden(Sender: TObject); begin ListBox1.ItemIndex := -1; end;
-
Если вам подойдет можете на MultiView1 ->OnHidden прописать ListBox1.ItemIndex:=-1;
-
Первое что пришло в голову в виде "бреда", точнее так уже сделали)) Но не знаю насколько вам подойдет такое решение. У нас есть сервер базы данных, на сервере понятно есть все данные необходимые для печати, принтер настроен на сервере, на сервере есть служба которая мониторит базу (таблицу) в которой если появилась новая команда для печати тогда служба формирует документ из данных базы с использованием FastReport, и кидает на принтер по умолчанию для печати. Сервер (а точнее комп Pentium DualCore, 2 gb RAM) на котором MySQL, Windows (хотя FastReport есть и для Linux (beta)) работает автономно уже 8-й месяц, и за это время не прикоснулись к нему ни разу (даже если честно очень странно)
-
ListBox1.ItemIndex:=-1;
-
Спасибо, это то что надо!
-
Способов много, попробуйте например через ActionList, откройте пример на TabControl Запустите студию -> Open Sample Project -> Samples\Object Pascal\Mobile Snippets\TabSliding и посмотрите вебинары от Embarcadero https://www.youtube.com/channel/UCtqzKKPLL1uoI7yyCBmKP1w/videos еще ведь есть компонент от Ярослава в составе FGX TfgFlipView - слайдер изображений
-
Может можно таким же способом добавить ключ? <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> из этой темы http://fire-monkey.ru/topic/1753-oshibki-i-kosiaki-delphi-xe10-seattle-i-xcode-7/ При добавлении получается: <key>NSAppTransportSecurity</key> <string> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> </string> ХЗ пройдет проверку или нет
-
Такое же поведение наблюдается если включить на Iphone режим модема, и к Iphone подключить хотя бы одно устройство. Но пока понятия не имею что с этим сделать.