// 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





