![]() |
speicherpfad als variable
hallo
ich möchte gerne den speicherpfad ('C:\\data.txt') in einer Form3 ändern und speichern. wie könnte ich das ungefähr machen? dass ich den Form3.Edit1.TExt in einem Form1.Label9.Caption speichere und der var x das Caption von Label9 zuweise? z.B so?
Delphi-Quellcode:
Form3:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,e,x: String; begin a:=Combobox1.Text; b:=Combobox2.Text; c:=Edit1.Text; d:=Edit2.Text; e:=Combobox3.Text; x:=Label9.Caption; if length(Combobox1.Text)+length(Combobox2.Text) + length(Edit1.Text) + length(Edit2.Text) + length(Combobox3.Text) < 39 then ShowMessage('Could not login!') else ListBox1.Items.Add(Combobox1.text); ListBox1.Items.Add(Combobox2.text); ListBox1.Items.Add(Edit1.text); ListBox1.Items.Add(Edit2.text); ListBox1.Items.Add(Combobox3.text); ListBox1.Items.SaveToFile(x); ShowMessage('User successfully logged in!'); Close; end; procedure TForm1.FormCreate(Sender: TObject); begin if fileexists(x) then ListBox1.Items.LoadFromFile(x);
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
begin Form1.Label9.Caption := Edit1.Text; Close; end; |
Re: speicherpfad als variable
Es dürfte reichen wenn du in der Unit1 eine globale Variable einsetzt. In der kannst du dir dann den Pfad merken.
|
Re: speicherpfad als variable
und wie macht man das? :lol: :gruebel:
ich schaffe jetzt, dass die datei 1mal unter dem neuen pfad gespeichert wird. ich möchte, dass die datei aber danach immer unter dem neuen pfad gespeichert wird, ausser der pfad wird geändert. mein qt jetzt: Form1:
Delphi-Quellcode:
Form3:
procedure TForm1.Button1Click(Sender: TObject);
var a,b,c,d,e,x: String; begin a:=Combobox1.Text; b:=Combobox2.Text; c:=Edit1.Text; d:=Edit2.Text; e:=Combobox3.Text; if length(Combobox1.Text)+length(Combobox2.Text) + length(Edit1.Text) + length(Edit2.Text) + length(Combobox3.Text) < 39 then ShowMessage('Could not login!') else begin x:=Form3.Edit1.Text; ListBox1.Items.Add(Combobox1.text); ListBox1.Items.Add(Combobox2.text); ListBox1.Items.Add(Edit1.text); ListBox1.Items.Add(Edit2.text); ListBox1.Items.Add(Combobox3.text); ListBox1.Items.SaveToFile(x); ShowMessage('User successfully logged in!'); Close; end; end; procedure TForm1.FormCreate(Sender: TObject); var x: String; begin if fileexists(x) then ListBox1.Items.LoadFromFile(x); end;
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
var x: String; begin x:= Edit1.Text; Close; end; procedure TForm3.FormCreate(Sender: TObject); begin x:=Form3.Edit1.Text; end; |
Re: speicherpfad als variable
Wie du eine globale Variable deklarierst?
Delphi-Quellcode:
in der Unit3 kannst du die dann verwenden. Um Konflikte zu vermeiden kannst du auch schreiben UNIT1.DIR
[...]
var form1:tform1; <-- Hier einfügen: Dir:string; [...] |
Re: speicherpfad als variable
das habe ich schon davor gemacht...
ich möchte , dass sich der pfad nicht bei jedem neuen programmstart auf 'C:\\data.txt' zurücksetzt. wie kann ich das machen? |
Re: speicherpfad als variable
Wenn du die Variable nicht explizit am Anfang einer procedure/function definierts, sondern am Anfang der Unit. Dann ist sie in jeder procedure/function lesbar und beschreibbar. Also:
Delphi-Quellcode:
Also, nun sollt's klappen.
unit Unit1;
interface uses Windows, Messages, SysUtils, ...; type TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; Test: String; //<--- ENTWEDER hier deklarieren, dann ist sie global ... implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); var Test: String;//<--- ... ODER hier dann gilt sie nur innerhalb der procedure begin Test:= 'Hurra!'; end; |
Re: speicherpfad als variable
Du kannst den Pfad in einer Datei speichern,
oder aber immer auf den Pfad der Projekt-Dateien setzen.
Delphi-Quellcode:
OpenDialog1.InitialDir:= GetCurrentDir;
|
Re: speicherpfad als variable
geht das nicht auch ohne datei?
dass ich den pfad bei Form.Close einfach in ein Label(unsichtbar) speichere??? vielen dank |
Re: speicherpfad als variable
Nee, der Text des Labels bleibt doch nur zur Laufzeit bestehen, wie willst du dann bei einem neuen Programmstart den Text aus deinem (unsichtbaren ... ?) Label auslesen?
Den musst du schon irgendwie speichern, Datei oder Registry. Oder versteh ich dich nur nicht?? |
Re: speicherpfad als variable
Ohne Datei geht es diesbezüglich dass du den Wert in die Registry speicherst.
Delphi-Quellcode:
allerdings haben viele User was dagegen wenn irgendwelche Programme was in ihre Registry speichern, weil die Registry komplett in den RAM geladen ist und wenn sie vergrößert wird eben auch der RAM-Bedarf steigt bzw. die Performance sinkt. Aber dazu gibt es eine Unmenge an Diskussionen.
uses
..., registry, [...] ///speichern var R: TRegistry; begin R := TRegistry.Create(KEY_WRITE); try R.RootKey = HKEY_CURRENT_USER; R.OpenKey('Software\mr-unbekannt_software\programm1\', True); R.WriteString('Pfad',STRINGDENDUSPEICHERNWILLST); finally R.Free; end; end; ///laden var R: TRegistry; begin R := TRegistry.Create(KEY_READ); try R.RootKey = HKEY_CURRENT_USER; R.OpenKey('Software\mr-unbekannt_software\programm1\', False); STRINGVARIABLE:=R.ReadString('Pfad'); finally R.Free; end; end; Speichern in eine Datei:
Delphi-Quellcode:
//Speichern
var t:textfile; begin assignfile(t,changefileext(application.exename,'.ini')); rewrite(t); writeln(t,STRINGDENDUSPEICHERNWILLST); closefile(t); end; //Laden //Speichern var t:textfile; begin assignfile(t,changefileext(application.exename,'.ini')); if not fileexists(changefileext(application.exename,'.ini')) then exit; reset(t); readln(t,STRINGVARIABLE); closefile(t); end; |
Re: speicherpfad als variable
Schau die in der Delphi-Help alles über 'TIniFile' an. Das funktioniert in etwa so, wie die Registry, aber eben in einer Datei. Den Pafad zur Inidatei erhälst Du am einfachsten mit
Delphi-Quellcode:
den Rest findest Du selber raus :roteyes:
ChangeFileExt(Application.Exename, '.INI');
|
Re: speicherpfad als variable
ach ja genau das wollte ich wissen;
schade das das nicht ohne datei/reg_eintrag geht... aber danke |
Re: speicherpfad als variable
Also, bei mir isses so, dass sich der opendialog seinen Pfad merkt... :gruebel:
übrigens: du solltest deine Inidatei nicht im Anwendungsverzeichniss speichern sondern im Homedir des Users. Unter Vista wird es nicht mehr möglich sein als nicht-Admin ins Programmverzeichniss zu schreiben. Für die Inidatei gibt's das Verzeichniss "Anwendungsdaten" (C:\Dokumente und Einstellungen\BENUTZERNAME\Anwendugnsdaten). Die kannst du aus der Registry auslesen: HKEY_CURRENT_USER\Software\Microsoft\Windows\Curre ntVersion\Explorer\User Shell Folders\appdata
Delphi-Quellcode:
function getappdatadir:string;
var R: TRegistry; begin R := TRegistry.Create(KEY_READ); try R.RootKey = HKEY_CURRENT_USER; R.OpenKey('Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders\', False); result:=R.ReadString('appdata'); finally R.Free; end; end; |
Re: speicherpfad als variable
ich habe jetzt die Form1.Create das eingefügt:
Delphi-Quellcode:
aber wenn ich das nächste mal das programm öffne, speichert es die datei wieder unter dem standartnamen(C:\\data.txt)
procedure TForm1.FormCreate(Sender: TObject);
var R: TRegistry; begin if fileexists(x) then ListBox1.Items.LoadFromFile(x); R := TRegistry.Create(KEY_READ); try R.RootKey := HKEY_CURRENT_USER; R.OpenKey('Software\Novell\login\', False); x := R.ReadString(x); finally R.Free; end; end; |
Re: speicherpfad als variable
Zitat:
|
Re: speicherpfad als variable
Du musst ja auch onclose speichern.
ABER verwende besser nicht die Registry. Speziell in der DP ist dies garnicht gerne gesehen. Speichere sie als kleine Datei im Ordner Anwendungsdaten (wie oben beschrieben) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:33 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