Entwickler-Ecke

Sonstiges (Delphi) - Zahl verändern?


Leathl - Mo 30.12.02 23:40
Titel: Zahl verändern?
---


Brueggendiek - Mo 30.12.02 23:53

Hallo!

Mit "Insert" kannst Du in einem String an einer bestimmten Position einen anderen String einfügen!

Also nach dem Auslesen der Registry:

Quelltext
1:
2:
  Insert('-', Edit1.Text,  5);  // 1234-123451234
  Insert('-', Edit1.Text, 11);  // 1234-12345-1234

und ggf. eine Zwischenvariable benutzten.

Gruß

Dietmar Brüggendiek


AndyB - Mo 30.12.02 23:54

Schau dir mal die Funktionen Insert und Delete in der Online Hilfe an. Ggf. kannst du auch Copy benötigen.


Dev4u.ch - Mo 30.12.02 23:54

also ich würde es so machen..



Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure TForm1.Button1Click(Sender: TObject);
var
ersten, zweiten, dritten: string;
begin
edit1.text := '1234567891234'; //Anfangswert
ersten := copy(edit1.text,1,4);
zweiten := copy(edit1.text,5,length(edit1.text)-8);
dritten := copy(edit1.text,length(edit1.text)-3,4);
edit1.text := ersten + '-' + zweiten + '-' + dritten;
end;


Leathl - Di 31.12.02 00:01

---


Brueggendiek - Di 31.12.02 00:04

Hallo!

wie sagte der erfolglose Architekt? Gerade fällt mir was ein!

Wenn Du ein solches Feld editieren willst, bei dem immer dieselbe Form vorliegt (hier: 4-5-4 Ziffern mit '-' dazwischen), sollte man auch mal einen Blick auf die Komponente "tMaskEdit" (unter "Zusätzlich" zu finden) werfen.

Gruß

Dietmar Brüggendiek


Dev4u.ch - Di 31.12.02 00:08

versuchs hiermit


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:
function Load(Key:string) : string;
Var
  Reg : TRegistry;

begin
  Reg:= TRegistry.Create;
  try
   Reg.RootKey:= HKEY_CURRENT_USER;
   Reg.OpenKey('Software\Valve\Half-Life\Settings',false);
   try
     result := Reg.ReadString(Key);
   except
     result := '';
   end;
   Reg.CloseKey;
  finally
    Reg.Free;
  end;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
ersten, zweiten, dritten: string;

begin
edit1.text := load('Key');
ersten := copy(edit1.text,1,4);
zweiten := copy(edit1.text,5,length(edit1.text)-8);
dritten := copy(edit1.text,length(edit1.text)-3,4);
edit1.text := ersten + '-' + zweiten + '-' + dritten;

end;


Brueggendiek - Di 31.12.02 00:09

Hallo nochmal!

Offensichtlich posten wir gleichzeitig - macht nichts.

Leider ist bei Insert noch was zu beachten - das gibt es mehrfach. Also mal "System.Insert" schreiben, dann weiß der Compiler, welches Insert gemeint ist. Die Unit System muß natürlich in der Uses-Klausel Deiner Unit eingetragen werden, sonst findet der Compiler das nicht!

Gruß

Dietmar Brüggendiek


AndyB - Di 31.12.02 00:11

Leathl hat folgendes geschrieben:

Quelltext
1:
2:
Insert('-', Edit1.Text,  5);
Insert('-', Edit1.Text, 11);

So kann das auch nicht funktionieren. Insert verlang als 2. Parameter einen string, der das Attribut var hat. Eine Eigenschaft, wie Edit1.Text, kann man aber nicht als var-Parameter übergeben.


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
var s: string;
begin 
  reg:= TRegistry.Create; 
  try 
    reg.Rootkey := HKEY_CURRENT_USER; 
    reg.OpenKey('SOFTWARE\Valve\Half-Life\Settings', True); 
    s := reg.ReadString('Key');
  finally 
    reg.Free; 
  end;
  Insert('-', s,  5); 
  Insert('-', s, 11); 
  Edit1.Text := s; // <-- erst hier die Text-Eigenschaft setzen
end;


Leathl - Di 31.12.02 00:17

---


Dev4u.ch - Di 31.12.02 00:22

so sollte das speichern funktionieren..


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
procedure TForm1.Button1Click(Sender: TObject);
var
Reg : TRegistry;
begin
edit1.text := copy(edit1.text,1,4)+copy(edit1.text,6,5)+copy(edit1.text,12,4);
begin
  Reg:= TRegistry.Create;
  try
   Reg.RootKey:= HKEY_CURRENT_USER;
   Reg.OpenKey('SOFTWARE\Valve\Half-Life\Settings',false);
   try
     Reg.WriteString('Key',Edit1.text);
     result := true;
   finally
     Reg.CloseKey;
     result := false;
   end;
  finally
    Reg.Free ;
  end;

end;


Leathl - Di 31.12.02 00:35

---


Visum - Di 31.12.02 15:14

Hi,
ich glaube um die Keys zu speichern wäre es einfacher eine weitere Datei anzulegen und sie darin zu speichern.
Ansonsten würde ich einen weiteren Key in die Reg schreiben, wo die Anzahl der Keys drinsteht.

Die markierte Zeile einer Listbox kannst du so auslesen:

Quelltext
1:
edit3.text:= Listbox1.Items[Listbox1.Itemindex]                    


mfG Visum


Dev4u.ch - Di 31.12.02 15:37

also den key von edit1.text kannst du ganz einfach in die listbox hinzufügen..

einfach
listbox1.items.add(edit1.text);

um anschliessend die key der Listbox in die Reg zu speichern kannst du wie folgt vorgehen..

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
var
i: integer;
reg: Tregistry;
begin

for listbox1.items.count-1 downto 0 do
begin


reg := TRegistry.Create; 
try 
  reg.Rootkey := HKEY_CURRENT_USER; 
  reg.OpenKey('SOFTWARE\Valve\Half-Life\Settings', true); 
   try 
     Reg.WriteString('HLKey'+inttostr(i),listbox1.items.strings[i]); 
   finally 
     reg.free; 

listbox1.items.delete(i); //den string der gerade hinzugefügt wurde löschen

end;
end;


Dev4u.ch - Di 31.12.02 15:40

ah noch was..

um den angeklickten der listbox als edit3.text zu nehmen benutze folgendes..


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
begin
for i:= listbox1.items.count-1 downto 0 do
begin

if listbox1.Selected[i] = true then
edit3.text := listbox1.items.strings[i];


end;
end;


Leathl - Di 31.12.02 16:09

---


Dev4u.ch - Di 31.12.02 16:10

jo habs grad gesehen..

diese Zeile ersetzen

Quelltext
1:
Reg.WriteString('HLKey'+inttostr(i),listbox1.items.strings[i]);                    

durch

Quelltext
1:
Reg.WriteString('HLKey'+inttostr(i+1),listbox1.items.strings[i]);                    


(01.01. 15:53 Tino) Code-Tags hinzugefügt.


Dev4u.ch - Di 31.12.02 16:21

hab noch nen fehler gesehen..

Quelltext
1:
for listbox1.items.count-1 downto 0 do                    

in

Quelltext
1:
for i:=listbox1.items.count-1 downto 0 do                    

ändern..


Leathl - Di 31.12.02 16:56

---