Autor Beitrag
nina
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Do 10.04.03 14:59 
Hallo!

Ich möchte würde gerne einen 'Unterschlüssel' in der Registry löschen! Ich habe es auch schon mit diesem Code versucht, allerdings löscht er mir dann den ganzen Schlüssel!

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
Reg := TRegistry.Create; //Create = Im Speicher ist Platz reserviert/ erzeugt Speicherplatz für die jeweilige Variable
     try
       Val := TStringList.Create; //Create = Im Speicher ist Platz reserviert/ erzeugt Speicherplatz für die jeweilige Variable
       try
         Reg.RootKey := HKEY_USERs; // Abschnitt in Registrierung
         if not Reg.OpenKey('Pfad des Schlüssels aus der Registry',False) then
            ShowMessage('Fehler beim Öffnen des Schlüssels')
         else begin
              if MessageDlg('Wollen Sie die Einträge wirklich löschen?',mtInformation,[mbYes, mbNo], 0) = mrYes
              then begin
                   Reg.GetValueNames(Val); // Speichert die Namen in die TStringList Val
                   Reg.DeleteKey('Pfad des Schlüssels aus der Registry');
                   entries.Checked := False; //Hacken werden nach dem löschen nicht mehr angezeigt
              end;
         end;//Reg.OpenKey
        finally
          Val.Free; // Setzt nach dem Löschen den Speicher wieder frei
        end;//Val.Free
     finally
       Reg.Free; // Setzt nach dem Löschen den Speicher wieder frei
     end;//Reg.Free


Ich allerdings möchte nur den Eintrag in dem Schlüssel löschen!

Weiss jemand wie das funktioniert!

Ich hätte da noch eine Frage, kann ich den Inhalt eines Schlüssels auch irgendwie ändern, z.B. von No auf Yes und umgekehrt?

nina
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 10.04.03 15:21 
nina hat folgendes geschrieben:
[...] allerdings löscht er mir dann den ganzen Schlüssel!

Wundert mich nicht:
Zitat:
ausblenden Quelltext
1:
2:
3:
{ ... }
                   Reg.DeleteKey('Pfad des Schlüssels aus der Registry');
{ ...}

Zitat:
Ich allerdings möchte nur den Eintrag in dem Schlüssel löschen!

Weiss jemand wie das funktioniert!

Ja, o.g. Zeile weglassen.

Zitat:
Ich hätte da noch eine Frage, kann ich den Inhalt eines Schlüssels auch irgendwie ändern, z.B. von No auf Yes und umgekehrt?

Vielleicht solltest du dir erst mal darüber klar werden (und uns deutlich machen) ob du mit
Zitat:
Inhalt eines Schlüssels

einen untergeordneten Eintrag, einen untergeordneten Schlüssel oder vielleicht den so genannten Standardwert des Schlüssels meinst. Es geht sicher, aber falls du einen Schlüssel umbenennen willst, dann nur mit einem kleinen Umweg.

Grüße.
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 10.04.03 15:26 
Titel: Hi nina
ich weiß jetzt zwar ned genau wie du das meinst mit den schlüssels löschen aber werte schreibt und liest man mit:

ich verwende hier Schlüssel für die Datensätze innerhalb eines Schlüssel und die Werte der Datensätze sind die Values. ich weiß ned so recht wie ich das beschreiben soll :)

ausblenden Quelltext
1:
2:
  ShowMessage(Reg.ReadString('Schlüsselname'));  // Gibt Value des  Schlüssels "Testschlüssel" wieder
 Reg.WriteString('Testschlüssel', 'neuer wert');  // trägt "neuer wert" als Value für den Schlüssel "Testschlüssel" ein und ich glaube falls der ned existiert wird er angelegt


naja die delphi hilfe is da eingentlich ganz hilfreich.

na dann bye


Zuletzt bearbeitet von Inferno am Fr 11.04.03 00:42, insgesamt 1-mal bearbeitet
nina Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Do 10.04.03 15:27 
Mit Inhalt eines Schlüssels meine ich den untergeordneten Eintrag z.B im Schlüssel AutoComplete befindet sich der Eintrag no Auto... Wert no! Und diesen Wert no möchte ich auf yes umwandeln!

Danke schon mal für die erste Hilfe!

nina
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Do 10.04.03 21:22 
Dann wäre es in dem Fall "WriteString". Damit kannst du nicht nur neue Einträge anlegen, du kannst vorhandenen Einträgen auch neue Werte zuweisen, etwa
ausblenden Quelltext
1:
reg.WriteString('no Auto','yes');					

Vorher Schlüssel öffnen, natürlich.

Aber schau mal in die Hilfe von Delphi, wie Inferno vorschlug. Da müssten auch passende Quellcode-Beispiele drin sein.
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Fr 11.04.03 00:46 
Titel: hi
Sorry hatte bei meinem post oben bei Reg.ReadString und Reg.WriteString das "string" vergessen. :shock:

Es gibt davon noch viele andere möglichkeiten:

ausblenden Quelltext
1:
2:
3:
4:
  Reg.ReadBool(...);
  Reg.ReadCurrency(...);
  Reg.ReadInteger(...);
  ...


natürlich alles auch mit "Reg.Write..."

aber das steht glaube ich alles in der hilfe. :lol:

tschü
nina Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Fr 11.04.03 07:46 
Hallo!

Schon mal danke für Eure schnelle Hilfe!

Ich werde mich gleich mal ran machen und mich wieder melden wenn es nicht klappen sollte!

nina
nina Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Do 17.04.03 09:35 
Hallo!

Sorry das ich mich jetzt erst wieder melde, allerdings hatte ich noch keine Zeit zum antworten! :oops: :oops:

Zitat:
ausblenden Quelltext
1:
2:
3:
{ ... }
                   Reg.DeleteKey('Pfad des Schlüssels aus der Registry');
{ ...}

Zitat:
Ich allerdings möchte nur den Eintrag in dem Schlüssel löschen!

Weiss jemand wie das funktioniert!


Zitat:
Ja, o.g. Zeile weglassen.


Wenn ich aber die Funktion oben weglasse, dann löscht er doch gar nichts oder seh ich das falsch?

Vielleicht hab ich mich auch etwas undeutlich ausgedrückt! Ich möchte ja schon den Schlüssel löschen, allerdings nur dem sein Inhalt, also nicht den ganzen Ordner!

Oder muss ich anstelle von o.g. Code einen anderen nehmen?

In der Hilfe hab ich auch schon nachgesehen allerdings hat das auch nicht so funktioniert!

Danke!

nina


Zuletzt bearbeitet von nina am Do 17.04.03 14:13, insgesamt 1-mal bearbeitet
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Do 17.04.03 10:56 
Hi
wenn du einen Wert aus einem Schlüssel löschen willst dann verwendest du
ausblenden Quelltext
1:
Reg.DeleteValue(WertName);					

Wenn du also alle Werte eines Schlüssel löschen willst, dann must du Schlüssel öffnen, alle Werte holen (GetValueNames) und anschliessend in einer Schleife diese Werte löschen.
Zitat:

In der Hilfe hab ich auch schon nachgesehen allerdings hat das auch nicht so funktioniert!

Wo hast du denn da nachgeschaut? :mrgreen: Unter GetValueNames findest du ein Beispiel, da brauchst du nur noch ein paar Zeilen ändern, schon hast du genau was du brauchst.

Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
wulfskin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1349
Erhaltene Danke: 1

Win XP
D5 Pers (SSL), D2005 Pro, C, C#
BeitragVerfasst: Do 17.04.03 13:53 
...oder du löscht den Schlüssel sammt Inhalt und erstellst nur den SChlüssel wieder. So wird es wohl schneller gehen ;)!

Gruß wulfskin!

_________________
Manche antworten um ihren Beitragszähler zu erhöhen, andere um zu Helfen.
nina Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Do 17.04.03 14:26 
Hi!

Genau den gleichen Code habe ich auch in der Hilfe gefunden uns ausprobiert, aber wie schon gesagt, er hat nicht funktioniert. Somit habe ich dann aus dem Reg.DeleteKey, Reg.DeleteValue gemacht. Allerdings löscht er mir diesen unterschlüssel ebenfalls nicht!

Hier ist der Code aus der Hilfe mit meinen Werten geändert, vielleicht findet ja jemand von Euch den Fehler!

ausblenden 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:
 Reg:=TRegistry.Create;
  try
    Val:=TStringList.Create;
    try
      Reg.RootKey:=HKey_USERS; // Abschnitt in Registrierung
      if not Reg.OpenKey('Angegebener Pfad des Schlüssels',True) then
        ShowMessage('Fehler beim Öffnen des Schlüssels')
      else
      begin
        Reg.GetValueNames(Val);

        for I:=0 to Val.Count-1 do
        begin
          ShowMessage(''Angegebener Pfad des Schlüssels' + Chr(13) +
                      'hat einen Eintrag namens '+Val.Strings[I]+Chr(13)+
                      'mit dem Wert '+Reg.ReadString(Val.Strings[I]));
        end;
        if MessageDlg('Soll der Schlüssel mit seinen Werten gelöscht werden?'
                     ,Mtinformation,[mbYes,mbNo],0)=mryes then
           Reg.DeleteValue('Wert des Schlüssels');

      end;
    finally
      Val.Free;
    end;
  finally
    Reg.Free;
  end;



@wulfskin: Ich möchte nicht den ganzen Schlüssel löschen, da sich weitere Unterschlüssel darin befinden!

Nina
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Do 17.04.03 15:19 
Titel: hi nina
ich würde dir gern ein beispielprog schicken wenn du das willst.

musst mir nur deine email adresse sagen :lol:



bye
nina Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Do 17.04.03 15:23 
Hallo Inferno!

Ich habe Dir so eben meine e-mail adresse zugeschickt!!!

Danke!!!

nina :)
LCS
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1305
Erhaltene Danke: 1

WIN 7, WIN 8
Delphi XE5, Delphi XE, Delphi 2007
BeitragVerfasst: Fr 18.04.03 09:15 
Hallo Nina
wenn das tatsächlich so in deinem Programm drinsteht dann solltest du das ändern:
ausblenden Quelltext
1:
2:
3:
        if MessageDlg('Soll der Schlüssel mit seinen Werten gelöscht werden?' 
                     ,Mtinformation,[mbYes,mbNo],0)=mryes then 
           Reg.DeleteValue(Val[i]); //Hier war der Fehler


Gruss Lothar

_________________
Der BH ist für die Brust, der Plan ist für'n Ar...
nina Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 62



BeitragVerfasst: Mi 23.04.03 08:11 
Hallo!

Danke schon mal für Eure Hilfe!

Ich werde Eure Ratschläge und Hinweise ausprobieren und mich dann wieder melden!

nina :rofl:
Inferno
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 76



BeitragVerfasst: Mi 23.04.03 15:01 
Titel: hi nina
haste die email erhalten?

bye