[ Delphi / Pascal ] — начинающим: задаем вопросы

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by begin_end, 28 Apr 2015.

  1. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Вообще я сайты загружаю с ini:
    Содержимое ini:
    Code:
    [Domain]
    http://ya.ru
    http://google.com
    http://yahoo.com
    [Delimiter]
    :
    
    И мне просто надо загрузить ссылки с [Domain] в memo1 и разделитель [Delimiter] в Edit1.text или он может быть ;
     
  2. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Code:
    function StrBetween(S, First, Last: String): String;
    begin
      Result := '';
      if Pos(First, S) > 0 then begin
        Result := Copy(S, Pos(First, S) + Length(First),
        Length(S) - Pos(First, S) - Length(First) + 1);
        Delete(Result, Pos(Last, Result), Length(Result) -
        Pos(Last, Result) + 1);
      end else
        if (First = '') and (Pos(Last, S) > 1) then
          Result := Copy(S, 1, Pos(Last, S) - 1);
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      CRLF: Boolean;
      Text, URLs, Delim: String;
    begin
      Text := Memo1.Text; // Берём исходный текст
    
      CRLF := Pos(#13#10, Text) > 0;
      if CRLF then
        Text := StringReplace(Text, #13#10, #10, [rfReplaceAll]);
    
      URLs := StrBetween(Text, '[Domain]'#10, #10'[');
      Delim := StrBetween(Text, '[Delimiter]'#10, #10);
    
      if CRLF then
        URLs := StringReplace(URLs, #10, #13#10, [rfReplaceAll]);
    
      Memo1.Text := URLs; // Записываем список
      Edit1.Text := Delim; // Записываем разделитель
    end;
    
    Дальше со списком уже можно осуществлять фильтрацию.
     
    triblekill likes this.
  3. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Отлично спасибо огромное прямо абсолютно то что нужно ! По 100 бальной шкале 101 !!
    Ты меня вообще выручил !
     
    binarymaster likes this.
  4. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Вот если это всё распределить по двум кнопкам открытие страницы, затем парсинг то всё нормально пашет !!!
    А щас не хочет -(
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
    i:integer;
    str:string;
    y:integer;
    begin
    //for i := 0 to memo1.Lines.Count-1 do
    webbrowser1.Navigate('yandex.ru');
    if WebBrowser1.LocationURL = 'about:blank' then begin // проверяю открылась ли ссылка прежде чем парсить
    str:=Webbrowser1.OleObject.Document.body.innerHTML;
    memo3.Lines.AddStrings(Parse('event)" href="', '" target="_blank">', Str));
    for i:=memo3.Lines.count-1 downto 0 do
    if Copy(Memo3.Lines.Strings[i],1,4)<>'http'
    then begin
    memo3.lines.Delete(i);
    end;
    end;
    end;
    
     
  5. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    А почему вот такое начало цикла подвисает форму и работает не совсем корректно ?

    Code:
    var
    i,fg:integer;
    begin
    for i:=0 to memo3.Lines.Count-1 do
    for fg:=0 to memo1.Lines.Count-1 do
    ...
    ..
    .
    begin
    Memo2.lines.add(memo1.lines[i]+memo3.lines[i]);
    
    В мемо1 содержится много cтрок и к каждой нужно прибавить все строки из мемо3 и отобразить результат в мемо2 !
     
    #105 triblekill, 16 Nov 2015
    Last edited: 16 Nov 2015
  6. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Потому, что когда ваш код работает в контексте потока формы, форма не может принимать сообщения, и поэтому зависает.
     
  7. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    А можно поправить ? А цикл работает не корректно он берёт и к каждой строке в мемо1 прибавляет строку из мемо3, а потом прибавляет вторую строку из мемо3 и тд !
    А мне нужно чтобы цикл прибавлял к первой строке из мемо1 все строки мемо3 затем ко второй строке мемо1 все строки из мемо3 и тд. помогите пжл
     
    #107 triblekill, 16 Nov 2015
    Last edited: 16 Nov 2015
  8. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Code:
    Memo2.lines.add(memo1.lines[i] + memo3.text);
    Думаю, так. При этом второй цикл можно отбросить.
     
  9. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Перекидываю кнопку с form1 на Tabcontrol а она исчезает и с Page Control тоже самое
     
    #109 triblekill, 16 Nov 2015
    Last edited: 16 Nov 2015
  10. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    В Delphi есть собственно TPageControl, чтобы создавать многостраничные закладки.

    А если вам нужно несколько окон, просто главное меню File -> New -> Form - Delphi, а там уже в настройках проекта указываете, какие окна выводить сразу, а какие нет.
     
  11. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Кнопки которые перекидываю c form1 на TabControl или Pagecontrol исчезают :=( и даже при компилировании их не кажет (
     
  12. binarymaster

    binarymaster Elder - Старейшина

    Joined:
    11 Dec 2010
    Messages:
    4,717
    Likes Received:
    10,195
    Reputations:
    126
    Кнопки на страницы можно перемещать, используя Ctrl+X и Ctrl+V, либо перемещая в дереве объектов.
     
    triblekill likes this.
  13. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Как правильно поставить цикл
    Представляешь ctrl+x +v работают а мышкой нет
     
  14. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Code:
    i,fg:integer;
    begin
    if radiobutton1.checked=true then begin
    for fg:=0 to memo1.Lines.Count-1 do
    for i:=0 to memo2.Lines.Count-1 do
    if radiobutton2.checked=true then begin
    for i:=0 to memo2.Lines.Count-1 do
    for fg:=0 to memo1.Lines.Count-1 do
    
    Но дельфи не даст использовать так две одинаковые переменные:integer -(
     
    #114 triblekill, 17 Nov 2015
    Last edited: 17 Nov 2015
  15. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
    Конечно не дает, потому что у тебя вложенный цикл с теми же переменными.
    [​IMG]
     
  16. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Ну я тебя понял, но не вариант записывать две новых переменных
     
    #116 triblekill, 17 Nov 2015
    Last edited: 17 Nov 2015
  17. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
    Тогда придумай как изменить логику. Твой код написан не верно, как ни крутись.
     
  18. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Как можно получить содержимое страницы с https средствами дельфи, но не Twebbrowser ??
     
  19. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
  20. triblekill

    triblekill Member

    Joined:
    21 Aug 2011
    Messages:
    351
    Likes Received:
    94
    Reputations:
    1
    Ну вот Synapse то как раз и не хочет мало того он ещё и непонимает русских букв в ссылке