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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.07.2010, 17:06   #11
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

чёт не выходит так
Код:
procedure TForm2.Button2Click(Sender: TObject);
var
a:string;
s:TStringStream;
data:TStringList;
  i: integer;
begin
s:=TStringStream.Create;
 IdHTTP1.AllowCookies:=true;
 data:=tstringlist.create;
 try
s:=TStringStream.Create;
data:=TStringList.Create;
IdHTTP1:=TIdHTTP.Create(nil);
  IdHTTP1.get('' + Form2.Listview1.Items[0].SubItems.Strings[0]);
  IdHTTP1.get('' + Form2.Listview1.Items[0].SubItems.Strings[0] + 'login.php?r=');
  Data.Add('username=' +Form2.Listview1.Items[0].SubItems.Strings[1]);
  Data.Add('password=' + Form2.Listview1.Items[0].SubItems.Strings[2]);
  IdHTTP1.Post('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'login.php',data,s);
  IdHTTP1.get('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'privatecab.php',s);
  s.position:=0;
a=IdHttp1.Get('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'sites.php');
while Pos('viewp.php?ad',a)>0 do begin
except
 ListView1.Items.Count;
 ListView1.AddItem('', nil);
ListView1.Items.Item[ListView1.Items.Count-1].SubItems.Add(a);
end;

Последний раз редактировалось Stilet; 29.07.2010 в 09:21.
bulldog5293 вне форума Ответить с цитированием
Старый 27.07.2010, 19:03   #12
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

во-первых, у тебя утечка памяти. До блока try ты создаешь объекты, а потом в этом блоке меняешь указатели на вновь создаваемые объекты.
А вообще, как я понял, тебе нужен примерно такой код:

Код:
var
  lstr:Ansistring;
  li:TListItem;
...
a=IdHttp1.Get('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'sites.php');
while Pos('viewp.php?ad',a)>0 do
begin
  lstr:=Copy(a,Pos('view p.php?ad',a)+13,6);
  Delete(a,1, Pos('viewp.php?ad',a)+12);
  li:=ListView1.Items.Add;
  li.Caption:=lstr;
end;
ListView1.Columns[0].Caption:=inttostr(ListView1.Items.Count);
Здесь создаетяс одна колонка, куда заполняются все найденные ссылки. А в самой колонке пишется их число.
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 28.07.2010, 16:57   #13
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Спасибо за пример, но когда я ставлю так a=IdHttp1.Get('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'sites.php');
у меня выходит ошибка именно на эту строку, так я тоже ставил a:= и что мне нада убрать для предотвращения утечки памяти?
bulldog5293 вне форума Ответить с цитированием
Старый 29.07.2010, 07:19   #14
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

ошибка до компиляции? в первой строчке поставь a:=. И вобще как ты обращаешься к листвиеву до его заполнения? Ведь в нем нет еще ни одной строчки!

И необязательно писать Form2.Listview1.Items[0].SubItems.Strings[0], можно просто Listview1.Items[0].SubItems[0]
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Старый 29.07.2010, 21:44   #15
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

код я использую такой
Код:
procedure TForm2.Button2Click(Sender: TObject);
var
  lstr:Ansistring;
  li:TListItem;
s:TStringStream;
data:TStringList;
a, i: integer;
begin
s:=TStringStream.Create;
 IdHTTP1.AllowCookies:=true;
 data:=tstringlist.create;
 try
IdHTTP1:=TIdHTTP.Create(nil);
  IdHTTP1.get('' + Form2.Listview1.Items[0].SubItems.Strings[0]);
  IdHTTP1.get('' + Form2.Listview1.Items[0].SubItems.Strings[0] + 'login.php?r=');
  Data.Add('username=' +Form2.Listview1.Items[0].SubItems.Strings[1]);
  Data.Add('password=' + Form2.Listview1.Items[0].SubItems.Strings[2]);
  IdHTTP1.Post('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'login.php',data,s);
  IdHTTP1.get('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'privatecab.php',s);
  s.position:=0;
  if (Pos('privatecab.php',s.DataString) <> 0) or (Pos('bulldog5293',s.DataString) <> 0) then
a:=IdHttp1.Get('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'sites.php');/// как не странно ошибка здесь
while Pos('viewp.php?ad',a)>0 do begin
  lstr:=Copy(a,Pos('view p.php?ad',a)+13,6);
  Delete(a,1, Pos('viewp.php?ad',a)+12);
  li:=ListView1.Items.Add;
  li.Caption:=lstr;
end;
ListView1.Columns[0].Caption:=inttostr(ListView1.Items.Count);
 finally
  idhttp1.free;//освобождаем объект
end;
end;
В ListView данные вводятся из ListView модальной формы

Последний раз редактировалось Stilet; 30.07.2010 в 09:24.
bulldog5293 вне форума Ответить с цитированием
Старый 30.07.2010, 07:38   #16
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

1) Процедура IdHttp1.Get, если я не ошибаюсь. А теперь какого хрена ты переменной а присваиваешь процедуру?! Вот и ошибка.
2) Извини меня конечно, но ты понимаешь разницу между Integer и String? Ты пользуешь функцию Pos() и ищешь субстроку в числе a?!

Слушай, почитай про Делфи, поучись.

з.ы. Я и Инди еще не работал, но как понял, IdHTTP1.Get(); работает так: первый параметр-твой урл, второй, поток, куда записывается html-результат полученного с сервера.

Код:
var st:TStringStream;//добавь эту переменную в вар
     str:AnsiString;//и эту тоже
...
IdHTTP1:=TIdHTTP.Create(Application); 
  IdHTTP1.get('' + Form2.Listview1.Items[0].SubItems.Strings[0],st); //непонятно, куда ты записываешь результат? надо в st или в s
  IdHTTP1.get('' + Form2.Listview1.Items[0].SubItems.Strings[0] + 'login.php?r=',st); //то же самое
...
st:=TStringStream.Create;
IdHttp1.Get('' + Form2.Listview1.Items[0].SubItems.Strings[0]+'sites.php',st);
str:=st.DataString;
st.Free;
while Pos('viewp.php?ad',str)>0 do
begin 
  lstr:=Copy(str,Pos('view p.php?ad',a)+13,6); 
  Delete(str,1, Pos('viewp.php?ad',a)+12); 
  li:=ListView1.Items.Add; 
  li.Caption:=lstr; 
end;
...
Примерно так. Почитай внимательно про Инди и его методы.
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 30.07.2010 в 07:54.
3D Hunter вне форума Ответить с цитированием
Старый 31.07.2010, 19:59   #17
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Сделал так, но ссылки с маской view.php?ad= нет, в место них чуть ли не полный html код сайта. Может это быть связанно с indy10 или delphi2010?
PHP код:
procedure TForm2.Button2Click(SenderTObject);
var
ListItemTListItem;
st:TStringStream;
str:AnsiString;
lstr:Ansistring;
li:TListItem;
a:String;
s:TStringStream;
data:TStringList;
iinteger;
begin
s
:=TStringStream.Create;
st:=TStringStream.Create;
 
IdHTTP1.AllowCookies:=true;
 
data:=tstringlist.create;
 try
IdHTTP1:=TIdHTTP.Create(nil);
IdHTTP1.get('' Form2.Listview1.Items[0].SubItems[0],s);
IdHTTP1.get('' Form2.Listview1.Items[0].SubItems[0] + 'login.php?r=',s);
Data.Add('username=' +Form2.Listview1.Items[0].SubItems[1]);
Data.Add('password=' Form2.Listview1.Items[0].SubItems[2]);
IdHTTP1.Post('' Form2.Listview1.Items[0].SubItems[0]+'login.php',data,s);
IdHTTP1.get('' Form2.Listview1.Items[0].SubItems[0]+'privatecab.php',s);
s.position:=0;
st:=TStringStream.Create;
IdHttp1.Get('' Form2.Listview1.Items[0].SubItems.Strings[0]+'sites.php',st);
str:=st.DataString;
while 
Pos('view.php?ad=',str)>do
begin
  lstr
:=Copy(str,Pos('view.php?ad=',a)+13,8);
  
Delete(str,1Pos('view.php?ad=',a)+13);
  
li:=ListView1.Items.Add;
ListItem:=ListView1.Items.Add;
li.Caption:='';
ListItem.SubItems.Add('');
ListItem.SubItems.Add('');
ListItem.SubItems.Add('');
ListItem.SubItems.Add(lstr);
ListItem.SubItems.Add(inttostr(ListView1.Items.Count));
end;
finally
st.Free;
  
idhttp1.free;
end;
end
bulldog5293 вне форума Ответить с цитированием
Старый 02.08.2010, 07:50   #18
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

После 'view.php?ad=' идут данные сплошняком или 'view.php?ad=' идет в паре с данными из 8 байтов?
Тут мой косяк:
Код:
  lstr:=Copy(str,Pos('view.php?ad=',str)+13,8); 
  Delete(str,1, Pos('view.php?ad=',str)+12);
Тут а вообще ни алле. Мы-то считываем в str из потока st! И удаляешь ты 12 символов, а не 13! Потому что в 'view.php?ad=' 12 символов! Посчитай. А на самом деле ты удаляешь весь html-текст вплоть до 'view.php?ad=' включительно.
А вообще, если 'view.php?ad=' встречается 1 раз и после него идут рег-данные по 8 байт, то перед циклом запомни найденную позицию 'view.php?ad=' в переменную int и потом считывай по 8 байт с этой позиции, не забывая после считывания увеличить размер позиции на 8:
Код:
  lstr:=copy(str,int,8);
  Inc(int,8);
И зачем ты опять в цикле понаписал для листвиева кода? Ну зачем тебе создавать 2 строчки за раз, одна из которых будет пустой?! Тогда уж вместо ListItem поставь везде li. Убери нах строчку "ListItem:=ListView1.Items.Add; " в цикле. У тебя уже создана "li:=ListView1.Items.Add;".
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 02.08.2010 в 07:59.
3D Hunter вне форума Ответить с цитированием
Старый 09.08.2010, 19:33   #19
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

Сделал так
PHP код:
IdHttp1_Pay.Get('' Form2.Listview1.Items[0].SubItems.Strings[0]+'sites.php'st);
str:=st.DataString;
      
with Form2.Listview1.Items.Item[8] do
while 
Pos('view.php?ad=',str)>do begin
 Form2
.ListView1.Items.Item[v].SubItems.add(Copy(str,Pos('view.php?ad=',str)+12,7)); 
Но теперь касяк в дублирование одной и тоже строки, а их там 9, хотя может быть как и меньше так и больше
v- это integer счётчик колонок
bulldog5293 вне форума Ответить с цитированием
Старый 14.08.2010, 12:23   #20
bulldog5293
Форумчанин
 
Регистрация: 13.05.2010
Сообщений: 670
По умолчанию

вопрос снят, ошибку понял и исправил, тема закрыта
bulldog5293 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как перетащить элемент ListView в другой ListView? Paul Hindenburg Компоненты Delphi 5 26.01.2013 11:35
listview grater83 Общие вопросы Delphi 1 14.09.2009 08:49
ListView sht0p0r Помощь студентам 1 15.12.2008 23:33
ListView Старовъръ Компоненты Delphi 8 02.07.2008 19:08
ListView Garacio Компоненты Delphi 1 17.12.2006 15:30