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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2015, 10:14   #1
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию Парсинг в listview

Ребята, помогите распарсить страницу view-source:http://37.233.9.237/api/output.php?Name=NipponAuto
Там в тексте в самом конце, есть переход на строку ниже /n но разве это сработает в listview?
Я то разделю ссылку, будет все по отдельности - то-есть полноценный вывод с сайта разделю по частям, там где пишет идентификатор вставлю в 1 столбец, а вывод номера во 2 и т.д.
Но вот, когда я попытался вывести текст из обычного string в listview у меня он отображался в 2 столбцах сразу, а как например отдельно вывести только в 1 столбец одно, а во 2 другое?
Помогите пожалуйста!
CrystalDF вне форума Ответить с цитированием
Старый 25.02.2015, 11:54   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
uses IdHTTP,IdGlobal;

procedure TForm1.Button1Click(Sender: TObject);
var
  HTTP:TIdHTTP;
  List:TStringList;
  ListItem:TListItem;
  line,s:string;
  i:Integer;
begin
  List:=TStringList.Create;
  try
    HTTP:=TIdHTTP.Create(nil);
    try
      List.Text:=HTTP.Get('http://37.233.9.237/api/output.php?Name=NipponAuto');
    finally
      HTTP.Free;
    end;

    ListView1.Items.Clear;
    ListView1.Columns.Clear;

    line:=List[0];
    while Length(line)>0 do
    begin
      s:=Fetch(line,'|');
      ListView1.Columns.Add.Caption:=Trim(Fetch(s,':'));
    end;

    for i:=0 to List.Count-1 do
    begin
      ListItem:=ListView1.Items.Add;
      line:=List[i];
      while Length(line)>0 do
      begin
        s:=Fetch(line,'|');
        Fetch(s,':');
        if ListItem.Caption='' then
          ListItem.Caption:=Trim(s)
        else
          ListItem.SubItems.Add(Trim(s));
      end;
    end;
    finally
      List.Free;
    end;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 25.02.2015, 16:10   #3
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию

Чувак, ты супер спасибо тебе большое!!

Ребят еще одна проблема, а как все это дело выровнять по тексту?
У меня все сжато, в интернете нечего подобного не нашел.

Последний раз редактировалось Stilet; 25.02.2015 в 20:27.
CrystalDF вне форума Ответить с цитированием
Старый 25.02.2015, 17:43   #4
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

смотри последний пост
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 25.02.2015 в 20:25.
Slym вне форума Ответить с цитированием
Старый 25.02.2015, 19:40   #5
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию

Пишет ошибку на AutoWidth(lv1);
[Error] Unit1.pas(276): Incompatible types: 'TListView' and 'TsListView'

Разобрался... Спасибо тебе Slym

При этой функций AutoWidth(lv1); возникает такая ошибочка.
Странно как-то.

Последний раз редактировалось Stilet; 25.02.2015 в 20:28.
CrystalDF вне форума Ответить с цитированием
Старый 25.02.2015, 20:13   #6
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

смотри последний пост
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 25.02.2015 в 20:24.
Slym вне форума Ответить с цитированием
Старый 25.02.2015, 20:21   #7
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию

Спасибо! Да я так и думал что пустая listview и задавать ширину не-где, но не знал как исправить, пытался писать условия если lv1 пустой нужно то нечего не изменять, но мне ошибки писало, и поэтому я чуть понервничал и отправил сюда ошибку. В любом случае спасибо
CrystalDF вне форума Ответить с цитированием
Старый 25.02.2015, 20:22   #8
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

СТОП!
Нагуглил "правильный метод"

Код:
uses CommCtrl;
procedure TForm1.AutoWidth(ListView: TListView);
var
  Col,Wid:Integer;
begin
  ListView.Items.BeginUpdate;
  {only if you want autosized columns or if any column.width=-1}
  for Col := 0 to ListView.Columns.Count - 1 do
    ListView.Columns[Col].Width := 0;

{ this is only needed for automatically setting the widths of the columns}
  for Col := 0 to ListView.Columns.Count - 1 do
  begin
    { autowidth by text in columns }
    ListView.Columns[Col].Width := -1;
    Wid := ListView_GetColumnWidth(ListView.handle, Col);

    { autowidth by text in headers }
    ListView.Columns[Col].Width := -2;
    if ListView_GetColumnWidth(ListView.handle, Col) > Wid then
      Wid := ListView_GetColumnWidth(ListView.handle, Col);

    { the wider of the two }
    ListView.Columns[Col].Width := Wid;
  end; { for }
{ end of autowidth code}
  ListView.Items.EndUpdate;
end;
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 25.02.2015, 20:56   #9
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию

Слушай, еще один вопросик.
Хотел бы всю строку где написано слово "Возврат" пометить красным цветом.
Я пробовал так сделать, но тут что-то не так.
Условие не знаю какое реализовать.

Код:
procedure TAIBook.lv1DrawItem(Sender: TCustomListView; Item: TListItem;
  Rect: TRect; State: TOwnerDrawState);
var i:integer;
var ListItems : TListItems;
begin
 with Sender do
  for i:=0 to length(Item.Caption) do begin
    if lv1.ListItems('Âîçâðàò') then canvas.Pen.Color:=clred else canvas.Pen.Color:=clblack;
    Canvas.TextOut(rect.Left+i+Canvas.TextWidth('W'),Rect.Top,Item.Caption[i]);
  end;
end;
CrystalDF вне форума Ответить с цитированием
Старый 25.02.2015, 21:01   #10
CrystalDF
Пользователь
 
Регистрация: 12.02.2015
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Slym Посмотреть сообщение
СТОП!
Нагуглил "правильный метод"

Код:
uses CommCtrl;
procedure TForm1.AutoWidth(ListView: TListView);
var
  Col,Wid:Integer;
begin
  ListView.Items.BeginUpdate;
  {only if you want autosized columns or if any column.width=-1}
  for Col := 0 to ListView.Columns.Count - 1 do
    ListView.Columns[Col].Width := 0;

{ this is only needed for automatically setting the widths of the columns}
  for Col := 0 to ListView.Columns.Count - 1 do
  begin
    { autowidth by text in columns }
    ListView.Columns[Col].Width := -1;
    Wid := ListView_GetColumnWidth(ListView.handle, Col);

    { autowidth by text in headers }
    ListView.Columns[Col].Width := -2;
    if ListView_GetColumnWidth(ListView.handle, Col) > Wid then
      Wid := ListView_GetColumnWidth(ListView.handle, Col);

    { the wider of the two }
    ListView.Columns[Col].Width := Wid;
  end; { for }
{ end of autowidth code}
  ListView.Items.EndUpdate;
end;
Заменил, спасибо
CrystalDF вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг Pearl777 Работа с сетью в Delphi 7 29.04.2013 22:19
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
парсинг Pein95 C# (си шарп) 3 16.09.2011 01:24
[C# + WPF] ListView. Узнать выделена ли строка в нём. ListView.View == GridView. Casper-SC WPF, UWP, WinRT, XAML 2 12.08.2010 19:04