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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 30.06.2015, 08:15   #11
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Всем спасибо)

Изначально была думка сделать простое верхнее меню туда все ссылки напихать к примеру на "Уплотнители" поставить эту ссылку
Не хотел как то морочить себе голову что то наворачивать, мне для расчетов стоимости они пригодилась бы. Так вот Хочу рассказать как я планировал)
Беру гетом страницу, изменяю все цены и загружаю все это дело в Webbrowser чтоб было все понятно и видно.
Но тут так не получилось. Цены почему-то не меняются(

Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, RegularExpressions,mshtml, activex,
  Vcl.OleCtrls, SHDocVw, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    WebBrowser1: TWebBrowser;
    Button2: TButton;
    Button3: TButton;
    IdHTTP1: TIdHTTP;
    function Evaluator(const Match: TMatch): string;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  myFormatSettings: TFormatSettings;

implementation

{$R *.dfm}

// Функция загрузки страницы с браузера !
procedure LoadHtmlInWebbrowser(DestWB: TWebBrowser; HtmlString: String);
var
  sl: TStringList;
  ms: TMemoryStream;
begin
  DestWB.Navigate('about:blank');
  while (DestWB.ReadyState < READYSTATE_INTERACTIVE) do
    Application.ProcessMessages;
  if Assigned(DestWB.Document) then
  begin
    sl := TStringList.Create;
    try
      ms := TMemoryStream.Create;
      try
        sl.Text := HtmlString;
        sl.SaveToStream(ms);
        ms.Seek(0, 0);
        (DestWB.Document as IPersistStreamInit).Load(TStreamAdapter.Create(ms));
      finally
        ms.Free;
      end;
    finally
      sl.Free;
    end;
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  RegEx: TRegEx;
begin
  RegEx := TRegEx.Create
    ('(<div class="price-value">)(\d+|\d+\.\d+)(<span>)( р.)(</span></div>)');
  if RegEx.IsMatch(Memo1.Text) then
    Memo2.Text := RegEx.Replace(Memo1.Text, Evaluator);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
LoadHtmlInWebbrowser(WebBrowser1, memo1.text);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
memo1.Text:=idhttp1.Get('http://furnitura-titan.ru/catalog/43/');
end;

function TForm1.Evaluator(const Match: TMatch): string;
begin
  if Match.Groups.Count = 6 then
    Result := Match.Groups[1].Value + FormatFloat('0.##',
      StrToFloatDef(Match.Groups[2].Value, 0, myFormatSettings) * 4.12,
      myFormatSettings) + Match.Groups[3].Value + ' тг.' + Match.Groups[5].Value
  else
    Result := '';
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  GetLocaleFormatSettings(GetThreadLocale, myFormatSettings);
  myFormatSettings.DecimalSeparator := '.';
end;

end.
Вот это все, в чем тут ошибка? когда 3 тега в мемо такие как я писал в посте тогда нормально все меняется а когда целый код страницы то уже ничего не меняется. Как исправить это все?
99% ошибок компьютера сидит в полуметре от монитора.

Последний раз редактировалось Stilet; 30.06.2015 в 08:57.
Fahman вне форума
Старый 30.06.2015, 09:12   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а когда целый код страницы то уже ничего не меняется.
Отладку конечно не делал )
Прям как всегда )))
Кстати. не так уж и обязательно делать это регулярками:
Код:
const pv='<span> р.</span></div>';
var i,j:integer; d:double;
...
s:=idhttp1.Get(...);
i:=pos(pv,s);
while i<>0 do begin
 j:=i; while (j>0)and(s[j]<>'>') do dec(j);
 if TryStrToFloatDef(copy(s,j,i-j),d) then begin
  d:=d*4.12;
  delete(s,j,i-j); insert(s,j,format('%f<span> тг.</span></div>',[d]));
 end;
  delete(s,i,length(pv));
end;
I'm learning to live...
Stilet вне форума
Старый 30.06.2015, 09:15   #13
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Отладку конечно не делал )
Прям как всегда )))
Кстати. не так уж и обязательно делать это регулярками:
Код:
const pv='<span> р.</span></div>';
var i,j:integer; d:double;
...
s:=idhttp1.Get(...);
i:=pos(pv,s);
while i<>0 do begin
 j:=i; while (j>0)and(s[j]<>'>') do dec(j);
 if TryStrToFloatDef(copy(s,j,i-j),d) then begin
  d:=d*4.12;
  delete(s,j,i-j); insert(s,j,format('%f<span> тг.</span></div>',[d]));
 end;
  delete(s,i,length(pv));
end;
Неа, отладку как всегда не делал так как и так не по читал про нее, работы много на обучение нет времени по этому делаю так как умею, по другому не как... Вообще нормально я задумал нет? Просто может есть более легкий способ и быстрый? Мне показалась это самый оптимальный вариант и надо же было то на таком застрять)
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Старый 30.06.2015, 09:18   #14
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Неа, отладку как всегда не делал так как и так не по читал про нее, работы много на обучение нет времени по этому делаю так как умею, по другому не как...
Дык на отладку гораздо меньше времени, чем на форуме ждать ответа. Для таких задач по крайней мере и на порядок. А еще говнокод подсунут
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 30.06.2015, 13:19   #15
Fahman
Форумчанин
 
Аватар для Fahman
 
Регистрация: 03.04.2013
Сообщений: 703
По умолчанию

Тему можно закрыть) всем спасибо))))))))))
99% ошибок компьютера сидит в полуметре от монитора.
Fahman вне форума
Старый 30.06.2015, 16:12   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
А еще говнокод подсунут
Вот спасибочки!!!!
Я тут понимаешь сидел писал... А теперь, как мне с этим жить?
I'm learning to live...
Stilet вне форума
Старый 30.06.2015, 16:31   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Виталь, не зуди. Я не твой код конкретно, а абстрактно - весь интернетовский код в нашем и других подобных форумах. Код, даже правильный, дают для примера, но не доведенный до ума. А бестолковый прогер в лоб его копипастит
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума
Старый 30.06.2015, 17:41   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да шуткую я, шуткую ))
I'm learning to live...
Stilet вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсер цен cfkhellboy1992 Microsoft Office Excel 0 24.02.2015 12:33
График цен s-t-r-i-k-e-r Софт 1 11.04.2014 15:19
Автоматическое обновление цен bitup PHP 14 03.04.2014 00:33
Визуальная замена чего угодна на любом сайте khabirov JavaScript, Ajax 5 29.08.2012 08:23