Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   TMSWebUpdate - eine neue WebUpdate-Komponente (https://www.delphipraxis.net/109301-tmswebupdate-eine-neue-webupdate-komponente.html)

Marco Steinebach 27. Feb 2008 18:42


TMSWebUpdate - eine neue WebUpdate-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Listers,
vor gut einer Woche hatte ich entgültig die Nase voll. Ich suchte eine Komponente für ein automatisches WebUpdate, Internet-Update, ganz wie ihr wollt.
Entweder es gab lauter teures Zeug, oder Freeware, die zwar gut, aber meist recht wenig anpassbar war, dann noch ein paar Schnipsel hier, ein Textchen da, ein Code-Teilchen wo anders....
Also gut, selber schreiben...
Und hier ist das Ergebnis.

TMSWebUpdate ist ganz sicher nicht neu, aber
- Freeware mit Source
- Einfach zu integrieren
- Anpassbar, also keine Formulare die schon mit dabei sind
- Flexibel, was die Anzahl der runterzuladenden Dateien angeht
- Flexibel beim format der Steuerdatei auf dem Server.
- Nicht erst ab Delphi 2006 enterprise lauffähig. ;-)
- Auf Indy basierend, also geht ab Delphi 5.


Webupdate schaut auf einem Server in einer Infodatei nach, ob eine neuere Version, als die aktuelle, vorhanden ist. Falls ja, können eine, oder mehrere Dateien, heruntergeladen, und ggf. eine davon als Update ausgeführt werden.

Dazu einfach die Komponente auf die form.
Die zwei eigenschaften
UpdateURL und IniName müssen natürlich ausgefüllt werden.
UpdateUrl ist die Adresse zur ini-datei also z.B.
www.meine-seite.de/Software
(http und / am ende werden automatisch ergänzt)
IniName ist der Name der Datei, in der die Infos über ein evtl. Update stehen, also beispielsweise
MeinProg_Update.html

Und MeinProg_Update.html könnte dann ungefähr so aussehen:
[Version]
Major=1
Minor=0
Release=0
Build=99

[File001]
Name=MeinProg_Update.exe
Start=1

[File002]
name=EinSound.wav
Path=sounds

[New]
Ein Fehler beim entgültigen löschen von Dateien wurde beseitigt.

Mehrere kleine Sachen sind jetzt leider kaput. Ich bin noch dran! ;-)
...

Alles was nach dem Schlüsselwort
[New]
steht, wird gnadenlos als WhatsNew angezeigt, dann zu finden in der WhatsNewListe der Komponente.

Ach ja, die Anweisung zur Prüfung heißt
CheckForUpdates.
Das war’s schon, und 6 Ereignisse
OnUpdatefound
OnNoUpdateFound
OnDownloadProgress
OnDownloadComplete
OnNextFile und
OnError
Gibt’s natürlich auch noch.

So. und nun wünsche ich viel spaß beim ausprobieren, testen, einsetzen, was auch immer. Ich würde mich über verbesserungsvorschläge, wünsche, anregungen, kritik, besonders über Lob, natürlich sehr freuen. Wenn bedarf ist, können wir auch gerne ein Projekt daraus machen.

Viele Grüße
Marco

webcss 27. Feb 2008 18:54

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hört sich gut an,einfach und geradeheraus :thumb:
Geht's auch ohne TComponent-heritage, also einfach als TObject? Wäre schon cool...... 8)

Crazy Ivan 27. Feb 2008 18:57

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
kann man die heruntergeladenen dateien auch in ein anderes verzeichnis packen, bespielsweise "%MeineAnwendung%\Resourcen\blah\" ?? oder müsste das per update.exe im temp geschehen?

ansonsten: supi :D

Marco Steinebach 27. Feb 2008 21:23

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hi WebCSS,
Zitat:

Zitat von webcss
Geht's auch ohne TComponent-heritage, also einfach als TObject? Wäre schon cool...... 8)

Schau ich mir morgen an. Hilf mir mal: wo wäre denn der Witz dabei?

webcss 27. Feb 2008 22:47

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von Marco Steinebach
Schau ich mir morgen an. Hilf mir mal: wo wäre denn der Witz dabei?

Naja, zum einen finde ich es persönlich bei nichtvisuellen Komponenten sinnlos, den ganzen TComponent overhead mitzuschleppen, vorAlle,wenn man z.B. Konsolenanwendungen schreibt. Zum anderen haben Leute wie ich z.B. :oops:, die TurboExplorer nutzen, eh keinen Effekt davon, da Fremdkomponenten nicht installiert werden können :lol:

Ist eigentlich auch ne einfache Geschichte: einfach per Compiler-Switch die class auf TComponent oder TObject, und den Constructor ebenso, das ist alles...

Schau es Dir einfach mal an.

Marco Steinebach 28. Feb 2008 19:07

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo again,

so. Dann machen wir mal ‚n kleines ChangeLog auf:
- die Klasse TWebUpdate kann jetzt als TComponent oder TObject kompiliert werden (Compilerdirektive). Danke an WebCss.
- Es wird in der Info-Datei zwischen einem direkten und indirekten Update unterschieden. Beim direkten update wird die anwendung geschlossen und dann eine batchdatei ausgeführt, die die alte anwendung löscht, (natürlich mit Pause vorher), die update umbenennt und sie dann wieder startet. Beim indirekten wird die als erstes angegebene Datei einfach ausgeführt, für ein Update-Programm, beispielsweise mit Inno Setup erstellt.
- Es ist jetzt für jede Datei, die ins Programmverzeichnis soll, möglich, sie in ein Unterverzeichnis des Programmverzeichnisses zu packen, die werden auch automatisch erstellt. Vielen dank an Crazy Ivan. Das geht nur im Programmverzeichnis, damit’s erst gar kein gehampel mit Vista gibt, und im Temp-Verzeichnis würde das, meiner Meinung nach, keinen wirklichen sinn machen.
- Eine ReadMe ist inzwischen auch da!
- Und auch ein Demo-Programm für’s direkte Update, das indirekte kommt noch. Ach ja, die url www.odissa.de/Software/UpdateTest_Update.html funktioniert wirklich, die liegt auf meiner Homepage.

Schaut’s euch mal an, aktualisiert, wie immer, im ersten Beitrag. Bin weiter gespannt auf Verbesserunsvorschläge, Wünsche kritik und alles andere.

Viele grüße
Marco

webcss 28. Feb 2008 22:13

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
super, dankeschön, werd's demnächst mal testen!
eine sache fällt mir noch ein: ne liste mit downloadservern, die nach und nach abgeklappert werden, ähnlich wie z.B. Antivir das macht....

Pif 15. Mär 2008 21:41

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo
Ich bin noch anfänger und ich hab ein problem. Ich bekomm die komponente nicht installiert. Ich hab delphi 2007, aber wenn ich sie auf "neue vlc komponente" gehe und dann alles angebe passiert nichts. Was muss ich denn machen um die Komponente richtig zu installieren?

wäre nett wenn mir das jemand sagen könnte, denn ich werde aus dem readme net schlau

Pfoto 15. Mär 2008 22:10

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo und Willkommen Pif,

du musst eine Komponente in ein Package installieren,
das dient quasi als Conteiner für mehrere Komponenten.
Du könntest über "Neu" ein neues Package erstellen
oder ein vorhandenes nehmen.

Denke dann auch daran, den Suchpfad anzupassen
(unter Tools > Optionen > Delphi-Optionen)

Notfalls kannst du die Komponente auch erst zur Laufzeit
erstellen, dann musst du sie nicht in die Palette installieren.


Gruß
Pfoto

Pif 15. Mär 2008 22:35

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo Pfoto
Danke für deine hilfe, das mit dem package habsch begriffen.
aber wenn ich das installieren will kommt ein fehler im quelltext der komponente

Delphi-Quellcode:
fIdHTTP.OnWork := InternalOnWork;
[DCC Fehler] WebUpdateThread.pas(39): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Mach ich da was falsch oder liegt es am quellcode?

Pfoto 16. Mär 2008 08:13

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo Pif,

Delphi-Quellcode:
fIdHTTP.OnWork := InternalOnWork;
bedeuted, dass beim das Ereignis OnWork von der Methode
InternalOnWork aufgefangen wird.

Die Parameter des Types von OnWork und die Parameter
der Methode von InternalOnWork müssen identisch sein.
Das ist nun vielleicht durch Versionsunterschiede
nicht mehr passend.

Die Methode
Delphi-Quellcode:
procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
müsste also angepasst werden.

Ich habe die Indy-Komponenten nicht installiert, deswegen
kann ich ab hier nicht weiterhelfen. Sorry.



Gruß
Pfoto

Pif 16. Mär 2008 09:35

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Trotzdem Danke Pfoto.
Ich scheine der einzige mit dem Problem zusein. Ich werd mal schaun ob ich es gefixed bekomme.

MfG Pif

Marco Steinebach 28. Mär 2008 17:50

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,
Es gibt eine neue Version. Geändert hat sich lediglich, daß das Demo für das indirekte Update nicht mehr kommt, weil sich das, meiner Meinung nach, selbst erklärt.
Außerdem mußte ich die Demo-Update-Dateien auf meinem Server umziehen, deshalb gibts 'ne neue Version.
Viel spaß damit und viele Grüße
Marco

jfheins 28. Mär 2008 21:04

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Nur so: Normalerweise sind die Bezeichner (von den Events) Englisch ;)

Ich hab mich beim ersten durchlesen gewundert, wegen dem denglisch (OnUpdateGefunden :mrgreen: )

Delphi Code Anfänger 30. Mär 2008 16:01

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von Pif
Hallo Pfoto
Danke für deine hilfe, das mit dem package habsch begriffen.
aber wenn ich das installieren will kommt ein fehler im quelltext der komponente

Delphi-Quellcode:
fIdHTTP.OnWork := InternalOnWork;
[DCC Fehler] WebUpdateThread.pas(39): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Mach ich da was falsch oder liegt es am quellcode?

Ich bekomme genau den gleichen Fehler.

Ich weiß nicht wie ich es beheben kann. Kann mir vielleicht einer helfen?

Marco Steinebach 8. Apr 2008 18:08

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,
Zitat:

Zitat von Delphi Code Anfänger
Zitat:

Zitat von Pif
Danke für deine hilfe, das mit dem package habsch begriffen.
aber wenn ich das installieren will kommt ein fehler im quelltext der komponente

Delphi-Quellcode:
fIdHTTP.OnWork := InternalOnWork;
[DCC Fehler] WebUpdateThread.pas(39): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Mach ich da was falsch oder liegt es am quellcode?

Ich bekomme genau den gleichen Fehler.

Ich weiß nicht wie ich es beheben kann. Kann mir vielleicht einer helfen?

Ich kann's versuchen! ;-)
Was sagt denn die Indy hilfe, zum aufbau von OnWork, also wie sieht bei dir die Parameterliste aus?
Viele Grüße
Marco

Marco Steinebach 8. Apr 2008 18:11

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,
Es gibt eine neue Version, weil die Batch-Datei, nach einem direkten Update, nicht ordnungsgemäß gelöscht wurde.
Des weiteren heißt die Prozedur zum starten der Update-Suche, ganz nach Marco-Denglisch:
SucheNachUpdates.
Viele Grüße
Marco

Marco Steinebach 18. Apr 2008 20:53

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo zusammen,
Es gibt, mal wieder, eine neue Version (1.00.5).
Neuerungen sind das Ereignis OnKeinUpdateGefunden, selbsterklärend und eine Prozedur Namens Neustart. Wenn nämlich der Neustart der Anwendung, nach einem Update, nicht gleich, sondern erst später durchgeführt werden soll, hatte man, vorher, ein Problem.

Viel Spaß damit und wie gesagt: für Kritiken und Anregungen bin ich jederzeit offen!
Viele Grüße
Marco

fylo 27. Apr 2008 00:29

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,

da ich meine Updates auf einem SSL-Webserver liegen habe, hab ich deine Komponente um SSL-Fähigkeit erweitert.

Das notwendige OpenSSL-Update für Delphi/Indy gibt es hier.

Hier geänderte der Code:
Delphi-Quellcode:
uses
  ...,IdSSLOpenSSL;

TWebUpdate = class(TComponent)
  private
    { Private-Deklarationen }
    ...
    fSSLIOHandler: TIdSSLIOHandlerSocket;
    ...
end;

constructor TWebUpdate.Create;
begin
  ...
  fSSLIOHandler := TIdSSLIOHandlerSocket.Create(self);
  fSSLIOHandler.SSLOptions.Method := sslvSSLv3;
  fIdHTTP.IOHandler := fSSLIOHandler;
  ...
end;

procedure TWebUpdate.SetUpdateURL(const value: string);
begin
  ...
    if copy (UpperCase (fUpdateUrl), 1, 4) <> 'HTTP' then   // <-- damit man auch https eingeben kann
      fUpdateURL := 'http://' + fUpdateURL;
  ...
end;
Das war's auch schon. Bei mir funktioniert das für meine Zwecke :lol:

Svenkan 12. Mai 2008 20:41

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Gefällt mir schonmal ganz gut, aber ich hab 2 Probleme:

1. Ich lasse die Dateien in das Unterverzeichnis '\downloads' laden. Nachdem das Update-Programm geschlossen wird, werden diese Dateien allerdings nicht ins Hauptverzeichnis verschoben.
2. Fällt bei mir AWorkCount in den negativen Bereich. Da ich eigtl einen Fortschrittsbalken einbauen wollte, kann ich das erstmal vergessen, da mir negative Werte rein gar nichts bringen. Denn so kann es bei größeren Dateien schnell den Anschein haben, dass der Download steckengeblieben ist.

Marco Steinebach 13. Mai 2008 18:46

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Huhu,
Zitat:

Zitat von Svenkan
Gefällt mir schonmal ganz gut,

Danke!
Zitat:

Zitat von Svenkan
aber ich hab 2 Probleme:

1. Ich lasse die Dateien in das Unterverzeichnis '\downloads' laden. Nachdem das Update-Programm geschlossen wird, werden diese Dateien allerdings nicht ins Hauptverzeichnis verschoben.

stimmt! Sollen sie auch nicht. Gedacht ist das runterladen in ein Unterverzeichnis beispielsweise für Sound-Dateien, Updates von Bildern o.ä.
Kannst du die Dateien, die du im Hauptverzeichnis brauchst, nicht gleich dorthin laden?
Zitat:

Zitat von Svenkan
2. Fällt bei mir AWorkCount in den negativen Bereich. Da ich eigtl einen Fortschrittsbalken einbauen wollte, kann ich das erstmal vergessen, da mir negative Werte rein gar nichts bringen. Denn so kann es bei größeren Dateien schnell den Anschein haben, dass der Download steckengeblieben ist.

ähm, der WorkCount ist der der Indy-Komponenten ... wann wird der denn negativ?
Grüße
Marco

Marco Steinebach 17. Mai 2008 18:57

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo Listers,
Es gibt eine Neue Version der WebUpdate-Komponente, V1.01.0.
Es hat sich einiges Neue getan.
An dieser Stelle ein Dank an Fylo und Svenkan für die Ideen.
Das SSL gibt's im nächsten update.

Neuerungen:
Für jede, in der Versionsdatei angegebene Datei, gilt:
ist ein Pfad angegeben, wird die Datei beim Herunterladen
dort hinein kopiert. (wie gehabt).
Ist
Pfad=
angegeben, oder wird die Angabe schlicht weggelassen, wird die Datei in ein Unterverzeichnis, unterhalb des Programmverzeichnisses, mit dem Namen WebUpdateDateien kopiert.
All diese Dateien werden, nach Programmende, ins eigentliche Programmverzeichnis kopiert.
Das hat den vorteil, daß auch mehrere Dateien, beispielsweise dlls, im Programmverzeichnis ersetzt werden können.
Wird z.B.
Pfad=sound
angegeben, wird die Datei ins Verzeichnis sound\ unterhalb des eigentlichen Programmverzeichnisses kopiert.
So kann, weiterhin, eine Image, sound,-...-Datei ersetzt werden.
Die erste datei, die den Zusatz
Start=1
hat, wird von der Batch-Datei als letzte Aktion ausgeführt.
Auf diese Weise, kann das Programm sofort nach dem Update automatisch wieder neu gestartet werden.
Schaut euch auch das Beispiel im demo an.
Das bringt u.a. den enormen vorteil, daß man als neue Programmversion schlicht die Programmdatei benutzen kann, und die nicht umständlich erst umbenennen muß.

Die Section
[Einstellungen]
samt
[DirektesUpdate]
entfällt dadurch komplett.

Um ein indirektes Update, also das Ganze über ein setup.exe durchzuführen, sieht die Sektion für Datei001 dann so aus:
[Datei001]
name=setup.exe
; die eigentliche Update-Datei, als Setup verpackt.
Pfad=
; wird ins Programmverzeichnis kopiert.
Start=1
; wird, nach dem alles kopiert ist, ausgeführt.

Hier bleibt dem Programmierer lediglich, die Setup.exe nach Programmstart von Hand zu löschen, da WebUpdate nicht weiß, daß es sich um eine Update-Datei handelt.
Also z.B.
Code:
UpdateName := ExtractFilePath (Application.ExeName) + 'setup.exe';
If FileExists (UpdateName) then
  DeleteFile (UpdateName);
Die Batchdatei entfernt, um keinen Müll zu hinterlassen, gnadenlos alle Dateien in
WebUpdateDateien
und auch das verzeichnis selbst.

Ebenso wurden das Demo und die Doku ein wenig überarbeitet - ich hoffe,zum Besseren hin.

So. Ich warte, wieder, auf Lob, Kritik, Anregungen und sowas schönes alles!
Einen schönen Abend!
Marco
p.s.: ach ja, ;-), geänderte Version, wie immer, im ersten Beitrag.

Pif 17. Mai 2008 22:10

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Zitat:

Zitat von Marco Steinebach
Hallo,
Zitat:

Zitat von Delphi Code Anfänger
Zitat:

Zitat von Pif
Danke für deine hilfe, das mit dem package habsch begriffen.
aber wenn ich das installieren will kommt ein fehler im quelltext der komponente

Delphi-Quellcode:
fIdHTTP.OnWork := InternalOnWork;
[DCC Fehler] WebUpdateThread.pas(39): E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'

Mach ich da was falsch oder liegt es am quellcode?

Ich bekomme genau den gleichen Fehler.

Ich weiß nicht wie ich es beheben kann. Kann mir vielleicht einer helfen?


Also ich bekomm die Komponente nicht richtig installiert. Ka wieso ... -.- ich machn package und wenn ichs dann installieren will kommt der oben genannte fehler.

Was genau brauchst du um mir zuhelfen Marco? ^^

FAlter 17. Mai 2008 22:21

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hi,

hört sich an wie unterschiedliche Indy-Versionen.

Mfg
FAlter

Pif 17. Mai 2008 23:30

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Was kann ich da machen?

Marco Steinebach 18. Mai 2008 08:22

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo,
Jetzt geht mir dieser Fehler wirklich auf den Geist. ;-) Den werden wir doch irgendwie behoben kriegen!!!
Zitat:

Zitat von Pif
Was kann ich da machen?

Entweder in der Hilfe nachschlagen, oder, eine neue Anwendung erstellen, ein TIDHTTP auf die Form legen, ein OnWork definieren und mir den Procedure-Kopf schicken, damit man mal die, bestimmt unterschiedlichen, Parameter angleichen kann.

Aber jetzt hab ich 'ne Frage: wie kann ich feststellen, welche Indy-Version läuft, also z.B. Compiler-Schalter, oder geht sowas mit Overload?
Viele Grüße
Marco

Pif 18. Mai 2008 15:50

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
    IdHTTP1: TIdHTTP;
    procedure IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
      AWorkCount: Integer);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.IdHTTP1Work(ASender: TObject; AWorkMode: TWorkMode;
  AWorkCount: Integer);
begin

end;

end.
Also ich bin jetzt nich so der Delphi-Pro. Ich hoffe du meinst das so. Ich hab ne neue Anwendung gemacht dieses TIDHTTP draufgezogen und dann onwork definiert...

Das ist der Code (oben). "TWorkMode" wird mir als nicht deklarierter Bezeichner angezeigt.


Ich hoffe ich kann dir helfen ...

Marco Steinebach 18. Mai 2008 16:23

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Huhu Pif,
Zitat:

Zitat von Pif
Also ich bin jetzt nich so der Delphi-Pro.
Ich hoffe du meinst das so. Ich hab ne neue Anwendung gemacht dieses
TIDHTTP draufgezogen und dann onwork definiert...

Ja genau, das meinte ich. Ich hab den Fehler gefunden, kleines Wort, große Wirkung.
Ich häng dir hier mal eine geänderte WebUpdateThread.pas dran. Die bitte mal drüberkopieren und mir sagen, ob's jetzt geht!
Dank dir und viele Grüße
Marco

Pif 18. Mai 2008 20:29

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Ich muss dich enttäuschen.... Also ich bekomme den gleichen fehler immernoch. :wall:

Vllt. mache ich ja auch was falsch beim installieren.

Ich mache ein neues Package. Dann füge ich unter "Enthält" WebUpdate.pas und WebUpdateThread.pas hinzu.
Dann mach ich aufs Package rechtsklich und dann installieren.

Dabei bringt er mir dann den fehler!

MfG Pif

Marco Steinebach 18. Mai 2008 20:48

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Huhu,
Zitat:

Zitat von Pif
Ich muss dich enttäuschen....

Das gibt's doch gar nicht. Ich hab noch 'ne bitte: in der WebUpdateThread.pas gibt es eine Zeile
Delphi-Quellcode:
procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode; {$IFNDEF Indy100} const {$ENDIF} AWorkCount: Integer);
Ändere die doch bitte mal so, daß das ganze {$ifndef} draußen ist, also die Zeile so aussieht:
Delphi-Quellcode:
procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode; AWorkCount: Integer);
Das gleiche gibt es dann weiter unten nocheinmal, bitte genauso verfahren.
Klappt es jetzt?
Wenn du mir hilfst, wär' das echt klasse!
Viele Grüße
Marco

Pif 18. Mai 2008 21:00

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo.
Ich helf dir gerne, nur kann ich die Zeile nicht finden. Bzw sieht sie bei mir anders aus.

So sieht meine WebUpdateThread.pas aus:

Delphi-Quellcode:
unit WebUpdateThread;

interface

uses
  classes, IdComponent, IdHTTP;

type
  TOnWorkEvent = procedure(Sender: TThread; AWorkCount: Integer) of object;
  TDownloadThread = Class (TThread)
    private
      fIdHTTP: TIdHTTP;
      fName: string; // Name einer herunterzuladenden Datei
      fPfad: string; // wohin soll die Datei auf Platte gespeichert werden
      fURL: string; // URL der Datei
      fWorkCount: integer;
      fOnWorkEvent: TOnWorkEvent;
      procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
      procedure DoNotifyWork;
    protected
      procedure execute; override;
    public
      property name: string read fName write fName;
      property Pfad: string read fPfad write fPfad;
      property URL: string read fURL write fURL;
      property OnWork: TOnWorkEvent read FOnWorkEvent write FOnWorkEvent;
  end;

implementation

uses
  SysUtils;

procedure TDownloadThread.Execute;
var
  fs: TFileStream;
begin
  fIdHTTP := TIdHTTP.Create(nil);
  fIdHTTP.OnWork := InternalOnWork;
  fs := TFileStream.Create (fPfad + fName, fmCreate or fmShareExclusive);
  try
    fIdHTTP.Get(fURL + fName, fs);
  finally
    fs.Free;
    fIdHTTP.Free;
  end;
end;

procedure TDownloadThread.InternalOnWork(Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
begin
  FWorkCount := AWorkCount;
  Synchronize(DoNotifyWork);
end;

procedure TDownloadThread.DoNotifyWork;
begin
  if Assigned(OnWork) then
    OnWork (Self, FWorkCount);
end;

end.

Marco Steinebach 18. Mai 2008 21:05

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Huhu Pif,
aaah, ich hatte im Beitrag davor, noch 'ne geänderte Version gepostet, aber die vergiß mal. ;-)
okay:
Die Zeile heißt
Delphi-Quellcode:
procedure InternalOnWork (Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer);
das
Delphi-Quellcode:
const
vor dem aWorkCount muß raus, und unten auch nochmal.
Jetzt sollte es gehen ...
Hoffnungsvolle Grüße
Marco

Pif 18. Mai 2008 21:10

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
JAWOLLLLL

Es geht =) n1 Arbeit.

Besten Dank!

MfG Pif

Marco Steinebach 18. Mai 2008 21:16

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Huhu,
Zitat:

Zitat von Pif
JAWOLLLLL

Es geht =) n1 Arbeit.

Na gottseidank! ;-)
Jetzt muß ich's nur noch verallgemeinern.
Viel Spaß beim testen, morgen oder übermorgen sollte es 'ne Version geben, die das schon drin hat.
Viele Grüße
Marco

Pif 22. Mai 2008 20:22

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Wie siehtsn mit der neuen Version aus?

Marco Steinebach 22. Jun 2008 21:40

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hallo zusammen,
... und hier ist V1.01.1.
Neuerungen:
Das Ereignis OnFehler tritt auf, wenn z.B. keine Verbindung zum Internet hergestellt werden kann, oder ein anderer Fehler auftritt.
Ebenso wurden die notwendigen Compiler-Schalter in die WebUpdate.inc ausgelagert.
Ein zweiter Schalter
Indey10
ist dazu gekommen. Der Muß gesetzt werden, wenn Indy10 eingesetzt wird.
Tut mir leid, daß das jeder von Hand machen muß, aber ich hab absolut nicht rausfinden können, wie man's Programmseitig ermitteln kann.
Viel Spaß beim Testen und einen schönen Abend
Marco

Assertor 22. Jun 2008 22:30

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Hi Marco,

Zitat:

Zitat von Marco Steinebach
Ein zweiter Schalter
Indy10
ist dazu gekommen. Der Muß gesetzt werden, wenn Indy10 eingesetzt wird.
Tut mir leid, daß das jeder von Hand machen muß, aber ich hab absolut nicht rausfinden können, wie man's Programmseitig ermitteln kann.

Delphi-Quellcode:
{$IFDEF INDY100}
Wird in IdGlobal.pas per IdCompilerDefines.inc gesetzt. Also einfach IdGlobal einbinden und per IFDEF prüfen.

Gruß Assertor

Diamondback2007 23. Jun 2008 05:03

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Also ich muss sagen, deine Komponente gefällt mir richtig gut :)
Ich habe sie direkt mal in mein aktuelles Projekt eingebaut.
Allerdings vermisse ich sehr einen funktionierenden Fortschritt.
Dass das Progress nicht funktioniert wurde ja schon angesprochen.
Außerdem wäre eine Anzeige der Dateigrößen schön :)

gruß

Diamondback2007 24. Jun 2008 23:36

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Ein weiteres nettes Feature wäre die Anzeige aller zu downloadeden Dateien und ein Event sobald eine Datei fertig ist. Als Parameter dann den Namen der Datei. Das ganze könnte man dann schön in ein Log einbauen.

Diamondback2007 24. Jun 2008 23:55

Re: TWebUpdate - eine neue WebUpdate-Komponente
 
Ah, ich sehe schon, das mit der Dateiliste gibt es wohl schon, tut mir leid.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:20 Uhr.
Seite 1 von 4  1 23     Letzte »    

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz