Einzelnen Beitrag anzeigen

Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Einträge in der Listbox spezifizieren

  Alt 4. Jan 2008, 01:30
Zitat von Counter909:
registry.getvaluename(listbox...) damit alle namen in der liste sind


aber wenn ich es mit addobject mache, dann muss ich ja eigentlich jeden namen einzelnt einfügen und bestimmen, doch dann haut das ja mit dem entfernen wieder nicht hin, oder ?
Hallo,

du kannst die Werte ja zuerst einer Stringliste hinzufügen und deren Einträge dann mit AddObject der Listbox hinzufügen.
Delphi-Quellcode:
uses
  Registry;

type
  TMyKeys = class(TObject)
    RootKey: HKEY;
    Key, Value: AnsiString;
end;

//Werte Der Listbox hinzufügen

var
  Reg: TRegistry;
  ValueList: TStringList;
  i: integer;
  myKeys: TMyKeys;
  Key: AnsiString;
  RootKey: HKEY;
begin
  Key:= 'Software\Microsoft\Windows\CurrentVersion\Run';
  RootKey:= HKEY_LOCAL_MACHINE;
  ValueList:= TStringList.Create;
  try
    Reg := TRegistry.Create;
    Reg.RootKey := RootKey;
    try
      if Reg.OpenKey(Key, false) then
      begin
        Reg.GetValueNames(ValueList);
        Reg.CloseKey;
      end;
    finally
      Reg.Free;
    end;

    for i:= 0 to Pred(ValueList.Count) do
    begin
      myKeys:= TMyKeys.Create;
      myKeys.RootKey:= RootKey;
      myKeys.Key:= Key;
      myKeys.Value:= ValueList.Strings[i];
      ListBox1.Items.AddObject(ValueList.Strings[i], myKeys);
    end;
  finally
    ValueList.Free;
  end;

//markierten Wert löschen

var
  myKeys: TMyKeys;
  Reg: TRegistry;
begin
  with Listbox1 do
  begin
    if ItemIndex> -1 then
    begin
      if Items.Objects[ItemIndex] is TMyKeys then
      begin
        myKeys:= Items.Objects[ItemIndex] as TMyKeys;
        if MessageDlg(Format('Den Wert "%s" in der Registry löschen?', [myKeys.Value]),
          mtConfirmation, [mbYes, mbNo], 0)= mrYes then
        begin
          Reg := TRegistry.Create;
          Reg.RootKey := myKeys.RootKey;
          try
            if Reg.OpenKey(myKeys.Key, false) then
            begin
              if Reg.DeleteValue(myKeys.Value) then
              begin
                if Items.Objects[ItemIndex] is TMyKeys then
                  TMyKeys(Items.Objects[ItemIndex]).Free;
                Items.Delete(ItemIndex);
              end;
              Reg.CloseKey;
            end;
          finally
            Reg.Free;
          end;
        end;
      end;
    end;
  end;

//TMyKeys wieder freigeben

var
  loop : integer;
begin
  with Listbox1 do
  begin
    for loop := 0 to pred(Items.Count) do
      if Items.Objects[loop] is TMyKeys then
        TMyKeys(Items.Objects[loop]).Free;
  end;
Edit: Du könntest die Variablen RootKey und Key auch im private Abschnitt deklarieren.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat