![]() |
AW: Textimport und export
ganz am Ende der [autoexec] Bereich, dort geschieht die meiste Arbeit und da darf ich leider kein "=" nutzen^^
Aber wie gesagt das ist eine Sache die noch etwas Zeit hat, momentan hänge ich eh daran die onClick Geschichte zum laufen zu kriegen Ich habe zwar
Delphi-Quellcode:
Das nun geschrieben, jedoch motzt er immer rum "unknown Identifier", aber ich bin irgendwie gedanklich dabei das ja die Zuweisung zur procedur über den Sender geschieht und damit eigentlich alles abgehackt sein sollte.....
GPSDirCheckBox := TCheckBox.Create(UserDirPageCAE);
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); OnClick := @GPSDirCheckBoxOnClick; end; end; procedure GPSDirCheckBoxOnClick(Sender: TObject); begin //GPS-Verzeichnisauswahlfenster UserDirPageCAE.Add('GPS-Ordner Verzeichnis'); //GPS-Standardpfad in der Verzeichnisauswahl UserDirPageCAE.Values[1] := ExpandConstant( 'C:\CAE2000\'); end; end; |
AW: Textimport und export
Zitat:
|
AW: Textimport und export
Liste der Anhänge anzeigen (Anzahl: 1)
Okay das die procedure mit in das Formular muss hatte ich auch nur durch ein bissl rum probieren ist sie an der falschen Stelen hängen geblieben *gg*
Das "@" hatte ich nur eingefügt weil es ohne auch nicht funktionierte und ich dies bei ein paar Beispielen gesehen hatte, mein Code sieht momentan wie folgt aus bzw. der Ausschnitt
Delphi-Quellcode:
Jedoch kriegt er es noch immer nicht hin und gibt mir noch immer den Unknown identifier für "GPSDirCheckBoxOnClick" raus.
procedure InitializeWizard;
begin UserDirPageCAE := CreateInputDirPage(wpSelectDir, ExpandConstant('{cm:CAEVerzeichnis}'), ExpandConstant('{cm:SpeicherortPRTDEF}'), ExpandConstant('{cm:SpeicherzielPRTDEF}'), false, 'Neuer Ordner'); //CAE-Verzeichnisauswahlfenster UserDirPageCAE.Add('CAE2000.EXE Verzeichnis'); //CAE-Standardpfad in der Verzeichnisauswahl UserDirPageCAE.Values[0] := ExpandConstant( 'C:\CAE2000\'); GPSDirCheckBox := TCheckBox.Create(UserDirPageCAE); 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; procedure GPSDirCheckBoxOnClick(Sender: TObject); begin if GPSDirCheckBox.Checked then begin //GPS-Verzeichnisauswahlfenster UserDirPageCAE.Add('GPS-Ordner Verzeichnis'); //GPS-Standardpfad in der Verzeichnisauswahl UserDirPageCAE.Values[1] := ExpandConstant( 'C:\CAE2000\'); end; end; end; (Falls etwas nicht ersichtlich sein sollte hab ich im Dateianhang mal das gesamte Projekt, aber eigentlich sollte dies ja net notwendig sein hoffe ich^^) |
AW: Textimport und export
OnClick erwartet eine Methode keine zudem erst später deklarierte Prozedur.
Also etwas in der Art ...
Delphi-Quellcode:
procedure TMeinForm.GPSDirCheckBoxOnClick(Sender: TObject);
..... |
AW: Textimport und export
Eine procedure innerhalb einer procedure geht aus syntaktischen Gründen nicht. Stell die procedure GPSDirCheckBoxOnClick über die procedure InitializeWizard.
|
AW: Textimport und export
Das war es noch, also kann ich mir in Zukunft merken das solche Verschachtelungen nicht machbar sind, gut zu wissen *gg*
Jedoch muss doch das @ vorran stehen und der Name der procedure bleibt wie gehabt, der Code sieht nun so aus:
Delphi-Quellcode:
und er funktioniert auch.
procedure GPSDirCheckBoxOnClick(Sender: TObject);
begin if GPSDirCheckBox.Checked then begin //GPS-Verzeichnisauswahlfenster UserDirPageCAE.Add('GPS-Ordner Verzeichnis'); //GPS-Standardpfad in der Verzeichnisauswahl UserDirPageCAE.Values[1] := ExpandConstant( 'C:\CAE2000\'); end end; procedure InitializeWizard; begin UserDirPageCAE := CreateInputDirPage(wpSelectDir, ExpandConstant('{cm:CAEVerzeichnis}'), ExpandConstant('{cm:SpeicherortPRTDEF}'), ExpandConstant('{cm:SpeicherzielPRTDEF}'), false, 'Neuer Ordner'); //CAE-Verzeichnisauswahlfenster UserDirPageCAE.Add('CAE2000.EXE Verzeichnis'); //CAE-Standardpfad in der Verzeichnisauswahl UserDirPageCAE.Values[0] := ExpandConstant( 'C:\CAE2000\'); GPSDirCheckBox := TCheckBox.Create(UserDirPageCAE); 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; Nur gibt es noch einen Schönheitsfehler den ich mit ner else Schleife wohl entfernen muss: Wenn man die CheckBox aktiviert wird die Verzeichnisauswahl eingeblendet, entfernt man den Hacken so bleibt die Auswahl, klickt man nun erneut den Hacken an so erscheint noch eine Auswahl. Von der momentanen Funktion her ja auch vollkommen korrekt. mit *.Add füge ich die Auswahl ja nun hinzu, jedoch wüsste ich nicht das es ein *.remove oder *.hide Befehl gibt. Da muss ich mal meinen UMTS stick und Google glühen lassen^^ |
AW: Textimport und export
Da ich so jetzt nichts dafür gefunden habe hab ich es mir einfach gemacht in dem ich die CheckBox gegen einen RadioButton getauscht habe und wenn der zusätzliche Eintrag jetzt gesetzt wird obwohl er nicht notwendig ist bringt das auch keinen um, damit kann ich locker leben.
Zusätzlich habe ich etwas herum gespielt und eine Versionskontrolle mit implementiert die auch wunderbar funktioniert und eine Messagebox aufruft falls eine eine neuere Version bereits installiert ist. Nun möchte ich dem Benutzer gerne die Wahl lassen ob er es dabei belässt oder die aktuelle Version deinstalliert mit einer YES/NO abfrage und dem Aufruf der unins000.exe ausm {app} Verzeichnis das ja logischerweise bereits besteht. Dazu nutze ich momentan folgenden Code:
Delphi-Quellcode:
jedoch kriege ich immer die fehlermeldung dass das {app} Verzeichnis noch nicht initialisiert wurde und nun brauch ich nen Denkanstoß, wie kann ich den initialisieren?
if(not Result) then
begin if MsgBox(Format(ExpandConstant('{cm:NewerAppFound}'),[DecodeVersion(SavedMajor,SavedMinor)]),mbConfirmation,MB_YESNO) = IDYES then; begin Exec(ExpandConstant('{app}\unins000.exe'),'','',SW_SHOW,ewWaitUntilTerminated,ResultCode) end; end; Edit: Wobei bin ich gerade aufm falschen gedanklichen Dampfer? Ich muss das Verzeichnis erst durch ne Code-Abfrage ermitteln denn die Setup Routine weiß ja gar nicht welches das momentane {app} Verzeichnis ist und durch die Abfrage vorher dann erfährt mein Exec-Befehl auch das Verzeichnis und hat es initialisiert. Von daher ignoriert erstmal den Post, sorry^^ |
AW: Textimport und export
Ich möchte mal euren Erfahrungsschatz anzapfen^^
Zum Identifizieren des Verzeichnisses habe ich mir nun zwei Lösungsvarianten rausgesucht: 1. Variante über
Delphi-Quellcode:
.
function FindFirst(const FileName: String; var FindRec: TFindRec): Boolean;
2. Variante über einen Eintrag in der Registry wo immer das aktuelle {App} Verzeichnis eingetragen wird und den Wert kann er sich dann ja auslesen. Ich persönlich bevorzuge Variante 2, dies wird wohl die sauberste, sicherste und schnellste sein oder? |
AW: Textimport und export
Zitat:
Variante 2 : Gefällt mir. |
AW: Textimport und export
hmmm ich komme gerade einfach nicht weiter.
Ich habe es mir nun so eingestellt das er sich den Pfad aus der Registry holt und überprüft, sollte der Pfad nicht gefunden werden so bricht er mit einer Fehlermeldung zum manuellen deinstallieren ab und gut ist. Findet er den Pfad kommt die Meldung des Versionsunterschiedes, jedoch startet er nicht meine angegebene unins000.exe und ich sehe nicht warum, er bricht dann auch einfach alles ab.
Delphi-Quellcode:
Result := (SetupMajor > SavedMajor) or ((SetupMajor = SavedMajor) and (SetupMinor >= SavedMinor));
if(not Result) then begin if RegQueryStringValue(HKLM,'{#UNINSTKEY}','InstallLocation',DOSBoxCAE2000Path) then begin result := DirExists(DOSBoxCAE2000Path); end; if not Result then begin MsgBox(ExpandConstant('{cm:DOSBoxPathNotFound}'),mbError,MB_OK); ResultDOSBoxCAE2000PathCheck := false; end else if MsgBox(Format(ExpandConstant('{cm:NewerAppFound}'),[DecodeVersion(SavedMajor,SavedMinor)]),mbConfirmation,MB_YESNO) = IDYES then; begin Exec(ExpandConstant('>'),'DOSBoxCAE2000Path\unins000.exe','',SW_SHOW,ewWaitUntilTerminated,ResultCode); end; end; Edit: Den Abbruch des Setups rufe ich halt hier auf (nur zur Veranschaulichung)
Delphi-Quellcode:
function InitializeSetup: boolean;
begin UserFolderCAE := ''; Result := true; Result := IsSetupNewer; if ResultDOSBoxCAE2000PathCheck = false then begin result := false; end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz