Поиск сообщества
Показаны результаты для тегов 'TListView'.
Найдено: 50 результатов
-
Добрый день! Установил XE8, открыл проект собранный на XE7 начались проблемы со стилями (если использовать один стиль на всех формах), это пол беды. пришлось стиль новый для каждой формы ставить... а ошибка что в названии появилась откуда не ждал, есть TListView, заполняется динамически 1-зачение добавляем ListView1.ClearItems; with ListView1.Items.Add do begin Text := 'KCell'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'kcell.png')); Tag := 3; end; with ListView1.Items.Add do begin Text := 'Activ'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'activ.png')); Tag := 391; end; with ListView1.Items.Add do begin Text := 'Tele2'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'tele2.png')); Tag := 125; end; with ListView1.Items.Add do begin Text := 'Pathword'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'pathword.png')); Tag := 73; end; with ListView1.Items.Add do begin Text := 'Beeline'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'beeline.png')); Tag := 90; end; with ListView1.Items.Add do begin Text := 'ДОС'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'beeline-dos.png')); Tag := 578; end; with ListView1.Items.Add do begin Text := 'Dalacom'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'dalacom.png')); Tag := 12; end; with ListView1.Items.Add do begin Text := 'City'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'city.png')); Tag := 134; end; with ListView1.Items.Add do begin Text := 'ALTEL 4G'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'altel4g.png')); Tag := 716; end; with ListView1.Items.Add do begin Text := 'АО "Казахтелеком"'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'telecom.png')); Tag := 0; end; 2-значение ListView1.ClearItems; with ListView1.Items.Add do begin Text := 'ALTEL 4G'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'altel4g.png')); Tag := 716; end; with ListView1.Items.Add do begin Text := 'JET'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'jet.png')); Tag := 484; end; with ListView1.Items.Add do begin Text := '"Интернет Дома" от Beeline'; Bitmap.LoadFromFile(TPath.Combine(TPath.GetDocumentsPath, 'internetdoma.png')); Tag := 413; end; моделируем ситуацию если грузим 1 значение и тыкаем (выделяем) на последний или больший 2 itemindex затем выполняем 2 значение, то выскакивает argument out of range т.е. получается ItemIndex или Selected Item не сбрасывается. как эту ошибку исправить?
- 13 ответов
-
- argument out of range
- delphi
-
(и ещё 2 )
C тегом:
-
Недавно решил написать небольшое приложение под андроид, которое будет в удобном виде показывать расписание моего ВУЗа (они нам передают 20 летний привет в виде экселя), ну и задно изучить FMX. Написал за пару дней парсер, все более менее работает. Встал вопрос - какими компонентами все это удобно и красиво отобразить? Перечитал кучу инфы по стандартным компонентам и, кажется, они мне не подойдут Для того чтобы было понятно, чего именно я хочу - набросал схему. Границы для наглядности. Каким компонентом это можно реализовать? Если все-таки коробочные тоже годятся, то ткните лицом куда читать :) Заранее спасибо.
-
Доброго времени суток, коллеги. Столкнулся с проблемой неотрисовки итемов в ListView при выставлении свойства TFDQuery.FetchOptions.Mode := fmManual. Данные с TListView (и TGrid) связаны посредством LiveBindings. На скрине видно, что данные в принципе загружены в датасет и даже отображаются в TGrid, но не в Listview. Может кто сталкивался? Варианты пробовал разные, бьюсь 3-й день, но увы( До решения в общем додумался (но вышеуказанный способ не выходит из головы))): отлавливать событие, что список прокручен до упора и увеличивать свойство FetchOptions.RecsMax (при FetchOptions.Mode := скажем fmAll). Для чего нужно: открывать без задержек таблицы с большим количеством записей, не загружая их в датасет сразу все. fmOnDemand необходимого эффекта не дал - все равно загружаются все записи сразу. Хотя здесь (http://docwiki.embarcadero.com/Libraries/XE8/en/FireDAC.Stan.Option.TFDFetchOptions.Mode) о свойстве с этим значением написано обратное. PS. Delphi XE7 (XE8), БД SQLite. Проект в прицепе. 33333.zip
-
Есть такая идея. Загружаю в TListView много элементов (от 500 до 1000 может и более) ситуация вынуждает грузить именно столько . Так вот когда начинаю создавать их кастомно после создания приходится вызвать oItem.Adapter.ResetView(oItem) (Если этого не делать то не корректно рассчитывается высота и ещё пару багов ) что соответсвенно вызывает подвисание интерфейса на Windows все круто это не так в глаза бросается, а на Android печалька форма зависает от 10 до 30 секунд Так вот сам вопрос можно ли как это сделать в отдельном потоке что бы пользователю показывать какой нибудь Waiter. Или может кто как по другому предложит реализовать ? Смотрел в сторону динамической подгрузки итемов но хотелось бы что и его поиск работал .
-
Вопрос из серии "чего-то странного хочется". Предположим, я хочу написать собственный ListView. Если я наследую от TListView, то всё нормально. Я его регистрирую с помощью процедуры Register Примерно так: procedure Register; begin RegisterComponents('<Моя вкладка>', [TМойListView]); end; И всё работает. Но, как показывает практика, в том числе пример Равиля Зарипова (https://github.com/rzaripov1990/ModernListView) для того, что бы написать полноценный ListView, наследоваться надо от предков TListView, едва ли не от TStyledControl. Дальше возникает вопрос. Где и как правильно регистрировать вновь созданный компонент? Если зарегистрировать компонент с помощью процедуры Register, то при размещении компонента на форме в окне Structure к вновь созданному компоненту не привязывается ItemAppearence. Да и IDE падает. Прилагаю файл с кастомным ListView. Сделан по аналогии с оригинальным, изменены только названия. My.FMX.ListView.zip
-
Вопрос к экспертам Возникла необходимость и хотел спросить можно ли как-то сделать TlistViewItem прозрачным, а то получается что сам TlistView может быть прозрачным а его итем нет . Это как-то же делаться у TListBoxItem. Заранее огромное спасибо.
- 5 ответов
-
- tlistviewitem
- tlistview
-
(и ещё 1 )
C тегом:
-
ListView в режиме appearance. Добавил пару TListItemGlyphButton, указал в свойстве ButtonType - CheckBox. Но при работе приложения - пустота. Другие типы кнопок тоже не отображает. ЧЯДНТ.
-
Сделал такой эксперимент в событии OnUpdateObjects if AItem.Purpose in [TListItemPurpose.Header] then Memo1.Lines.Add(AItem.Text); И в memo загрузилось в два раза больше строк, чем элементов списка. Это нормально, так и должно быть?
-
По совету krapotkin`a http://fire-monkey.ru/topic/4595-listview-скрывает-повторяющийся-текст-заголовков/?do=findComment&comment=29209 Забросил LiveBinding при заполнении TListView и начал заполнять ручками. Почти всё хорошо за исключением загрузки картинки из базы. При использовании LiveBinding картинка грузилась, а теперь просто пустота. На Windows картинки грузятся и отображаются, а на Андроиде не хотят. Вот часть кода загрузки Var stream: TBlobStream; ... begin .... lv.BeginUpdate; try lv.Items.Clear; qObjects2.close; qObjects2.Open; while not qObjects2.Eof do begin item := lv.Items.Add; item.Data[sItemId] := qObjects2id.AsString; item.Data[sItemPrice] := qObjects2price.AsString; item.Data[sItemType] := qObjects2type_name.Value; ... ... ... ListItemImage := Item.Objects.FindObjectT<TListItemImage>(sItemImg); stream := TBlobStream.Create(qObjects2img, bmRead); try if stream.Size <= 0 then ListItemImage.ImageIndex := 0 else ListItemImage.Bitmap := TBitmap.CreateFromStream(stream); finally stream.Free; end; К ListView прикреплен список картинок, где есть картинка-пустышка, которая грузится, если у записи нет картинки. вот этой строкой ListItemImage.ImageIndex := 0 картинки-пустышки нормально отображаются и на Андроид-устройстве в том числе. Ошибок нет, а просто пустой TListItemImage там, где должна быть картинка. Может, я какое-то свойство забыл включить у TListItemImage? При отладке видно, что картинка загружается из базы.
-
Через LiveBinding загружаются данные в ListView, в том числе и в ListItemImage. Но у некоторых Item`ов нет картинки. И в этом случае нужно показать "пустышку" типа No image. Делаю в событии UpdateObjects procedure TfmMain.lvObjectsUpdateObjects(const Sender: TObject; const AItem: TListViewItem); Var ListItemImage: TListItemImage; begin if Assigned(AItem) then begin ListItemImage := AItem.Objects.FindObjectT<TListItemImage>('img'); if Assigned(ListItemImage) then if not assigned(ListItemImage.Bitmap) then ListItemImage.ImageIndex := 0; end; end; Но теперь у всех ListItemImage отображается пустышка, даже там, где должна быть правильная картинка. Пробовал использовать событие UpdatingObjects, но в этом случае грузится правильная картинка, а пустышка не грузится.
-
В TListView есть картинка и другие поля. В поля уже выводятся данные из таблицы с помощью LiveBinding. Добавил новое поле в DataSet типа TBlobField, но LiveBinding Designer это поле не отображает, не видит его, поэтому и к картинке не могу привязать. Так и должно быть или это баг?
-
1. Почему кнопка располагается во время работы программы не так, как я её расположил в дизайне? 2. Как привязать кнопку к правому краю? Если установить "Trailing" в свойстве Align, то кнопка вообще исчезает.
-
Данные в ListView грузятся из таблицы через BindSourceDB1. Добавил кнопку TImageObjectAppearance, но у кнопки нет свойства, отвечающего за картинку. Как добавить картинку в моём случае?
-
Беда, совсем беда .... Имеется на форме TListView (listviewEdit.jpg), в него динамически загружается список с картинками полученными через idhttp + TmemoryStream. ..... private nowDrawed:string; ... Item: TListViewItem; ImageObject: TListItemImage; TextObject: TListItemText; groups:array of Tgroups; ... ..... procedure Tmain.drawGroups(); var i:integer; begin try loader.Show; loader.ProgressBar.Max:=high(groups); loader.ProgressBar.Value:=0; Application.ProcessMessages; nowDrawed:='groups'; ListView.Items.Clear; ListView.BeginUpdate; for i := 0 to high(groups) do begin Item := ListView.Items.Add; TextObject:=Item.Objects.FindObjectT<TListitemtext>('Text'); TextObject.Text:=groups[i].caption; Item.Tag:=strtoint(groups[i].id); ImageObject:=Item.Objects.FindObjectT<TListItemImage>('Image'); if ImageObject.Bitmap=nil then ImageObject.bitmap:=TBitmap.Create; http.loadImage(url+groups[i].image,ImageObject.bitmap); loader.ProgressBar.Value:=i; Application.ProcessMessages; end; ListView.EndUpdate; loader.hide; except loader.hide; end; end; procedure Thttp.loadImage(link:string;bitmap:Tbitmap); var MS: TMemoryStream; begin try MS := TMemoryStream.Create; IdHTTP.Get(link,MS); MS.Position:=0; if not (bitmap=nil) then bitmap.LoadFromStream(MS); MS.Free; except end; end; Так вот, если собирать под Win64 (onWin.jpg), то всё отлично, но если под андроид (onAndr.jpg), то картинки отсутствуют. При этом, если на форму бросить TImage и передавать в функцию loadImage bitmap этого Timage, то всё отображается корректно. P.S. Тестовое изображение в аттаче.
-
Господа и товарищи, помогите тупому мне! Столкнулся с странным. Под windows все отлично работает, а под android не могу добиться загрузки картинок. Мозг уже сломал. Собрал тестовый проект - в ListView (DynamicAppearance) добавляем 4 ListViewItem, в ListViewUpdatingObjects все создаем и грузим картинки из инета (потоки и прочее убрал для упрощения). Картанка слева, текст (URL) справа, проще некуда. Прилагаю к сообщению архив проекта и код. unit Unit1; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.ListView.Types, FMX.ListView.Appearances, FMX.ListView.Adapters.Base, FMX.ListView, System.Net.HTTPClient, FMX.Objects; type TFormMain = class(TForm) ListView: TListView; procedure ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); procedure FormShow(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } ListViewUpdate : Boolean; procedure MyListViewUpdateObjects(const AListView: TListView; const AItem: TListViewItem); procedure InitListView(AListView : TListView); function LoadImageFromURL(AURL : String) : TBitmap; end; var FormMain: TFormMain; implementation {$R *.fmx} procedure TFormMain.FormCreate(Sender: TObject); begin ListViewUpdate:=False; end; procedure TFormMain.FormShow(Sender: TObject); begin InitListView(ListView); end; procedure TFormMain.InitListView(AListView : TListView); Var AListViewItem : TListViewItem; AImageURL : String; begin AImageURL:='http://kayfolom.ru/images/test/'; ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + 'logo.png'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '000487806d3a2ab98aeb2c47b810fc8b.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '0012ef6cb42e95268a4cd1d832a2b93a.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); ListViewUpdate:=True; AListViewItem:=AListView.Items.Add; AListViewItem.Data['ImageURL']:=AImageURL + '0022454ccb4f81a701cb3a3c89d52d2f.jpg'; ListViewUpdate:=False; AListViewItem.Adapter.ResetView(AListViewItem); end; procedure TFormMain.ListViewUpdatingObjects(const Sender: TObject; const AItem: TListViewItem; var AHandled: Boolean); begin if Not ListViewUpdate then begin MyListViewUpdateObjects(Sender as TListView, AItem); AHandled:=True; end; end; procedure TFormMain.MyListViewUpdateObjects(const AListView: TListView; const AItem: TListViewItem); Var AName : TListItemText; AImage : TListItemImage; AvailableWidth, ImageWidth, ImageHeight : single; function SetupTextObject(const AName, AText : String; AFontSize : Single; AFontStyles : TFontStyles; AWidth, AHeight, X , Y : Single; AAlign, AVertAlign: TListItemAlign; ATextAlign, ATextVertAlign: TTextAlign) : TListItemText; begin Result:=TListItemText(AItem.View.FindDrawable(AName)); if Result=Nil then Result:=TListItemText.Create(AItem); Result.Name:=AName; Result.Width:=AWidth; Result.WordWrap:=True; Result.Font.Size:=AFontSize; Result.Font.Style:=Result.Font.Style + AFontStyles; Result.Trimming:=TTextTrimming.None; Result.Text:=AText; Result.PlaceOffset.X:=X; Result.PlaceOffset.Y:=Y; Result.Align:=AAlign; Result.VertAlign:=AVertAlign; Result.TextAlign:=ATextAlign; Result.TextVertAlign:=ATextVertAlign; Result.Height:=AHeight; end; function SetupImageObject(const AName : String; AWidth, AHeight, X , Y : Single; AAlign, AVertAlign: TListItemAlign) : TListItemImage; Var AImageURL : String; begin Result:=TListItemImage(AItem.View.FindDrawable(AName)); if Result=Nil then begin Result:=TListItemImage.Create(AItem); AImageURL:=AItem.Data['ImageURL'].AsString; Result.Bitmap:=LoadImageFromURL(AImageURL); end; Result.Name:=AName; Result.Width:=AWidth; Result.Height:=AHeight; Result.PlaceOffset.X:=X; Result.PlaceOffset.Y:=Y; Result.Align:=AAlign; Result.VertAlign:=AVertAlign; Result.ScalingMode:=TImageScalingMode.StretchWithAspect; end; begin AvailableWidth:=AListView.Width - AListView.ItemSpaces.Left - AListView.ItemSpaces.Right; // Изображение размещаем слева ImageWidth:=AvailableWidth / 3; ImageHeight:=AvailableWidth / 3; AImage:=SetupImageObject('Image', ImageWidth, ImageHeight, 0, 0, TListItemAlign.Leading, TListItemAlign.Leading); // Текст справа AName:=SetupTextObject('Name', AItem.Data['ImageURL'].AsString, 14, [], AvailableWidth - ImageWidth, ImageHeight, ImageWidth, 0, TListItemAlign.Leading, TListItemAlign.Leading, TTextAlign.Center, TTextAlign.Center); AItem.Height:=Round(ImageHeight + AListView.ItemSpaces.Top + AListView.ItemSpaces.Bottom); end; function TFormMain.LoadImageFromURL(AURL : String) : TBitmap; Var AHTTPClient : THTTPClient; AStream : TMemoryStream; HTTPResponse : IHTTPResponse; begin Result:=Nil; AHTTPClient:=THTTPClient.Create; AStream:=TMemoryStream.Create; try HTTPResponse:=AHTTPClient.Get(AURL, AStream); finally if HTTPResponse.StatusCode=200 then Result:=TBitmap.CreateFromStream(AStream); end; end; end. test092 ListView with Image.7z
-
Нужно сделать компонент TGrid. Стандартный Grid не подходит, потому что нужно чтобы строки (raws) были разной высоты, а также чтобы была возможность соединять (сливать) ячейки. Я решил сделать его на основе TListView и его DynamicAppearance. Использовать кастомные объекты, отнаследованные от TListItemObject + возможность рисовать на Canvas каждого ListItem, например прямоугольники. Т.к. колонки он не поддерживает, есть идея использовать THeader и подстраивать их под размер своих колонок. Также важно быстродействие компонента. Как вы думаете есть ли в этом смысл? Возможно кто-то уже занимался подобным, и может что-нибудь посоветовать. Спасибо.
-
Привет. Я к своему стыду так и не научился толком работать с TListView. TListBox это сделать просто, а вот как это сделать в TListView... Это сложный компонент. Подскажите как правильно реализовать. Нужно добавить с правой стороны каждого Item иконку избранное, которая работала бы как чекбокс - если нажать по ней то звездочка становится желтой и без заливки (Checked/unchecked) . Насколько я понял в GlyphButton нельзя добавить картинку.. Как же тогда это сделать? Спасибо.
-
При расчете высоты TListItemText приходилось использовать костыль - указывать размер шрифта отличный от 12 (например 12.01 и т.д.), если эти пренебречь, то расчет высоты не работал и текст или резался или высота итема оказывалась гораздо больше текста. Проблема в том, что на стадиях расчета высоты, к TListItemText еще не применен стиль, и параметры шрифта не соответствуют тому как будет выглядеть окончательный вариант на экране. Для правильного расчета высоты нужно выдернуть шрифт из стиля, делается это вот так: Var AFontObject : TFontObject; AListItemText : TListItemText; ... AListItemText:=TListItemText(AItem.View.FindDrawable(AName)); if AListItemText=Nil then AListItemText:=TListItemText.Create(AItem); AFontObject:=(AListView.FindStyleResource('font') as TFontObject); if Assigned(AFontObject) then AListItemText.Font.Assign(AFontObject.Font); //Теперь вычисление высоты имеет смысл и не нужно задавать размер шрифта - он берется из стиля. AListItemText.Height:=CalculateHeight(AListItemText, AListView, FTextLayout); Или можно затолкать это действие в функцию вычисления высоты: function CalculateHeight(const AListItemText : TListItemText; const AListView : TListView; const FTextLayout : TTextLayout) : Single; Var AFontObject : TFontObject; begin FTextLayout.BeginUpdate; try FTextLayout.Text:=AListItemText.Text; FTextLayout.MaxSize:=TPointF.Create(AListItemText.Width, TTextLayout.MaxLayoutSize.Y); AFontObject:=(AListView.FindStyleResource('font') as TFontObject); if Assigned(AFontObject) then FTextLayout.Font.Assign(AFontObject.Font) else FTextLayout.Font.Assign(AListItemText.Font); FTextLayout.WordWrap:=AListItemText.WordWrap; FTextLayout.Trimming:=AListItemText.Trimming; FTextLayout.HorizontalAlign:=AListItemText.TextAlign; FTextLayout.VerticalAlign:=AListItemText.TextVertAlign; finally FTextLayout.EndUpdate; end; // Result:=FTextLayout.Height * 1.4; // Теперь этот костыль не нужен Result:=FTextLayout.Height; end; Внимание! Если вы заполняете еще невидимый на экране ListView, не забудьте выполнить ListView.ApplyStyleLookup перед добавлением Items, иначе не получите правильный размер шрифта из стиля.
- 2 ответа
-
- tlistitemtext.height
- tlistviewitem.height
- (и ещё 1 )
-
Меня это проблема преследует со времен VCL... Подскажите как же ее решить... FMX TListView - ItemAppearanceName = ImageListItem. Лежит fmx TimageList, в настройках указано 16x16 и прорачный цвет clNone, добавил одну иконку 16x16 с прозрачностью. Если запустить под Windows 10 все ок. Если запустить под Android то при выделении (selected) вместо прозрачности белый цвет. В результате иконка некрасиво обрамлена в белом квадрате.. Иконку делал в Axiallis IconWorkShop, сохранил как ico, Пробовал заливать белым вместо прозрачного, и затем ставить в TimageList белый как прозрачный - тоже самое... Что же делать...
- 5 ответов
-
- tlistview
- timagelist
-
(и ещё 2 )
C тегом:
-
Извиняюсь за глупый вопрос. Если я использую LiveBinding, как обновить данные в ListView после апдейта? Для работы с данными использую UniDac. Апдейт вижу в профайлере. P.S. Вопрос почти снят..) Как правильнее? так MainForm.ListView1.BeginUpdate; MainForm.ListView1.EndUpdate; или так MainForm.BindSourceDB1.DataSet.Refresh;
-
Добрый вечер, друзья! Кто в курсе, подскажите - возможен ли плавный скроллинг содержимого TListView при работе приложения под Windows? Если с мобильным вариантом все ОК, на "автомате" - т.е. плавный скроллинг там работает по умолчанию, то с работой под Windows что-то не понятно как это включить/реализовать. Например, чтобы сделать плавный скролл содержимого TListBox, достаточно написать TScrollBox(__listbox1___).AniCalculations.Animation := True; А есть ли что-то аналогичное для TListView? Заранее благодарен за ответы!
-
Ссылка: http://blog.rzaripov.kz/2016/11/2-modernlistview.html Автор: Зарипов Равиль @ZuBy Описание: Как сделать режим мультивыделения в TListView
- 5 ответов
-
- modernLV
- ModernListView
-
(и ещё 1 )
C тегом: