Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Einträge in der Listbox spezifizieren (https://www.delphipraxis.net/105993-eintraege-der-listbox-spezifizieren.html)

Counter909 3. Jan 2008 13:49


Einträge in der Listbox spezifizieren
 
Hallo


ich hatte mir diese Woche so das Thema Registry.Keys vorgenommen und habe mir dann mal so ein simples Programm geschrieben, mit dem ganz einfach der Autostart ausgelesen wird und ich anschließend auch beliebige Programm hinzufügen kann.... das hab ich auch erfolgreich hinbekommen, doch jetzt möchte ich noch,
dass man die aufgelisteten Keys in einer Listbox wieder löschen kann.

also markierte Einträge in der Listbox löschen ist ja wiederrum ganz simpel doch ich verstehe (auch von der theorie) noch nicht ganz , wie ich die Markierten Einträge in der Listbox den bestimmten Werten in der Registry zuordnen kann :-(



hatte als erstes i-wie gedacht, dass beim auslesen in die listbox schon jeder String einem wert zugeordnet wert, den er bei läschen mit dem markierten vergleicht oder so...aber umgesetzt bekommt ich das i-wie nicht


wäre einer Hilfe oder Denkansatz sehr dankbar :)

gruß

DeddyH 3. Jan 2008 13:52

Re: Einträge in der Listbox spezifizieren
 
Was steht denn in deiner ListBox? Der Schlüssel oder der Wert?

Counter909 3. Jan 2008 14:02

Re: Einträge in der Listbox spezifizieren
 
aso... neee



Die Namen stehen da. also mit getvaluenames.(listbox...)

DeddyH 3. Jan 2008 14:06

Re: Einträge in der Listbox spezifizieren
 
Du könntest Dir mal die Methode AddObject von TStrings ansehen.

[edit] Oder eine ListView nehmen, in der Du den Schlüssel auch in eine Spalte schreibst ;) [/edit]

Counter909 3. Jan 2008 14:15

Re: Einträge in der Listbox spezifizieren
 
also ist es dann einfacher mit den werten zu arbeiten ?
und dem markierten/selecten kann man die werte zuordnen...
ok mal schauen ob ich so weiterkomme :mrgreen:

Counter909 3. Jan 2008 16:04

Re: Einträge in der Listbox spezifizieren
 
*push*


hmm ich hab das zwar was gefunden. wie ich jetzt strings zu einer listbox einfüge und dann mit hilfe addobject das genauer bestimme, aber das hilft mir ja i.wie nicht weiter, weil ich erst:


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 ?

bitsetter 4. Jan 2008 01:30

Re: Einträge in der Listbox spezifizieren
 
Zitat:

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:43 Uhr.

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