Autor Beitrag
Helmut
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Di 29.03.05 21:06 
Hallo,

ich habe ein kleines Problem mit der opendialog-komponente:

Ich habe ein Options-Formular wo man verschiedene Einstellungen machen kann - unter anderem auch einen pfad incl. exe auswählen. Dieses kann man entweder direkt in das edit-feld reinschreiben oder mit der opendialog-komponente auswählen.

Anschliessend klickt man auf "Speichern" und eine ini wird mit den edit.text-inhalten erstellt.
Jetzt habe ich anschliessend eine prozedur welche überprüft ob die gespeicherte einstellungen.ini 1. vorhanden ist und 2. alle einstellungen drin sind (also nicht leer).

Das Problem: sobalt ich den pfad über die opendialog-komponente in das edit.text-feld übertragen habe meldet die überprüfungsprozedur das die einstellungen.ini nicht vorhanden sei (sie ist aber vorhanden).

Wenn ich den pfad per hand eingebe ist alles ok. Nur sobalt ich die opendialog-komponente an hatte funktioniert das programm nichtmehr.

Muss ich die opendialog komponente irgendwie noch extra beenden? Ich hab es bereits mit opendialog.free und opendialog.destroy versucht, aber es hat nichts gebracht.

Zugegeben, das ist wirklich schwer verständlich - aber ich weiss mir keinen rat ausser hier zu fragen. Die Delphi-Hilfe hat mir da auch nicht großartig weitergeholfen...

Hier mal die wichtigsten code-zeilen:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm2.Button2Click(Sender: TObject); {bei klick auf button wird opendialog aufgerufen und anschliessend  das ergebnis in das edit6.text-feld übertragen}
var pfad: string;
begin
 opendialog1.Execute;
 pfad:=opendialog1.FileName;
 edit6.Text:=pfad;
end;


anschliessend wird bei klick auf speichern die ini-datei gespeichert:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
procedure TForm2.Button1Click(Sender: TObject);
var ini: TIniFile;
begin
  ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'einstellungen.ini');
     try
    ini.WriteString ('Einstellungen', 'exe', edit6.text);
    finally
     ini.free;
    end;
end;


und diese function überprüft jetzt die einstellungen.ini

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function testeeinstellungenini: boolean; 
begin
result:=true;
if fileexists('einstellungen.ini') then
 begin
 ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
 'einstellungen.ini');
 try
  if (ini.Readstring('einstellungen','exe','')='') then result:=false
 finally
 ini.Free;
 end;
 end else
 begin
 result:=false; {die function kommt zu diesem ergebnis (also einstellungen.ini existiert nicht) obwohl die einstellungen.ini exisitiert und alles korrekt gespeichert wurde!}
 end;
end;


Wie gesagt, das ganze nur wenn ich den pfad über die opendialog-komponente an das editfeld übergebe! Wenn ich ihn manuel eintrage dann ist alles ok. Aber nach dem ich die Opendialogkomponente an hatte bringt auch manuell eintragen nichts mehr.

Ich habe kaum Hoffnung das sich den ganzen mist hier jemand durchliesst weil es (selbst für mich) irgendwie zu verwirrend ist - ich verstehe es eben einfach nicht wieso diese dumme komponente so seltsame sachen nach sich zieht.

Einen versuch ist es aber zumindest wert.

Also Danke schonmal für jeden Hilfeversuch :)

mfg
Helmut
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Di 29.03.05 21:16 
Schreib das einfach erstmal so um:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
function testeeinstellungenini: boolean; 
begin
result:=true;
if fileexists(ExtractFileDir(ParamStr(0))+'\einstellungen.ini') then
 begin
 ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
 'einstellungen.ini');
 try
  if (ini.Readstring('einstellungen','exe','')='') then result:=false
 finally
 ini.Free;
 end;
 end else
 begin
 result:=false; {die function kommt zu diesem ergebnis (also einstellungen.ini existiert nicht) obwohl die einstellungen.ini exisitiert und alles korrekt gespeichert wurde!}
 end;
end;


//EDIT: Ach ja... Das ist auch unnötig:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
procedure TForm2.Button2Click(Sender: TObject); {bei klick auf button wird opendialog aufgerufen und anschliessend  das ergebnis in das edit6.text-feld übertragen}
var pfad: string;
begin
 opendialog1.Execute;
 pfad:=opendialog1.FileName;
 edit6.Text:=pfad;
end;

Mach's so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
procedure TForm2.Button2Click(Sender: TObject); {bei klick auf button wird opendialog aufgerufen und anschliessend  das ergebnis in das edit6.text-feld übertragen}
begin
 opendialog1.Execute;
 edit6.Text:=opendialog1.FileName;
end;

;)
Harry M.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: Di 29.03.05 21:32 
warum denn einfach wenn es auch kompliziert geht :lol:

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
Helmut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 30.03.05 10:31 
juhu, es klappt! Daran lags:

fileexists(ExtractFileDir(ParamStr(0))+'\einstellungen.ini')

warum das aber erst nicht ging nachdem ich die opendialogkomponente an hatte.... :shock:

achja, das:
opendialog1.Execute;
pfad:=opendialog1.FileName;
edit6.Text:=pfad;


war eine folge von dem Stundenlangen problemsuchen. Ich dachte mir, vielleicht liefert die opendialog-komponente ja einen versauten string und wenn ich den über ne string variable übergebe wird der gereinigt von irgendwas... äh naja :roll: :lol:

Also vielen Dank für die Hilfe!
Da das fileexists bei mir bis jetzt immer so funktioniert hatte, hätte ich daran nie was verändert...

mfg
Helmut
Harry M.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: Mi 30.03.05 10:43 
war nicht böse gemeint :lol: und verwende bitte immer delphitags zum einbringen von code.
das
ausblenden Delphi-Quelltext
1:
fileexists(ExtractFileDir(ParamStr(0))+'\einstellungen.ini')					

sollte es nicht eigendlich heißen
ausblenden Delphi-Quelltext
1:
if fileexists(ExtractFilepath(Application.Exename)+'einstellungen.ini')					

Zitat:
Ich dachte mir, vielleicht liefert die opendialog-komponente ja einen versauten string und wenn ich den über ne string variable übergebe wird der gereinigt von irgendwas... äh naja :roll: :lol:
ich bitte dich....

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
fvolk
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 203

Win XP (Home & Pro)
Delphi 2005 Pers
BeitragVerfasst: Mi 30.03.05 10:52 
Warum fängst du nicht die Tatsache, dass der User im OpenDialog auf Abbrechen klicken kann, mit if OpenDialog.Execute then ab?

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist überzeugt, dass er genug davon habe.
(René Descartes)
Helmut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 30.03.05 11:03 
user profile iconHarry M. hat folgendes geschrieben:
war nicht böse gemeint :lol: und verwende bitte immer delphitags zum einbringen von code.
das
ausblenden Delphi-Quelltext
1:
fileexists(ExtractFileDir(ParamStr(0))+'\einstellungen.ini')					

sollte es nicht eigendlich heißen
ausblenden Delphi-Quelltext
1:
if fileexists(ExtractFilepath(Application.Exename)+'einstellungen.ini')					



...damit hast du mir jetzt geholfen ein 2. Problem zu lösen :D

user profile iconfvolk hat folgendes geschrieben:
Warum fängst du nicht die Tatsache, dass der User im OpenDialog auf Abbrechen klicken kann, mit if OpenDialog.Execute then ab?


Mach ich ja jetzt ^^
Ich hab mich schon die ganze zeit gewundert warum hier im Forum bei opendialog immer if... then verwendet wurde... jetzt kenn ich den Grund :wink:

Also danke nochmal!

Falls es jemanden interessiert was ich grade mache: Ein Programm welches den Status eines Programmes überwacht, eine statusini auf einen Server läd den ein anderer der dieses Programm ntuzt abrufen kann und so herausfindet ob das Programm bei irgendjemanden Bereits läuft.

hm.. irgendwie kann ich nicht erklären... ein Wunder das ihr oben herausgefunden habt, was mein problem ist :lol:
Harry M.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 754

Win 2000, XP
D2005
BeitragVerfasst: Mi 30.03.05 11:06 
Zitat:
...damit hast du mir jetzt geholfen ein 2. Problem zu lösen
deswegen bist du doch hier, das man dir hilft... :lol:

_________________
Gruß Harry
Et spes me per dies sine te ducat et amor me ferat, si dolor spem tollit.
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.03.05 11:13 
user profile iconHelmut hat folgendes geschrieben:
Ich hab mich schon die ganze zeit gewundert warum hier im Forum bei opendialog immer if... then verwendet wurde... jetzt kenn ich den Grund :wink:

Und der wäre?

Zitat:
Falls es jemanden interessiert was ich grade mache: Ein Programm welches den Status eines Programmes überwacht, eine statusini auf einen Server läd den ein anderer der dieses Programm ntuzt abrufen kann und so herausfindet ob das Programm bei irgendjemanden Bereits läuft.

hm.. irgendwie kann ich nicht erklären...

Hauptsache, du kannst es programmieren. ;)
Helmut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 30.03.05 11:22 
ja, ich bin eigentlich schon fast fertig. Ein Wunder :lol:

user profile iconMathiasSimmack hat folgendes geschrieben:
user profile iconHelmut hat folgendes geschrieben:
Ich hab mich schon die ganze zeit gewundert warum hier im Forum bei opendialog immer if... then verwendet wurde... jetzt kenn ich den Grund :wink:

Und der wäre?


Na das man mit einbezieht das der User auch auf Abbrechen klicken kann - dann passiert ja nichts. Daran hab ich überhaupt nicht gedacht.
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mi 30.03.05 14:20 
user profile iconHarry M. hat folgendes geschrieben:

ausblenden Delphi-Quelltext
1:
fileexists(ExtractFileDir(ParamStr(0))+'\einstellungen.ini')					

sollte es nicht eigendlich heißen
ausblenden Delphi-Quelltext
1:
if fileexists(ExtractFilepath(Application.Exename)+'einstellungen.ini')					

Hmm?? :shock: Was is los?? Das ist genau das selbe. :roll:
Helmut Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 44



BeitragVerfasst: Mi 30.03.05 14:38 
hm, nur das bei dem ersten ein fehler auf trat der bei der 2. variante nicht kam. Der hat bei der ersten irgendwie den pfad genommen den man beim opendialog ausgewählt hat.

Aber es funktioniert alles - also zerbrecht euch nicht den Kopf. Meine Programme sind immer etwas geheimnisvoll was die reaktionen angeht... :roll: :wink:
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mi 30.03.05 14:41 
Nicht wirklich. Bei "ExtractFilePath" wird auch der Backslash mit übergeben. Nimmt man "ExtractFileDir", muss man den Backslash selbst anfügen. Vergisst man es, klappt es nicht. Macht man dagegen einen Backslash bei "ExtractFilePath", also
ausblenden Quelltext
1:
c:\IrgendeinOrdner\\IrgendeineDatei					

passiert nichts.

Und "paramstr(0)" bevorzuge ich auch, weil "Application.ExeName" nur bei Form-Programmen (VCL) funktioniert. Auch wenn hinter "Application.ExeName" auch bloß "paramstr(0)" steckt. :)
WeBsPaCe
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2322
Erhaltene Danke: 1

FireFox 3, Internet Explorer 6 SP1
D1, D3Prof, D6Pers, D7Pers+Indy, VisualStudio Express
BeitragVerfasst: Mi 30.03.05 14:51 
Seht ihr, ich werd halt auchmal so ein 3841er. :lol: