[ 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. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    что-нть типа:
    Code:
    function DownloadFile(const Url: string): string;
    var
      NetHandle: HINTERNET;
      UrlHandle: HINTERNET;
      Buffer: array[0..1024] of char;
      BytesRead: cardinal;
    begin
      Result := '';
      NetHandle := InternetOpen('Delphi 7.x', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
    
      if Assigned(NetHandle) then
        begin
    
        UrlHandle := InternetOpenUrl(NetHandle, PChar(Url), nil, 0, INTERNET_FLAG_RELOAD, 0);
    
        if Assigned(UrlHandle) then
          { UrlHandle правильный? Начинаем загрузку } 
          begin 
          FillChar(Buffer, SizeOf(Buffer), 0); 
          repeat
            Result := Result + Buffer;
            FillChar(Buffer, SizeOf(Buffer), 0);
            InternetReadFile(UrlHandle, @Buffer, SizeOf(Buffer), BytesRead);
          until BytesRead = 0; 
          InternetCloseHandle(UrlHandle); 
          end 
        else 
          begin 
          { UrlHandle неправильный. Генерируем исключительную ситуацию. } 
          raise Exception.CreateFmt('Cannot open URL %s', [Url]); 
          end;
    
        InternetCloseHandle(NetHandle); 
        end 
      else 
        { NetHandle недопустимый. Генерируем исключительную ситуацию } 
        raise Exception.Create('Unable to initialize Wininet'); 
    end;
    В процессе размер в BytesRead..
    Конечно, не совсем то, но всё же...

    PS И не такое уж и гавно wininet :) А с сокетами работать надо ОсТоРоЖнО :)
     
  2. zl0y

    zl0y Banned

    Joined:
    13 Sep 2006
    Messages:
    371
    Likes Received:
    270
    Reputations:
    109
    У меня тоже самое уже есть раза 3 на wininet и 2 на winsock'e,кстати флаг надо ставить чтобы не писал в кеш! Просто надоело подгонять winsock под ответы серверов и коды типо 302 moved here and e.t.c думаю,надо просто сесть и написать это норм а не страдать хней с wininet'ом ;)



    ВОт тут то и пауза если сервак не пашет,думаю надо все делать через потоки т.к установить таймаут для коннекта мне не удалось.
     
  3. NetSter

    NetSter Moderator

    Joined:
    30 Jul 2007
    Messages:
    810
    Likes Received:
    414
    Reputations:
    62
    Доброго времени суток. есть вопросик.
    наведите пожалуйста пример написания функции на делфи, которая запускает программу или файл с помощью другой программы.
    на С++ я себе представил это так
    Code:
    spawnl (P_WAIT,"c:\\windows\\notepad.exe","","input.txt",NULL) ;
    нужно сделать тож самое только на Делфи.
    Заранее спасибо.
     
    _________________________
    1 person likes this.
  4. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Вот подробно:

    Функция ShellExecute

    Code:
    ShellExecute( hwnd: THandle, // указатель на родительское окно
    lpOperation: PChar, //выполняемая операция
    lpFile: PChar, // файл или папка
    lpParameters: PСhar, //строка параметров запускаемой программы
    lpDirectory: PChar, // директория по умолчанию
    nShowCmd: integer // состояние окна запущенной программы
    );

    Пример использования:


    Code:
    ShellExecute(hInstance,"open","Программа",
    "Файл", NULL, SW_SHOWNORMAL);
     
    #1444 De-visible, 29 Apr 2008
    Last edited: 29 Apr 2008
    1 person likes this.
  5. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Может просто добавить к notepad-у аргумент (место файла). Вот например так WinExec('c:\\windows\\notepad.exe c:\\input.txt',SW_SHOW);

    ЗЫ Если программа считывает аргументы при старте, то будет открывать как тебе нужно, иначе она просто откроется, как без аргумента.
     
    #1445 z01b, 29 Apr 2008
    Last edited: 29 Apr 2008
    3 people like this.
  6. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    Micro$oft не рекомендует пользоваться функцией winexec, она оставлена только для совместимости с 9x
    ShellExecute - что-то похожее
    Ни ту, ни другую функцию заставить работать нормально и правильно лично мне не удалось.
    Посему использую CreateProcess.
     
    1 person likes this.
  7. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    У меня с WinExec, проблем не возникало ...
     
  8. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Ха, а ты молодец!


    Функция CreateProcess

    Code:
    CreateProcess
    (lpApplicationName: PChar, // имя исполняемого модуля
    lpCommandLine: PChar, // строка параметров запускаемой программы
    lpProcessAttributes: TSecurityAttributes, // структура SECURITY_ATTRIBUTES процесса
    lpThreadAttributes: TSecurityAttributes, // структура SECURITY_ATTRIBUTES потока
    bInheritHandles: LongBool, // флаг наследования текущего процесса
    dwCreationFlags: Longword, // флаги способов создания процесса
    lpEnvironment: Pointer, // указатель на блок среды
    lpCurrentDirectory: PChar, // текущий диск и каталог
    lpStartupInfo:TStartupInfo, // структура STARTUPINFO
    lpProcessInformation: TProcessInformation // структура PROCESS_INFORMATION
    ): LongBool;

    Использование:
    Code:
    var
    i:LongBool
    i:=CreateProcess('Программа', ' файл', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);
    
    Code:
    [COLOR=Green]CreateProcess('C:WindowsSystem32 otepad.exe', ' c: eadme.txt', nil, nil, false, NORMAL_PRIORITY_CLASS, nil, nil, StartUpInfo, ProcessInfo);[/COLOR]
     
    #1448 De-visible, 29 Apr 2008
    Last edited: 29 Apr 2008
    1 person likes this.
  9. GSM™

    GSM™ Elder - Старейшина

    Joined:
    2 Nov 2007
    Messages:
    221
    Likes Received:
    31
    Reputations:
    6
    На вот эту строчку-
    if not WriteFile(hPort, S, StrLen(S), actual_bytes, nil) then begin
    а именно на это-
    actual_bytes
     
  10. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    что имено пишет, дай плз весь листинг ошибки.
     
  11. GSM™

    GSM™ Elder - Старейшина

    Joined:
    2 Nov 2007
    Messages:
    221
    Likes Received:
    31
    Reputations:
    6
    [Ошибка] TestRosh.pas(93): Types of actual and formal var parameters must be identical
    [Ошибка] TestRosh.pas(97): Undeclared identifier: 'Edit3'
    [Ошибка] TestRosh.pas(107): Undeclared identifier: 'PortCombo'
    [Ошибка] TestRosh.pas(107): 'END' expected but ')' found
    [Ошибка] TestRosh.pas(121): Undeclared identifier: 'PortCombo'
    [Ошибка] TestRosh.pas(121): 'END' expected but ')' found
    [Ошибка] TestRosh.pas(128): ';' expected but 'IF' found
    [Ошибка] TestRosh.pas(132): '.' expected but ';' found
    [Ошибка] TestRosh.pas(136): Undeclared identifier: 'Button2'
    [Ошибка] TestRosh.pas(142): Undeclared identifier: 'PortCombo'
    [Ошибка] TestRosh.pas(27): Unsatisfied forward or external declaration: 'TForm1.FormDestroy'
    [Фатальная Ошибка] Project1.dpr(5): Could not compile used unit 'TestRosh.pas'
     
  12. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    Если кинуть все необходимые компоненты то остается вот:

     
  13. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Gsm, залей куданить проект весь и я верну после чего ошибки исправлю.
     
  14. De-visible

    De-visible [NDC] Network develope c0ders

    Joined:
    6 Jan 2008
    Messages:
    916
    Likes Received:
    550
    Reputations:
    66
    http://slil.ru/25743679
     
  15. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Gsm, поменяй тип переменной actual_bytes на DWord и будет тебе счастие =)

    ЗЫ Это из за версии компайлера. Код был написан очень давно.
     
  16. GSM™

    GSM™ Elder - Старейшина

    Joined:
    2 Nov 2007
    Messages:
    221
    Likes Received:
    31
    Reputations:
    6
    to De-visible - не компилируется (выдает ту же самую ошибку)

    to z01b - при замене на DWord ругается на DWord


    И если можно скиньте какой нибудь пример работы с базой данных.
     
    #1456 GSM™, 30 Apr 2008
    Last edited by a moderator: 30 Apr 2008
  17. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Rакой у тебя компайлер(компилятор)? Я скомпил на Делфи 7 и все окей.
    Вот сылка на мой проект + ехе
    http://webfile.ru/1913462
     
    #1457 z01b, 30 Apr 2008
    Last edited by a moderator: 30 Apr 2008
  18. desTiny

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

    Joined:
    4 Feb 2007
    Messages:
    1,006
    Likes Received:
    444
    Reputations:
    94
    вместо dword'а надо в делфе писать longword


    Вот, кстати... Может хоть ты мне объяснишь, как файл с расширением .url запустить?
     
    #1458 desTiny, 30 Apr 2008
    Last edited by a moderator: 30 Apr 2008
  19. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    Код ужасный, но работает. Убил часик на нем. Сначало показалось что легко но не так то было =)
    Code:
    program Project2;
    
    {$APPTYPE CONSOLE}
    
    uses
      SysUtils;
    var
    f,outf:TextFile;
    b,a,a1:string;
    x1,x2,y1,y2,i:integer;
    bl:boolean;
    begin
    Assign(outf,'C:\\out.txt');
    Rewrite(outf);
    Assign(f,'C:\\file.xml');
    Reset(f);
    while not EOF(F)
     do begin
     while not EOLN(f) do
     begin
     read(f,a);
     end;
    readln(f);
    x1:=pos('<display-name>',a);
    x2:=pos('</display-name>',a);
    y1:=pos('<entry uri="sip:',a);
    y2:=pos('@sipnet.ru">',a);
    a1:=copy(a,x1+length('<display-name>'),x2-x1-length('<display-name>'));
    b:=copy(a,y1+length('<entry uri="sip:'),length(a)-y2);
    
    if y2<>0 then
    begin
    bl:=true;
    write(outf,'Телефон: ');
    write(outf,b+' ');
    end;
    
    if bl=true then
    if x1<>0 then  begin
    write(outf,'Жертва: ');
    writeln(outf,a1);
    write(outf);
    bl:=false
    end;
    
    end;
    close(outf);
    end.
    
    
    
    Вот такой результат выдает при парсинге твоего файла
    Code:
    Телефон: 74933193454 Жертва: Фомин
    Телефон: 74952595438 Жертва: Лена
    Телефон: 78616722508 Жертва: Глазастый
    
    ЗЫ Если что-то не то, значит у тебя в ряд больше 256 символов.
     
    #1459 z01b, 30 Apr 2008
    Last edited: 1 May 2008
    2 people like this.
  20. z01b

    z01b Муджахид

    Joined:
    5 Jan 2007
    Messages:
    494
    Likes Received:
    382
    Reputations:
    22
    залей куданить файл (что парсить надо) и дай сылку.
     
    #1460 z01b, 1 May 2008
    Last edited: 1 May 2008
    3 people like this.
Thread Status:
Not open for further replies.