Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   speicherpfad als variable (https://www.delphipraxis.net/58923-speicherpfad-als-variable.html)

mr-unbekannt 14. Dez 2005 16:24


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:
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);
Form3:
Delphi-Quellcode:
procedure TForm3.Button1Click(Sender: TObject);
begin
Form1.Label9.Caption := Edit1.Text;
 Close;
end;

ichbins 14. Dez 2005 16:30

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.

mr-unbekannt 14. Dez 2005 16:42

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:
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;
Form3:
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;

ichbins 14. Dez 2005 17:06

Re: speicherpfad als variable
 
Wie du eine globale Variable deklarierst?


Delphi-Quellcode:
[...]

var
  form1:tform1;
  <-- Hier einfügen: Dir:string;

[...]
in der Unit3 kannst du die dann verwenden. Um Konflikte zu vermeiden kannst du auch schreiben UNIT1.DIR

mr-unbekannt 14. Dez 2005 17:12

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?

mr. boj 14. Dez 2005 17:16

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:
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;
Also, nun sollt's klappen.

mr. boj 14. Dez 2005 17:25

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;

mr-unbekannt 15. Dez 2005 19:05

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

mr. boj 15. Dez 2005 19:58

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??

ichbins 15. Dez 2005 20:11

Re: speicherpfad als variable
 
Ohne Datei geht es diesbezüglich dass du den Wert in die Registry speicherst.
Delphi-Quellcode:
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;
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.


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;


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:21 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz