Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.07.2015, 11:32   #1
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию Парсинг в Listview (Firemonkey)

Доброго времени суток) опять я !
Хочу сделать так чтоб при клике у меня в Listview добавлялся каталог товара, примерно так:

ну и

все данные я спарсил так
Код:
strings := Parse('title="Подробнее о товаре"><img src="', '" 1="" alt=""', Memo1.Lines.Text);
Есть все
-Наименование
-ссылка на картинку
-цена
-подробнее
Все спарсил вроде норм а вот как так нарисовать listview не могу понять, подскажите как сделать как на картинке?
В переменной подробнее и ссылка на картинку лежат ссылки
надо чтоб при клике на подробнее открывалось новое окно и там уже полное описание, полное описание я тоже могу спарсить без проблем, не могу нарисовать только так listview, подскажите доделать
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 06.07.2015, 13:20   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Однозначно в CustomDrawItem дебри кидаться рисовать ) Canvas в руки и вперед.
Человек_Борща вне форума Ответить с цитированием
Старый 06.07.2015, 14:06   #3
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Однозначно в CustomDrawItem дебри кидаться рисовать ) Canvas в руки и вперед.
Пример можете дать? читал но один фиг не до конца понял как реализовать....

Кстати мне понравился listbox там помоему легче сделать так как просто образец я норм сделал...
вот как то так надо
99% ошибок компьютера сидит в полуметре от монитора.

Последний раз редактировалось Fahman; 06.07.2015 в 14:20.
Fahman вне форума Ответить с цитированием
Старый 06.07.2015, 14:14   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

А обещанная картинка виртуальная, что-ли?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 06.07.2015, 14:25   #5
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А обещанная картинка виртуальная, что-ли?
я ее загрузил с компа. но я спарсил полный путь к картинке на сайте
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 07.07.2015, 12:41   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,656
По умолчанию

Так проблема с TListView или с парсингом?
Переформулируй задачу так: "имеется X, надо получить Y из X".
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 07.07.2015, 15:53   #7
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
Лампочка

Переименуйте тему с "Парсинг в Listview (Firemonkey)" в что-то вроде "Загрузить картинку из интернета (по URL) в TListView"...


Я сегодня в настроении, сделал пример на коленке, хоть и требует доработок, но всё же показывает суть:

Цитата:
Для чайников
1) Запускаем Делфи.
2) Бросаем на форму Button, ComboBox, ListView и IdHTTP (вкладка Indy Clients).
3) Создаём события (двойной клик в Events соответствующего контрола): FormCreate, FormDestroy, ComboBox1Change и Button1Click.
4) Копируем код (заменяем всё) и смотрим/изучаем как работает:

Последний раз редактировалось ResourceSpace; 07.07.2015 в 15:56.
ResourceSpace вне форума Ответить с цитированием
Старый 07.07.2015, 15:53   #8
ResourceSpace
Форумчанин
 
Аватар для ResourceSpace
 
Регистрация: 30.06.2015
Сообщений: 353
По умолчанию

Код:
Unit Unit1;

Interface

Uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, ExtCtrls;

Type
      TForm1 = Class(TForm)
            ListView1: TListView;
            ComboBox1: TComboBox;
            Button1: TButton;
            IdHTTP1: TIdHTTP;
            Procedure FormCreate(Sender: TObject);  
            Procedure FormDestroy(Sender: TObject);   
            Procedure ComboBox1Change(Sender: TObject);
            Procedure Button1Click(Sender: TObject);
      Private { Private declarations }
            LoadedImagesCache: TStringList;
            Procedure ListViewAddItemEx(ListView: TListView; Title, Col1, Col2: String; ImageURL: String=''; LoadedImages: TStringList=Nil);
            Procedure ListViewLoadImage(ListView: TListView; ImageURL: String);
      Public { Public declarations }
      End;

Var Form1: TForm1;

Implementation

{$R *.dfm}

Uses ImgList, GIFImage, JPEG, PNGImage;

Procedure TForm1.FormCreate(Sender: TObject);
Begin
LoadedImagesCache:=TStringList.Create;
ListView1.LargeImages:=TImageList.Create(Self);
ListView1.LargeImages.Width:=96;
ListView1.LargeImages.Height:=96;
ListView1.SmallImages:=TImageList.Create(Self);
ListView1.SmallImages.Width:=48;
ListView1.SmallImages.Height:=48;
ListView1.Columns.Add.Caption:='Title';
ListView1.Columns.Add.Caption:='Col1';
ListView1.Columns.Add.Caption:='Col2';
ListView1.Columns.Items[0].AutoSize:=True;
ListView1.Columns.Items[1].AutoSize:=True;
ListView1.Columns.Items[2].AutoSize:=True;
ComboBox1.Items.Text:='vsIcon'#13#10'vsSmallIcon'#13#10'vsList'#13#10'vsReport';
ComboBox1.ItemIndex:=0;
End;

Procedure TForm1.FormDestroy(Sender: TObject);
Begin
LoadedImagesCache.Free;
End;

Procedure TForm1.ComboBox1Change(Sender: TObject);
Begin
Case TComboBox(Sender).ItemIndex Of
      0:
            ListView1.ViewStyle:=vsIcon;
      1:
            ListView1.ViewStyle:=vsSmallIcon;
      2:
            ListView1.ViewStyle:=vsList;
      3:
            ListView1.ViewStyle:=vsReport;
      End;
End;

Procedure TForm1.Button1Click(Sender: TObject);
Var F: String;
Begin
F:='http://www.programmersforum.ru/images/1070';
ListViewAddItemEx(ListView1, 'Title~'+IntToStr(GetTickCount), 'ololo', 'blablabla', F+'/misc/logo.gif', LoadedImagesCache);
ListViewAddItemEx(ListView1, 'Caption~'+IntToStr(GetTickCount), 'dasdasd', 'blablabla', F+'/statusicon/forum_new.gif', LoadedImagesCache);
ListViewAddItemEx(ListView1, 'Item~'+IntToStr(GetTickCount), 'ololo', '675476567567', F+'/statusicon/forum_old.gif', LoadedImagesCache);
End;

Procedure TForm1.ListViewAddItemEx(ListView: TListView; Title, Col1, Col2: String; ImageURL: String=''; LoadedImages: TStringList=Nil);
Var i: Integer; LI: TListItem;
Begin
LI:=ListView.Items.Add();
LI.Caption:=Title;
LI.SubItems.Add(Col1);
LI.SubItems.Add(Col2);
If (ImageURL<>'') And (LoadedImages<>Nil) Then
      Begin
      i:=LoadedImages.IndexOf(ImageURL);
      If i<0 Then
            Begin
            ListViewLoadImage(ListView, ImageURL);
            i:=LoadedImages.Add(ImageURL);
            End;
      LI.ImageIndex:=i;
      End
Else
      LI.ImageIndex:=-1;
End;

Procedure TForm1.ListViewLoadImage(ListView: TListView; ImageURL: String);
Var LW, LH: Integer; FileExt: String; Stream: TMemoryStream; IMG: TGraphic; BMP: TBitmap;
Begin
FileExt:=LowerCase(ExtractFileExt(ImageURL));
If (FileExt<>'.bmp') And (FileExt<>'.gif') And (FileExt<>'.jpg') And (FileExt<>'.jpeg') Then
      Begin
      ShowMessage('Error File Format');
      Exit;
      End;
Stream:=TMemoryStream.Create;
Try
      IdHTTP1.Get(ImageURL, Stream);
Except
      ShowMessage('Error Downloading');
      Exit;
      End;
Try
      Stream.Position:=0;
      If (FileExt='.bmp') Then
            IMG:=TBitmap.Create;
      If (FileExt='.gif') Then
            IMG:=TGIFImage.Create;
      If (FileExt='.jpg') Or (FileExt='.jpeg') Then
            IMG:=TJPEGImage.Create;
      IMG.LoadFromStream(Stream);
      BMP:=TBitmap.Create;
      If Assigned(ListView.LargeImages) Then
            Begin
            LW:=ListView.LargeImages.Width;
            LH:=ListView.LargeImages.Height;
            BMP.Width:=LW;
            BMP.Height:=LH;
            BMP.Canvas.StretchDraw(Rect(0, 0, LW, LH), IMG);
            ListView.LargeImages.AddMasked(BMP, clBlack);
            End;
      If Assigned(ListView.SmallImages) Then
            Begin
            LW:=ListView.SmallImages.Width;
            LH:=ListView.SmallImages.Height;
            BMP.Width:=LW;
            BMP.Height:=LH;                         
            BMP.Canvas.StretchDraw(Rect(0, 0, LW, LH), IMG);
            ListView.SmallImages.AddMasked(BMP, clBlack);
            End;
Finally
      Stream.Free;
      IMG.Free;
      BMP.Free;
      End;
End;

End.
ResourceSpace вне форума Ответить с цитированием
Старый 08.07.2015, 18:49   #9
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от ResourceSpace Посмотреть сообщение
Переименуйте тему с "Парсинг в Listview (Firemonkey)" в что-то вроде "Загрузить картинку из интернета (по URL) в TListView"...


Я сегодня в настроении, сделал пример на коленке, хоть и требует доработок, но всё же показывает суть:
Не то, совсем не то. я спарсил уже все линки и названия в Tstring list'ы и просто теперь надо подсказать конкретно объяснить как мне их теперь так впихать туда.
Ps 4 переменные типа стринглист в одном название в другом ссылка на картинку в третьем цена в четвертом ссылка на полное описание (Чертежи и т.п.) то есть если я кликну на картинку то она должна отобразиться на весь экран а если по кнопке ">" то уже показать отдельное окошко в котором будет информация (ее спарсить я смогу сам)
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Старый 08.07.2015, 18:50   #10
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Так проблема с TListView или с парсингом?
Переформулируй задачу так: "имеется X, надо получить Y из X".
С парсингом уже проблем нет)
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг в listview CrystalDF Общие вопросы Delphi 9 25.02.2015 21:01
FireMonkey ZuBy Общие вопросы Delphi 2 28.12.2013 20:37
FireMonkey Konstant_Tom C++ Builder 4 18.06.2013 19:20
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04