// Wenn man seine
Programme im Internet veröffentlicht, möchte man evtl. die [version] // was mein leicht
entsprechend der neuen Version von Hand eintragen kann. // ----------- Quelltext (geändert) --------------- program Kalender; uses Forms, SysUtils, Unit1 in 'Unit1.pas' {Form1}, UnitUpdate in 'UnitUpdate.pas' {UpdateForm}; {$R *.RES} var m: TModalresult = 0; s: string; begin Application.Initialize; //Application.CreateForm(TUpdateForm, UpdateForm); s := changefileext(extractfilename(application.exename), '.ini'); if UpdateForm.updaten(url + s, Version) then begin UpdateForm := TUpdateForm.create(application); UpdateForm.ShowModal; m := UpdateForm.ModalResult; UpdateForm.free; end; if m <> 1 then begin Application.CreateForm(TForm1, Form1); Application.Run; end; end.
unit UnitUpdate; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TUpdateForm = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; procedure FormCreate(Sender: TObject); procedure Label3Click(Sender: TObject); private { Private-Deklarationen } public function version2single(v: string): single; function updaten(url, aktuelleVersion: string): boolean; function laden(Source, Dest: string): Boolean; end; var UpdateForm: TUpdateForm; neu: string; Version: string = '3.2.a'; // siehe dazu auch: http://www.s170867368.online.de/delphi/version.php const url = 'http://www.s170867368.online.de/kalender/'; downloadFile = 'Kalender.zip'; implementation {$R *.DFM} uses URLMON, INIFILES, SHELLAPI; function TUpdateForm.version2single(v: string): single; var p, i: integer; vor, nach, s: string; begin result := 0; if v = '' then exit; i := 1; while i <= length(v) do begin if not (v[i] in ['0'..'9', '.']) then begin s := inttostr(ord(v[i])); delete(v, i, 1); insert(s, v, i); end; inc(i); end; p := pos('.', v); if p = 0 then begin vor := v; nach := '0'; end else begin vor := copy(v, 1, p - 1); if vor = '' then vor := '0'; nach := stringreplace(copy(v, p + 1, maxint), '.', '', [rfReplaceAll]); if nach = '' then nach := '0'; end; result := strtofloat(vor + ',' + nach); end; function TUpdateForm.laden(Source, Dest: string): Boolean; begin try Result := UrlDownloadToFile(nil, PChar(source), PChar(Dest), 0, nil) = 0; except Result := False; end; end; function TUpdateForm.updaten(url, aktuelleVersion: string): boolean; var pfad: string; versionNeu: TInifile; begin result := false; pfad := extractfilepath(application.exename); if ansilastchar(pfad) <> '\' then pfad := pfad + '\'; pfad := pfad + '~tmp~.ini'; if laden(url, pfad) then begin versionNeu := TiniFile.Create(pfad); neu := versionNeu.Readstring('version', 'version', aktuelleVersion); versionNeu.Free; result := version2single(aktuelleVersion) < version2single(neu); deletefile(pfad); end; end; procedure TUpdateForm.FormCreate(Sender: TObject); begin caption := 'Neue Programm-Version'; borderStyle := bsSingle; bordericons := [biSystemMenu]; setbounds((screen.width - width) div 2, (screen.height - height) div 2, width, height); Label1.Font.Style := [fsBold]; Label1.caption := 'Es ist eine neue Programm-Version verfügbar.'; Label2.caption := 'aktuell = ' + version + ' | neu = ' + neu; Label3.Font.Style := [fsUnderline]; Label3.Cursor := crHandPoint; Label3.Font.color := clBlue; Label3.caption := url + downloadFile; end; procedure TUpdateForm.Label3Click(Sender: TObject); begin if shellexecute(handle, 'open', PChar(label3.caption), nil, nil, 1) > 32 then modalresult := mrOk else begin visible := false; application.processmessages; showmessage('Fehler bei Aufruf des Browsers!'); modalresult := mrCancel; end; end; end. |
Zugriffe seit 6.9.2001 auf Delphi-Ecke