Entwickler-Ecke
Dateizugriff - Programme aus einer INI-Datei laden
kongreddgrass - Mi 17.09.03 20:24
Titel: Programme aus einer INI-Datei laden
Hallo,
ich will bei mir ein Progg machen, dass festgelegte Programme starten soll.
In der Standartansicht(beim start) stehen Buttons. In einem erweiterten Formular werden die Pfade festgelegt und in einer INI-Datei abgespeichert.
Dafür habe ich solchen Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure TForm1.Button1Click(Sender: TObject); var MyIni: TIniFile; i: Integer; begin MyIni := TIniFile.Create('C:\Windows\Profiles\Slidermike\Desktop\Test.ini'); try for i := 1 to 5 do MyIni.WriteString('Section_1','Edit' + IntToStr(i),TEdit(FindComponent('Edit' + IntToStr(i))).Text); finally MyIni.Free; end; end;
procedure TForm1.Button2Click(Sender: TObject); var MyIni: TIniFile; i: Integer; begin MyIni := TIniFile.Create('C:\Windows\Profiles\Slidermike\Desktop\Test.ini'); try i := 1; while MyIni.ValueExists('Section_1','Edit' + IntToStr(i)) do begin TEdit(FindComponent('Edit' + IntToStr(i))).Text := MyIni.ReadString('Section_1','Edit' + IntToStr(i),'kA'); Inc(i); end;
finally MyIni.Free; end; end; |
Nun habe ich das Problem. Ich will, das in der Standartansicht die Buttons 1...5 aus der Datei den jeweiligen Pfad laden.
Und ein Zweites: Ich will im erweiterten, also wie oben, auch die Namen der Programme abspeichern. Dies weiß ich auch. Nun will ich, dass die Buttons den jeweiligen Namen haben.
Hoffe, jemand hat was auf Lager.
Gruß
Mike
Moderiert von
Tino: Code- durch Delphi-Tags ersetzt.
Delete - Mi 17.09.03 23:27
ich habe leider keine zeit, um dir den code zu schreiben.
hier aber meine Idee:
Beim OnShow Erreignis der Form, generierst du die beschriftungen der Buttons
Delphi-Quelltext
1:
| button1.caption := MyIni.readvalue(......); |
Eine Datei Ausführen kannst du mit dem Befehl ShellExecute :arrow: schau doch mal in der Hilfe nach :!:
Damit du weisst, welche Beschreibung, zu welchem Befehl gehören,
Löse dies doch so:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| [Beschreibung] 1=blubb 2=blabb 3=....
[Shell] 1=c:\command.com 2=sol.exe 3=.... |
so sollte die Ini Datei nachher mindestens aussehen.... :!:
Ich hoffe, diese Informationen helfen dir weiter!
ansonsten helfe ich dir gerne weiter
Moderiert von
Klabautermann: Code-Tags hinzugefügt.
kongreddgrass - Do 18.09.03 20:29
Hi
ich hab jetzt ein Problem. Das Programm speichert die Datei nicht ab. Hier der Code
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70:
| unit Unit5;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, IniFiles;
type TForm5 = class(TForm) Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Edit4: TEdit; Edit5: TEdit; Edit6: TEdit; Edit7: TEdit; Edit8: TEdit; Edit9: TEdit; Edit10: TEdit; Edit11: TEdit; Edit12: TEdit; Edit13: TEdit; Edit14: TEdit; Edit15: TEdit; Edit16: TEdit; Button1: TButton; Button2: TButton; Button3: TButton; Edit17: TEdit; procedure Button3Click(Sender: TObject); procedure Button1Click(Sender: TObject); private public end;
var Form5: TForm5;
implementation
uses Unit2;
{$R *.dfm}
procedure TForm5.Button3Click(Sender: TObject); begin Form5.Close; Form2.Show; end;
procedure TForm5.Button1Click(Sender: TObject); var MyIni: TIniFile; i: Integer; begin MyIni := TIniFile.Create(Edit17.Text+'configuration.ini'); try for i := 1 to 17 do MyIni.WriteString('Programm-Pfad','Pfad' + IntToStr(i),TEdit(FindComponent('Edit' + IntToStr(i))).Text); for i := 18 to 36 do MyIni.WriteString('Programmname','Name' + IntToStr(i),TEdit(FindComponent('Edit' + IntToStr(i))).Text); finally MyIni.Free; end; end;
end. |
Oder liegt es daran, dass er die Datei nicht überschreiben darf?
Delete - Do 18.09.03 20:45
Theoretisch sollte es so funktionieren.
Meine Vermutung für den Fehler ist, dass du darin etwas vergessen hast:
Delphi-Quelltext
1:
| MyIni := TIniFile.Create(Edit17.Text+'configuration.ini'); |
hast du daran gedacht, dass im edit17 am ende noch ein backslash ( "\") eingesetzt werden sollte, ansonsten dann vor dem 'configuration.ini'
jetzt erstellst du am besten eine Abfrage, in der du das edit17.text überprüfst, ob am Ende des Strings auch ein Backslash ist, ansonsten fügst du einen ein... :!:
War das der Fehler? Oder war meine Vermutung falsch :?: :?:
Tana´Ri - Fr 19.09.03 08:23
Tipp: mit FileExists kannst du deine Pfade prüfen ob sie in der Form auch vorhanden sind.
kongreddgrass - Fr 19.09.03 16:51
@DaBass: Jetzt geht es. Danke für die Hilfe
@Tana'ri: Kannst du mir das bitte erklären? Ich weiß nicht, wie ich es genau wie ich es anstellen soll?
Jetzt hab ich ein weiteres Problem. Ich habe nocht ein Laden-Button plaziert, mit diesem Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| procedure TForm5.Button4Click(Sender: TObject); var MyIni: TIniFile; i: Integer; begin MyIni := TIniFile.Create(Edit17.Text+'\configuration.ini'); try i := 1; while MyIni.ValueExists('Programmname','Name' + IntToStr(i)) do begin TEdit(FindComponent('Name' + IntToStr(i))).Text := MyIni.ReadString('Programmname','Name' + IntToStr(i),'kA'); Inc(i); end;
finally MyIni.Free; end; end; |
Wie bekomme ich es so, dass das Programm weiß, aus welcher Ort er die Datei laden soll. Vor allem soll es auch beim Programmstart ist, weil sonst wäre es ja umständlich, immer die Pfade hinzuschreiben?
Gruß
Mike
kongreddgrass - Sa 20.09.03 12:45
Nanu, habs ich zu schwer gemacht, oder???
Mike
Delete - So 21.09.03 21:38
Nein, du hast es nicht zu schwer gemacht. Ich war nur nicht da übers Wochenende.
Am besten ist es, wenn du die Konfigurationsdatei im Verzeichnis der Exe-Datei hast. Der Pfad der Exe-Datei erhälst du so:
Delphi-Quelltext
1:
| ProgDir :=ExtractFilePath(ParamStr(0)); |
danach kannst du die Konfigurationsdatei folgendermassen öffnen:
Delphi-Quelltext
1:
| MyIni := TIniFile.Create(ProgDir+'configuration.ini'); |
ACHTUNG: denn backslash vor dem configuration.ini musst du entfernen.
Ich hoffe, das funktioniert so :!::?::?::!:
kongreddgrass - Mo 22.09.03 21:52
Hi,
kannst du mir des in den Code reinschreiben, damit ich's besser lernen kann (+ verstehen kann). BBBBBBBiiiiiiiiiitttttttttttttttttttteeeeeeeeeee...
Gruß
Mike
Delete - Mo 22.09.03 22:25
sorry, habe keine Zeit diir die ganze Source zu erstellen.
Falls du konkrete Fragen hast, so melde dich wider.
Bin nicht der, der da alles macht....
Auserdem findest du vermutlich für alles das du brauchst ein Beispiel in diesem Form. Musst nur die Suche verwenden
Terra23 - Di 23.09.03 18:45
... ich bin etwas zu müde um mich da wieder eizuarbeiten, aber FileExists geht so:
Delphi-Quelltext
1: 2: 3: 4:
| Pfad:='C:\'; If FileExists(Pfad+'Schießmichtot.doc') Then ShowMessage('Schießmichtot.doc existiert..') Else ShowMessage('Schießmichtot.doc existiert nicht..'); |
FileExists erwartet einen String als Parameter und gibt True (wenn die Datei existiert) oder False (wenn die Datei nicht existiert) zurück..
kongreddgrass - Di 23.09.03 19:23
@Terra23: Funktioniert dieser Code ab einer Prof-Version? Bei mir geht's nicht. Oder hab ich vergessen das var und dieses irgendwas hinzuschreiben?
@DaBass: Kannst du mir erklären, wo ich dieses ProgDir
und MyIni hinsetzen soll.
kongreddgrass - Di 23.09.03 19:26
Hi,
hab noch eine Idee gehabt, wo man die Datei hinspeichert.
Weil wenn die exe-Datei auf dem Desktop ist, wird man vielleicht nicht wollen, dass die ini-datei auf dem Desktop gespeichert wird.
Nun zu der Frage: Wie kann ich einen Ordner erstellen?
Ich such mal im Forum, summ summ summ , Ahhhhjaaa. Doch nichts, summ summ :D
Ok ich schau mal
Terra23 - Di 23.09.03 19:30
Du musst vorher unter "Var" die Variable Pfad als String definieren:
Ordner erstellst du so:
Delphi-Quelltext
1:
| ForceDirectories('C:\Programme\Mein Programm\Unterordner'); |
Das bewirkt, daß alle Ordner, die nicht vorhanden sind (in diesem Fall "Mein Programm\Unterordner\") erzeugt werden.
Wenn man nicht weiß, wonach man suchen soll, wird's schon schwer, aber ich denke auch mit
ORDNER ERSTELLEN wärst du fündig geworden..
kongreddgrass - Di 23.09.03 19:39
Ich hab geschaut Ordner AND erstellen OR machen.
War wohl nix. Hey, wie geht des mit der Suchfunktion?
Danke für deine Hilfe
Gruß
Mike
Delete - Di 23.09.03 22:01
ProgDir und MyINI.Create
must du dort einfügen, wo du die Konfigurationen ausliest und in die TextFelder speicherst. Wo du das machst ist mir eigentlich egal...
würde es jedoch in das Create Ereigniss der Form setzen.
[/delphi]
kongreddgrass - Do 25.09.03 18:57
Hi,
ich benutze jetzt aus Gründen (bin ja noch nicht Profi) einen anderen Code.
Diesen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| begin ForceDirectories('C:\Programme\Progg-Starter\Configuration'); ForceDirectories('C:\Programme\Progg-Starter\Names'); ini := TIniFile.Create('C:\Programme\Progg-Starter\Configuration\Configuration_01.ini'); try ini.WriteString('Programm_01', 'Path', 'This is not a path'); finally ini.free; end; ini := TIniFile.Create('C:\Programme\Progg-Starter\Names\Name_01.ini'); try ini.WriteString('Programmname_01', 'Name', 'Dieses hier solls sein'; finally ini.free; end; end; |
Wie kann ich bei dem kennzeicheneten String 'Dieses hier solls sein' realisieren, dass es aus einem Textfel rausliest. Mit PChar habs ich geprobt. Nix.
Könnt ihr das mir lehren??
Gruß
Mike
Delete - Do 25.09.03 19:45
Delphi-Quelltext
1:
| ini.WriteString('Programmname_01', 'Name', 'TextFeld1.Text'); |
Wobei du für TextFeld1 den Namen des Textfeldes eingeben musst, das du auslesen möchtest.....
kongreddgrass - Do 25.09.03 19:58
Des funzt net.
habe aber auch schon Edit1.Text porbiert. Geht nicht
Gruß
Mike
Delete - Do 25.09.03 20:33
ou, entschuldige... die '' brauchts dann natürlich nicht...
Delphi-Quelltext
1:
| ini.WriteString('Programmname_01', 'Name', Edit.Text); |
so sollte es eigentlich funktionieren!
kongreddgrass - Do 25.09.03 20:38
Hi,
hab den Fehler selber gefunden.
Nach .Text hätte ne Klammer hingehört.
Danke für die Hilfe, brauch dich aber später noch :wink:
Gruß
Mike
Tino - Fr 26.09.03 09:56
Delphi-Quelltext
1:
| ini.WriteString('Programmname_01', 'Name', TextFeld1.Text); |
Delete - Fr 26.09.03 10:33
Doppel posts.... :wink:
musst doch nicht nochmals den gleichen Post machen den ich schon gemacht habe.. etwa drei posts davor.... auf der vorherigen Seite!!
Wenn das normale User machen würden, so würdest du dich ab denen aufregen.. oder??
kongreddgrass - Fr 26.09.03 19:33
Hi, jetzt habe ich wieder ein Problem.
Und zwar beim Button.
Den 1.Button für den Programm starten soll nämlich einen Wert herauslesen und laden.
Dies soll auch mit ShellExecute gehen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var ini: TIniFile; res: String; begin ini:=TIniFile.Create('C:\Programme\Progg-Starter\Configuration\Configuration_01.ini'); try res:=ini.ReadStrin('Programm_01', ); ShellExecute(Aplicatoin.Handle, 'open, {hier der Progg-Pfad aus der INI} , nil, nil, SW_SHOW); finally ini.free; end; end; |
wie kann ich es realisieren, dass der Button es aus der INI-rausliest und anschließend öffnet?
Gruß
Mike
Delete - Sa 27.09.03 13:36
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var ini: TIniFile; res: String; begin ini:=TIniFile.Create('C:\Programme\Progg-Starter\Configuration\Configuration_01.ini'); try res:=ini.ReadString('Programm_01', ); ShellExecute(Aplicatoin.Handle, res , nil, nil, SW_SHOW); finally ini.free; end; end; |
vermutlich so...
Delete - Sa 27.09.03 13:37
wass ich noch sagen will.....
ich bin der Meinung, das du dich grundsätzlich mal ins Delphi einschaffen solltest... dann müsstest du nicht andauernd Fragen stellen....die eigentlich ganz simpel sind.
Ich hoffe du verstehst was ich meine!!
kongreddgrass - Sa 27.09.03 15:00
Hi,
ich will mir ja die Bücher bestellen.
Aber mein Vater bracuht soooollllllaaaaannnnnnngeeeeee. :evil:
Ich versteh nicht wieso?
Aber könntest du mir das noch erklären
Gruß
Mike
kongreddgrass - Sa 27.09.03 15:01
UUUuuuppps.
Brauchts mir nicht nochmal erklären.
ich habs übersehen, weil ich dachte, der Beitrag wäre von mir,
aber gut....
Gruß
Mike
Delete - Sa 27.09.03 15:02
wollte gerade sagen, das habe ich ja schon gepostet... ;-)
kongreddgrass - Sa 27.09.03 15:07
Hi,
hab rausgefunden.-
Danke für eure Hilfe.
Gruß
Mike
Tino - Mo 29.09.03 09:59
| DaBass hat folgendes geschrieben: |
| musst doch nicht nochmals den gleichen Post machen den ich schon gemacht habe.. etwa drei posts davor.... auf der vorherigen Seite!! |
Den habe ich wohl überlesen.
| DaBass hat folgendes geschrieben: |
| Wenn das normale User machen würden, so würdest du dich ab denen aufregen.. oder?? |
Warum sollte ich mich darüber aufregen? Aber egal!
kongreddgrass - Mi 01.10.03 17:28
Uiii,
mein Proggi ist fertig.
Danke für EURE Hilfe.
Wie heißen eigenltich die mail-adressen von meinen Helfern???
Mein Proggi schick ich dann via mail
Aktuell ist Vers. 1.1
DaBass:
Tino:
Terra23:
kongreddgrass - Mi 01.10.03 17:29
Wenn ich meine eigene Web-Seite habe, könnts ihr dann dort runterladen.
Terra23 - Mi 01.10.03 17:40
Die Mail-Addys findest du immer im Profil, falls vorhanden. Weiterhin gibt's nen Button zum Schicken von Mails.. :-)
Delete - Mi 01.10.03 17:42
unsere mail-adressen findest du in den profilen... ;)
Delete - Mi 01.10.03 17:43
sorry.. war wohl gleichzeitig wie du am schreiben terra23... :oops:
mimi - Mi 01.10.03 18:23
ein kleiner tipp:
man sollte nie mit festen verzeinis angeben hantieren.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!