[ Delphi / Pascal ] — начинающим: задаем вопросы (архивная - 2015)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by banned, 6 May 2007.

Thread Status:
Not open for further replies.
  1. DiSi

    DiSi Member

    Joined:
    7 Dec 2007
    Messages:
    0
    Likes Received:
    19
    Reputations:
    0
    мм) а DocumentComplitle зачем?)
    лан помог)) WebBrowser1.LocationURL етого не знал
     
  2. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Как правильно дернуть куки с Post ответа (Winsock), а потом их отправить в следующим запросе
     
    #4042 НTL, 29 Aug 2009
    Last edited: 29 Aug 2009
  3. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    Как принять куки (там есть вариант, куки от хедера берутся):
    http://forum.antichat.ru/showpost.php?p=788789&postcount=11
     
    2 people like this.
  4. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    Есть, но не понятно как она работает
     
  5. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    А че не понятного то? Разжевываю по порядку! :)

    В мемо1:
    maska=aallalaalala;session=ashhasha;lala=2481;

    Code:
    function Tform1.CopyCookie(s,sBuff:string):string;
    var
    text:string;
    i:integer;
     Begin
      text:='';
      showmessage(inttostr(pos(s+'=',sBuff)));
      showmessage(inttostr(Length(sBuff)));
    //Посл символ у нас под номером 45
      For i:=pos(s+'=',sBuff) to Length(sBuff) Do
    //в i записываем откуда начинается фраза "what="
    //(В мемо1 у меня начинается фраза с 20 символа)
    //(в дальнейшем будет сокр МПК - МестоПоложениеКуки)
    //Дальше идем от МПК до символа ";" (когда сод. куки обрывается)
    //Но мы не знаем где будет находится символ ";"
    //Поэтому будем проходится от МПК до посл. символа sbuff (в намем случае до посл. символа memo1)
        Begin
          If sBuff[i]<>';' then text:=text+sBuff[i] else Break;
         //Тут мы сверяем текущий символ с символом ";"(окончание куки)
         //Если этого ";" символа нету то добавляем символ
         //В итоге как символ ";" встретился то у нас в переменной text будет кука (кука+значение куки)
         //и мы закончим проходится цикл так как уже кука у нас есть и нам не зачем дальше проходиться
        End;
      Result:=text;
     End;
    В Button1.OnClick пишем:
    Code:
     ShowMessage('Наша кука+значение куки: '+CopyCookie('What',Memo1.Lines.Text));
    Все просто если подумать головой
     
    #4045 wolmer, 29 Aug 2009
    Last edited: 29 Aug 2009
    1 person likes this.
  6. Markus_13

    Markus_13 Member

    Joined:
    19 Feb 2009
    Messages:
    74
    Likes Received:
    19
    Reputations:
    0
    Кто знает - можно как-нить изменить BorderStyle чужого окна?
    Скорее всего с помощью SendMessage я думаю, но найти не могу... :confused:
     
  7. НTL

    НTL Elder - Старейшина

    Joined:
    26 Jan 2008
    Messages:
    715
    Likes Received:
    205
    Reputations:
    -26
    :) Но только я заголовки кук не знаю
     
  8. =Zeus=

    =Zeus= Member

    Joined:
    10 Aug 2009
    Messages:
    213
    Likes Received:
    54
    Reputations:
    5
    BorderStyle я тоже не нашел, но нарыл у себя следующий код:

    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var h: HWND;
        rgn: HRGN;
        rect: TRect;
    begin
    h:=FindWindow(nil, PChar('Безымянный - Блокнот'));
    GetWindowRect(h, rect);
    rgn := CreateRoundRectRgn(0, 0, rect.Right-rect.Left, rect.Bottom-rect.Top, 50 , 50);
    SetWindowRgn(h, rgn, True);
    end;
    Здесь мы ищим дескриптор окна с названием "Безымянный - Блокнот", после чего определяем его размер и создаем округлую область. Финальный штрих - и окно приобретает очертания нашей области, тоесть как-бы с заокруглеными углами. Это конечно не то, что ты хотел, но как вариант...
    Можно создать квадратную область и скрыть границы окна. Хотя уверен, что и с BorderStyle найдется решение.
     
    #4048 =Zeus=, 29 Aug 2009
    Last edited: 29 Aug 2009
  9. Markus_13

    Markus_13 Member

    Joined:
    19 Feb 2009
    Messages:
    74
    Likes Received:
    19
    Reputations:
    0
    =Zeus=, Спасибо конечно))
    но смысла в этом не вижу, мне нужно сделать чтобы окну нельзя было менять размер, также чтобы окно нельзя было разворачивать на полный экран, а регион тут не причем :rolleyes:
    З.Ы. никто незнает где найти описание всех параметров SendMessage? в SDK нифига найти немогу, хочется всетаки сделать красиво, а поменять BS на ToolWindow имхо лучший вариант...
     
  10. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    Code:
    var
      wnd: HWND;
      old_long: Integer;
    begin
      wnd := FindWindow('Notepad', nil);
      old_long := GetWindowLong(wnd, GWL_STYLE);
      SetWindowLong(wnd, GWL_STYLE, old_long and not
        (WS_MAXIMIZEBOX or WS_SIZEBOX));
    end;
    
    а вообще, посмотри все константы, начинающиеся с "WS_"
     
    2 people like this.
  11. Markus_13

    Markus_13 Member

    Joined:
    19 Feb 2009
    Messages:
    74
    Likes Received:
    19
    Reputations:
    0
    там все даже проще оказалось, вот как сделал:
    Code:
    var wh:hWnd;
    ...
    SetWindowLong(wh,GWL_STYLE,WS_SYSMENU or WS_GROUP or WS_CAPTION);
    ShowWindow(wh,0);ShowWindow(wh,1);
    но ToolWindow не нашел всеравно)
     
  12. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    Но твой код не сохраняет атрибутов, которые были у окна раньше.

    Плохо смотришь ;)
    WS_EX_TOOLWINDOW
    Но для него нужно сменить GWL_STYLE на GWL_EXSTYLE. Примерно так:
    Code:
    var
      wnd: HWND;
      old_long: Integer;
    begin
      wnd := FindWindow('Notepad', nil);
      old_long := GetWindowLong(wnd, GWL_EXSTYLE);
      SetWindowLong(wnd, GWL_EXSTYLE, old_long or WS_EX_TOOLWINDOW);
    end;
    
     
    #4052 Nullsleep, 29 Aug 2009
    Last edited: 29 Aug 2009
    1 person likes this.
  13. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    Flenov, на сколько я понял (сделав бесконечный цикл) функция выполняется в потоке, потому что интерфейс формы не зависает, но проц грузит хорошо)
     
    1 person likes this.
  14. cremator (c)

    cremator (c) Elder - Старейшина

    Joined:
    20 Jun 2008
    Messages:
    258
    Likes Received:
    72
    Reputations:
    0
    sleep(1) надо в поток добавлять
     
  15. InfectedM

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

    Joined:
    4 Nov 2007
    Messages:
    155
    Likes Received:
    12
    Reputations:
    0
    ВОПРОС: как останавливать возобновлять поток созданный через:

    PHP:
    var
    th:cardinal;
       
    h:integer;
    begin            //

     
    := beginthread(nil1024, @sending1nil0th);
    end;
     
    #4055 InfectedM, 30 Aug 2009
    Last edited: 30 Aug 2009
  16. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    Я как раз наоборот пытался увидеть зависание на форме, так что Sleep() тут не нужен.
     
  17. Nullsleep

    Nullsleep Member

    Joined:
    2 Jun 2009
    Messages:
    67
    Likes Received:
    26
    Reputations:
    0
    InfectedM: beginthread все равно сводится к винапишной функции CreateThread, так что лучше использовать её. Тем более вместе с ней можно юзать SuspendThread и ResumeThread (приостановить и продолжить выполнение потока).
     
    #4057 Nullsleep, 30 Aug 2009
    Last edited: 30 Aug 2009
  18. dos999

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

    Joined:
    15 Feb 2008
    Messages:
    137
    Likes Received:
    24
    Reputations:
    0
    Полностью поддерживаю Nullsleep в его совете о использовании CreateThread но раз уж так хочется можно делать так:
    Code:
    var
      th:cardinal;
      h:integer;
    begin            //
      h := beginthread(nil, 1024, @sending1, nil, 0, th);
      SuspendThread(h);//приостановить
      ResumeThread(h);//продолжить
    end;   
     
  19. wolmer

    wolmer Member

    Joined:
    12 May 2009
    Messages:
    438
    Likes Received:
    97
    Reputations:
    9
    В мемо1:
    maska=aallalaalala;session=ashhasha;lala=2481;

    (кукисы, можно и запрос туда пихнуть, разницы не имеет для ниже приведенного кода)

    Код принятия кукисов:
    Code:
    function Tform1.CopyCookie(s,sBuff:string):string;
    var
    text:string;
    i:integer;
     Begin
      text:='';
      showmessage(inttostr(pos(s+'=',sBuff)));
      showmessage(inttostr(Length(sBuff)));
    //Посл символ у нас под номером 45
      For i:=pos(s+'=',sBuff) to Length(sBuff) Do
    //в i записываем откуда начинается фраза "what="
    //(В мемо1 у меня начинается фраза с 20 символа)
    //(в дальнейшем будет сокр МПК - МестоПоложениеКуки)
    //Дальше идем от МПК до символа ";" (когда сод. куки обрывается)
    //Но мы не знаем где будет находится символ ";"
    //Поэтому будем проходится от МПК до посл. символа sbuff (в намем случае до посл. символа memo1)
        Begin
          If sBuff[i]<>';' then text:=text+sBuff[i] else Break;
         //Тут мы сверяем текущий символ с символом ";"(окончание куки)
         //Если этого ";" символа нету то добавляем символ
         //В итоге как символ ";" встретился то у нас в переменной text будет кука (кука+значение куки)
         //и мы закончим проходится цикл так как уже кука у нас есть и нам не зачем дальше проходиться
        End;
      Result:=text;
     End;
    В Button1.OnClick пишем:

    Code:
    ShowMessage('Наша кука+значение куки: '+CopyCookie('What',Memo1.Lines.Text));
    Коменты можно убрать (расписал для новичков)

    План примерно таков:
    -Отправляем пакет (без кукисов)
    --Принимаем ответный пакет (ответный ответ придет с кукисами если отправляли на авторизацию пакет)

    -Отправляем пакет с кукисами, к примеру:
    Code:
      sendbuff :='GET vkontakte.ru/id1 ' HTTP/1.1'+ #13#10 +
                        'Host: vkontakte.ru'+ #13#10 +
                        'User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 AdCentriaIM/1.7 Firefox/2.0.0.14 WebMoney Advisor'+ #13#10 +
                        'Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5'+ #13#10 +
                        'Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3'+ #13#10 +
                        'Accept-Encoding: gzip,deflate'+ #13#10 +
                        'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7'+ #13#10 +
                        'Keep-Alive: 300'+ #13#10 +
                        'Connection: keep-alive'+ #13#10 +
                        'Referer: http://vkontakte.ru/index.php'+ #13#10 +
                        'Cookie: '+CopyCookie('remixchk',sBuff)+';'+' '+CopyCookie('remixmid',sBuff)+';'+' '+CopyCookie('remixemail',sBuff)+';'+' '+CopyCookie('remixpass',sBuff)+ #13#10+ #13#10;
    --Принимаем ответный пакет
     
    #4059 wolmer, 1 Sep 2009
    Last edited: 1 Sep 2009
    1 person likes this.
  20. righter

    righter New Member

    Joined:
    2 Sep 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Есть сайт толковый который хранит информацию о биржевых транзакциях - http://www.finam.ru/analysis/export/default.asp На звпрос пользователя он генерирует файл отчет, динамически. Есть потребность автоматизировать процесс т.е. з задаными парамертами скачивать данные для множества акций. Чтобы пограммка написанная на делфе акуратно копировала эти файлы в нужную мне папку. Наставте меня на путь вреный и легкий. Делфу знаю давно вебдизайн тоже, а вот такими вещами еще не занимался.
     
Thread Status:
Not open for further replies.