|
Registriert seit: 14. Mai 2013 42 Beiträge |
#1
Bitte schlagt mich nicht das ich euch mit so nem riesen Batzen an Code auf einmal zuballer^^
Ich wollte nur einmal die Profis unter euch ansprechen wie gut oder wie grässlich mein Code denn zu lesen ist und ob es vielleicht Verbesserungsvorschläge gibt. Hauptsächlich geht es um die Form des Codes, es gibt von den Funktionen her bestimmt auch Verbesserungen aber damit soll sich hier nun keiner auseinander schlagen müssen (sowas kann man niemanden zumuten xD)^^ Ich bin offen für Zuckerbrot und Peitschen ![]() Ps. Es sei dazu gesagt das es mein allererster Code ist und für ein Setup gedacht ist das ich mit dem Programm "Inno Setup" erstellt habe^^
Delphi-Quellcode:
var //Globale Variablenvergabe
UserDirPageCAE : TInputDirWizardPage; DOSBoxConf : TStringList; GPSDirCheckBox : TRadioButton; SplashImage: TBitmapImage; SplashForm: TForm; a, b, c, d : word; SetupMajor, SetupMinor, SavedMajor, SavedMinor : dword; UserFolderCAE, tmp, SplashFileName, DOSBoxCAE2000Path, DOSBoxCAE2000UninstallString, DOSBoxCAE2000UninstallPath, DOSBoxCAE2000UninstallName, DOSBoxCAE2000UninstallPathRemovedQuotes, DOSBoxCAE2000UninstallNameRemovedQuotes, DOSBoxCAE2000UninstallStringRemovedQuotes, CAE2000Path, GPSPath, GetCAE2000Path : string; GPSDirCheckBoxChecked, ResultDOSBoxCAE2000PathCheck, ResultAktuelleAppFound, ResultDOSBoxCAE2000DontDeinstall : boolean; I: Integer; function CreateDWord(const Hi, Lo: word): dword; //Registry-Schlüssel für die Versionsnummer begin Result := (Hi shl 16) or Lo; end; function DecodeVersion(const dwMajor, dwMinor: dword): string; //Entschlüsselung der Versionsnummer begin a := word(dwMajor shr 16); b := word(dwMajor and not $ffff0000); c := word(dwMinor shr 16); d := word(dwMinor and not $ffff0000); Result := Format('%d.%d.%d.%d',[a,b,c,d]) end; function IsSetupNewer: boolean; //Versionsabgleich der vorhandenen Installation zur neuen Installation var ResultCode : integer; begin if (not RegQueryDWordValue(HKLM,'{#UNINSTKEY}','MajorVer', SavedMajor)) or (not RegQueryDWordValue(HKLM,'{#UNINSTKEY}','MinorVer', SavedMinor)) then begin if (RegQueryStringValue(HKLM,'{#UNINSTKEY}', 'UninstallString',tmp)) and (tmp <> '') and (fileexists(tmp)) then begin Result := (MsgBox(ExpandConstant('{cm:NotVerifiedVersionFound}'),mbConfirmation,MB_YESNO or MB_DEFBUTTON2) = IDYES); exit; end; end; SetupMajor := CreateDWord({#MAJOR},{#MINOR}); SetupMinor := CreateDWord({#RELEASE},{#BUILD}); //Neuere Version ist installiert Result := (SetupMajor > SavedMajor) or ((SetupMajor = SavedMajor) and (SetupMinor >= SavedMinor)); //Gleiche Version ist bereits installiert ResultAktuelleAppFound := (SetupMajor = SavedMajor) or ((SetupMajor = SavedMajor) and (SetupMinor = SavedMinor)); //Ermitteln und Umformen des Deinstallationspfades RegQueryStringValue(HKLM,'{#UNINSTKEY}','UninstallString',DOSBoxCAE2000UninstallString); DOSBoxCAE2000UninstallPath := (ExtractFileDir(DOSBoxCAE2000UninstallString) + '\' + '"'); DOSBoxCAE2000UninstallName := ('"' + ExtractFileName(DOSBoxCAE2000UninstallString)); DOSBoxCAE2000UninstallStringRemovedQuotes := RemoveQuotes(DOSBoxCAE2000UninstallString); DOSBoxCAE2000UninstallPathRemovedQuotes := RemoveQuotes(DOSBoxCAE2000UninstallPath); DOSBoxCAE2000UninstallNameRemovedQuotes := RemoveQuotes(DOSBoxCAE2000UninstallName); if not Result then begin if RegQueryStringValue(HKLM,'{#UNINSTKEY}','InstallLocation',DOSBoxCAE2000Path) then begin result := DirExists(DOSBoxCAE2000Path); end; if not Result then begin //Installationspfad der vorhandenen Installation kann nicht ermittelt werden MsgBox(ExpandConstant('{cm:DOSBoxPathNotFound}'),mbError,MB_OK); //Abbruch der Installation wenn der Pfad akteuelle Installationspfad nicht ermittelt werden konnte ResultDOSBoxCAE2000PathCheck := false; end; //Messagebox das eine aktuellere Version installiert ist if MsgBox(ExpandConstant('{cm:NewerAppFound}'),mbError,MB_YESNO or MB_DEFBUTTON2) = IDYES then begin //Silent-Ausführung der Deinstallation wenn aktuellere Version installiert ist und Benutzer dem zustimmte Exec(ExpandConstant(DOSBoxCAE2000UninstallStringRemovedQuotes),'/SILENT','',SW_SHOW,ewWaitUntilTerminated,ResultCode); end else //Abbruch des Setups sobald der Benutzer sich gegen eine Deinstallation der aktuellen Version entscheidet ResultDOSBoxCAE2000DontDeinstall := true; end; if ResultAktuelleAppFound = true then begin //Messagebox das die aktuellere Version gleich der zu installierenden ist MsgBox(Format(ExpandConstant('{cm:AktuelleAppFound}'),[DecodeVersion(SavedMajor,SavedMinor)]),mbConfirmation,MB_OK); end; end; function SaveVersionInfo: boolean; //Aktuelle Versionsnummer in die Registry schreiben begin Result := (RegWriteDWordValue(HKLM,'{#UNINSTKEY}','MajorVer', CreateDWord({#MAJOR},{#MINOR}))) and (RegWriteDWordValue(HKLM,'{#UNINSTKEY}','MinorVer', CreateDWord({#RELEASE},{#BUILD}))); end; function InitializeSetup: boolean; begin UserFolderCAE := ''; Result := true; Result := IsSetupNewer; if ResultDOSBoxCAE2000PathCheck = true then //Abbruchfunktion wenn der aktuelle Installationspfad nicht \ ermittelt werden konnte begin result := false; end; if ResultDOSBoxCAE2000DontDeinstall = true then //Abbruchfunktion wenn der Benutzer sich gegen eine \ Deinstallation entschieden hat begin result := false; end; if ResultAktuelleAppFound = true then //Abbruchfunktion wenn bereits die aktuelle Version installiert ist begin result := false; end; end; function InstallCae(Param:String):String; //Schreiben des, vom Benutzer ermittelten, CAE2000-Pfades begin Result := UserDirPageCAE.Values[0]; CAE2000Path := UserDirPageCAE.Values[0]; RegWriteStringValue(HKLM, '{#UNINSTKEY}','CAE2000Location', CAE2000Path); //Erstellen eines Registry-Eintrages für den CAE2000-Pfad end; function GPSDir(Param:String):String; begin GPSPath := UserDirPageCAE.Values[1]; end; procedure GPSDirCheckBoxOnClick(Sender: TObject); //Einblenden und Einstellen eines separaten GPS-Pfades begin if GPSDirCheckBox.Checked then begin UserDirPageCAE.Add('Zielverzeichnis des GPS Ordner´s'); //GPS-Verzeichnisauswahlfenster UserDirPageCAE.Values[1] := ExpandConstant('C:\CAE2000\'); //GPS-Standardpfad in der Verzeichnisauswahl end end; procedure InitializeWizard; begin SplashFileName := ExpandConstant('{tmp}\WISAG Logo weiß.bmp'); //Einblenden vom WISAG-Logo für Zeit x ExtractTemporaryFile(ExtractFileName(SplashFileName)); //WISAG-Logo aus dem tmp-Verzeichnis aufrufen SplashForm := TForm.create(nil); with SplashForm do begin BorderStyle := bsNone; Position := poScreenCenter; // Bildposition angeben ClientWidth := 980; // Bildgröße angeben (Breite in px) ClientHeight := 467; // Bildgröße angeben (Höhe in px) end; SplashImage := TBitmapImage.Create(SplashForm); with SplashImage do begin Bitmap.LoadFromFile(SplashFileName); Stretch := true; Align := alClient; Parent := SplashForm; end; with SplashForm do begin Show; for I := 1 to 2 do // Anzeigedauer in Sekunden; 1 to 2 = 2 Sekunden) begin Repaint; Sleep(1000); end; Close; Free; end; UserDirPageCAE := CreateInputDirPage(wpSelectDir, //Zusätzliche Verzeichnisauswahlseite einbinden ExpandConstant('{cm:CAEVerzeichnis}'), ExpandConstant('{cm:SpeicherortPRTDEF}'), ExpandConstant('{cm:SpeicherzielPRTDEF}'), false, 'Neuer Ordner'); UserDirPageCAE.Add('Zielverzeichnis der CAE2000.EXE'); //CAE-Verzeichnisauswahlfenster UserDirPageCAE.Values[0] := ExpandConstant('C:\CAE2000\'); //CAE-Standardpfad in der Verzeichnisauswahl GPSDirCheckBox := TRadioButton.Create(UserDirPageCAE); //Radio-Button zum Einblenden bei separaten GPS-Pfad with GPSDirCheckBox do //Parameter für die GPS-CheckBox begin GPSDirCheckBox.Parent := UserDirPageCAE.Surface; Caption := ExpandConstant('{cm:GPSVerzeichnis}'); Left := ScaleX(0); Top := ScaleY(120); Width := ScaleX(400); Height := ScaleY(40); Checked := GPSDirCheckBoxChecked; OnClick := @GPSDirCheckBoxOnClick; end; end; procedure CurStepChanged(CurStep: TSetupStep); //Eintragen der benutzerspezifischen Pfadangaben \ in die DOSBox-Konfigurationsdatei begin if CurStep=ssPostInstall then begin; DOSBoxConf := TStringList.Create; DOSBoxConf.LoadFromFile((ExpandConstant('{localappdata}\DOSBox\dosbox-SVN_MB6.conf'))); DOSBoxConf[298] := copy(DOSBoxConf[298],1,22)+(ExpandConstant('{app}\PrintOut\SELECT.PCL'))+copy(DOSBoxConf[298],30,length(DOSBoxConf[298])); DOSBoxConf[355] := copy(DOSBoxConf[355],1,9)+(ExpandConstant('"{code:InstallCae}\"'))+copy(DOSBoxConf[355],24,length(DOSBoxConf[355])); DOSBoxConf[356] := copy(DOSBoxConf[356],1,9)+(ExpandConstant('"{app}\"'))+copy(DOSBoxConf[356],24,length(DOSBoxConf[356])); if GPSDirCheckBox.Checked then begin DOSBoxConf[357] := copy(DOSBoxConf[357],1,1)+' mount D '+(ExpandConstant('"{code:GPSDir}\"'))+copy(DOSBoxConf[357],24,length(DOSBoxConf[357])); end; DOSBoxConf.SaveToFile((ExpandConstant('{localappdata}\DOSBox\dosbox-SVN_MB6.conf'))); DOSBoxConf.Free; SaveVersionInfo; end; end; procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep); //Code für deinstallation begin RegQueryStringValue(HKLM,'{#UNINSTKEY}','CAE2000Location',GetCAE2000Path); if CurUninstallStep = usAppMutexCheck then begin //Kopieren der Backupdatei ins Originalverzeichnis FileCopy(ExpandConstant(GetCAE2000Path) + '\Backup\PRTDEF.GER', ExpandConstant(GetCAE2000Path) + '\PRTDEF.GER', false); end; if CurUninstallStep=usDone then begin RegDeleteKeyIncludingSubkeys(HKLM, '{#UNINSTKEY}'); //Löschen des Rigistry-Eintrages nach der Deinstallation end; end; |
![]() |
Ansicht |
![]() |
![]() |
![]() |
ForumregelnEs ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus. Trackbacks are an
Pingbacks are an
Refbacks are aus
|
|
Nützliche Links |
Heutige Beiträge |
Sitemap |
Suchen |
Code-Library |
Wer ist online |
Alle Foren als gelesen markieren |
Gehe zu... |
LinkBack |
![]() |
![]() |