Einzelnen Beitrag anzeigen

Benutzerbild von bjacke
bjacke

Registriert seit: 1. Aug 2004
Ort: Berlin
82 Beiträge
 
Delphi 7 Personal
 
#1

IdHttp zur Laufzeiterzeugen oder ein anderes Prob??

  Alt 20. Jan 2005, 14:41
Hallo,
ich habe Mal wieder ein Problem .
Ich will über IdHttp eine Datei aus dem Internet laden. Das hatte auf einem Formular auch super geklppt. Jetzt hab ich es in eine Eytra Unit geschopen und Muss irgendwie die Indy-Komponete zur Laufzeit erzeugen. Ich bekomme aber immer an einer Stelle einen Fehler und bin mir nicht sicher woran das liegt!

Der Spaß beginnt mit der procedure load .

Delphi-Quellcode:
unit update_unit;

interface

uses Windows, SysUtils, Classes, Forms, Controls, StdCtrls,
  Buttons, ExtCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
  IdTCPClient, IdHTTP,Dialogs,MSXML2_TLB,ShellApi,IniFiles;


    procedure load ;
    procedure readxml;
    procedure ini;

var
  xmlDoc: IXMLDOMDocument2;
  close_upd :boolean;
  URL,version:string;

implementation
uses unit1;

procedure readxml;
Var ivers,url_xml,force_update:IXMLDOMnode; internet_addr:string;
Begin
  xmlDoc:=CoDomDocument40.Create;

 xmlDoc.setProperty('NewParser',true); //Laden der XML
 xmlDoc.load('http://de.geocities.com/boincobserver/update.xml') ;

   if xmlDoc.parseError.errorCode = 0 then
   Begin
   ivers:= xmldoc.selectSingleNode('BOINC-Observer/files/actual_version/version') ;
   version:= ivers.text;
     if Form1.versnum.Caption=ivers.text then Begin Form1.check_upd.Caption:='no update alivable';close_upd:=true;End
     else
      Begin
      force_update:= xmldoc.selectSingleNode('BOINC-Observer/files/actual_version/force_update') ;
      URL_xml:=xmldoc.selectSingleNode('BOINC-Observer/files/actual_version/force_update_url') ;
      if force_update.text='yesthen URL:=url_xml.text
       else
        Begin
        url_xml:= xmldoc.selectSingleNode('BOINC-Observer/files/actual_version/progam_url') ;
        URL:=url_xml.text;
        End;
    close_upd:=false;
      End;
  End
  else close_upd:=true;

End;

procedure ini;
var Ini: TIniFile;
Begin
  try
    Ini:=TIniFile.Create(ExtractFileDir(Application.ExeName)+'\BOINC-OBSERVER.ini');
    Begin
    Ini.WriteString('update','to version',version);
    Ini.WriteBool('update','to do',true);
    End;
  except
  Ini.Free
  End;
End;


procedure load ;
Var stream:Tstream; file_size:string; IdHttp1:TIdHttp;
Begin

  IdHttp1 := IdHttp1.Create(nil);


Form1.check_upd.Caption:='try to connect'  ;

readxml;
if close_upd=false then
Begin
Form1.check_upd.Caption:='got data' ;
IdHTTP1.Head(URL); <--------------------------------- Die Url ist korrekt (mit ShowMessage überprüft)
  if MessageDlg('Download the files now? ['+IntToStr(round(IdHTTP1.Response.ContentLength /1048576))+' MB]', mtInformation, [mbYes, mbNo], 0)=mrYes then
 Begin
 stream := TFileStream.Create((ExtractFileDir(Application.ExeName)+'\update.zip'), fmCreate);
 Form1.check_upd.Caption:='downloading'  ;
 try
   IdHTTP1.Get(URL, stream);
  except
  on e: exception do
  ShowMessage('Error: ' + e.Message);
 end;
 stream.Free;
 Form1.check_upd.Caption:='updated';
 ini;
     if MessageDlg('Install the new version know or during the next start? (NOTE:BOINC-Observer will be short close!)', mtInformation, [mbYes, mbNo], 0)=mrYes then
       Begin

       Form1.Close;
       End

 End

 else Form1.check_upd.Caption:='aborted' ;

end

 else Form1.check_upd.Caption:='error'  ;



end;

end.
MfG bjacke

Das Ganze ist mehr als die Summe seiner Computerteile.
  Mit Zitat antworten Zitat