Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Mark. ListBox-Eintrag aus .ini löschen (https://www.delphipraxis.net/86168-mark-listbox-eintrag-aus-ini-loeschen.html)

LOMBI 10. Feb 2007 11:02


Mark. ListBox-Eintrag aus .ini löschen
 
Hi,

mit diesem Code hole ich aus einer .ini die Benutzer in die ListBox:

Delphi-Quellcode:
...
var                                   //Benutzer in der ListBox anzeigen
  ini: TIniFile;
begin
  with ListBoxBenutzer do
  begin
    try
    ini := TiniFile.Create(ExtractFilePath(Application.ExeName) + 'p.ini');
    ini.ReadSection('User', ListBoxBenutzer.Items);
    finally
    ini.Free;
    end;
Ein markierter Eintrag soll aus der ListBox und gleichzeitig aus der .ini gelöscht werden.

Delphi-Quellcode:
...
begin
   with ListBoxBenutzer do
   begin
   if ItemIndex <> - 1  then
     if MessageDlg('Markierten Benutzer wirklich löschen?',
     mtConfirmation, [mbYes, mbNo], 0) = mrYes then
     begin
     Items.Delete(ItemIndex);
Wer hilft mir bitte die Zeile aus der .ini zu löschen?

Gruß
Lombi

p0w3r5tr34m3r 10. Feb 2007 11:13

Re: Mark. ListBox-Eintrag aus .ini löschen
 
Delphi-Quellcode:
if listboxbenutzer.items[listboxbenutzer.itemindex] <> '' then begin
  listboxbenutzer.delete(listboxbenutzer.itemindex);
  ini.erasesection(listboxbenutzer.items[listboxbenutzer.itemindex]);
end;
müsste eigentlich so gewesen sein ;) ansonsten guck dir die erase und delete funktionen der unit IniFiles an

so long,
p0w3r5tr34m3r

marabu 10. Feb 2007 11:54

Re: Mark. ListBox-Eintrag aus .ini löschen
 
Hallo ihr zwei,

da der Zugriffsschlüssel für die INI-Datei das ListBox-Item ist, darf es erst gelöscht werden, wenn die INI-Datei bearbeitet wurde. Die Prüfung, ob überhaupt ein Item markiert wurde, würde ich außerhalb des event handlers machen und darüber den Button erst aktivieren (Button.Enabled := ListBox.ItemIndex >= 0). Bei der Sicherheitsfrage sollte man die wichtige Information (um welchen Benutzer es sich handelt) gleich mit rein packen. Wenn der gerade aktive Benutzer nicht gelöscht werden darf, dann muss man auch das prüfen (bei Button.Enabled := ...).

Delphi-Quellcode:
resourcestring
  S_USERSECTION = 'Users';
  S_SAFETYFIRST = 'Benutzer "%s" löschen?';

procedure TUserForm.DeleteButtonClick(Sender: TObject);
var
  msg: string;
begin
  with ListBox do
  begin
    msg := Format(S_SAFETYFIRST, [Items[ItemIndex]);
    if MessageDlg(msg, mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
      ini.DeleteKey(S_USERSECTION, Items[ItemIndex]);
      Items.Delete(ItemIndex);
    end;
end;
Getippt und nicht getestet.

Freundliche Grüße

LOMBI 10. Feb 2007 12:39

Re: Mark. ListBox-Eintrag aus .ini löschen
 
Hallo und danke ihr beiden,

mit folgendem Code erhalte ich eine Zugriffsverletzung bzw. Meldung:
"var 'ini' ist möglicherweise nicht initialisiert worden."


Delphi-Quellcode:
var
  msg: string;
  ini: TiniFile;
begin
  with ListBoxBenutzer do
  begin
    msg := Format(S_SAFETYFIRST, [Items[ItemIndex]]);
    if MessageDlg(msg, mtConfirmation, [mbYes, mbNo], 0) = mrYes then
    begin
     ini.DeleteKey(S_USERSECTION, Items[ItemIndex]);      <= hier kommt es zur Meldung!
     Items.Delete(ItemIndex);
    end;
Schöne Grüße
Lombi

bitsetter 10. Feb 2007 12:48

Re: Mark. ListBox-Eintrag aus .ini löschen
 
Hi,
du must vorher
Delphi-Quellcode:
ini:= TInifile.Create();
aufrufen, dann ist die Meldung weg.

LOMBI 10. Feb 2007 19:20

Re: Mark. ListBox-Eintrag aus .ini löschen
 
Hallo bitsetter,

hatte ich tatsächlich übersehen. Vielen Dank!

Der in der ListBox markierte Eintrag wird gelöscht, nicht aber die Zeile in der .ini.
Nach dem Ausführen der Anwendung wird die .ini komplett in die ListBox geladen, inkl.
der zuvor entfernten ListBox-Einträge.

Gruß
Lombi

marabu 11. Feb 2007 08:24

Re: Mark. ListBox-Eintrag aus .ini löschen
 
Guten Morgen Lombi,

überprüfe mal den Abschnittsnamen. Ich habe ihn in der Konstante S_USERSECTION im Plural angegeben, du in deinem Beitrag #1 aber im Singular. Du solltest die Konstante an einer zentralen Stelle definieren und dann auch überall im Programm verwenden, sonst ist der wesentliche Vorteil (Anpassungen an einer Stelle) nicht gegeben.

Schönes Wochenende

xZise 11. Feb 2007 09:50

Re: Mark. ListBox-Eintrag aus .ini löschen
 
Hi LOMBI,

Ich hoffe mal, dass du weißt, was du von marabu kopiert hast... Ansonsten ist ja sinnlos...

LOMBI 14. Feb 2007 14:42

Re: Mark. ListBox-Eintrag aus .ini löschen
 
Hallo marabu!

Zitat:

Wenn der gerade aktive Benutzer nicht gelöscht werden darf, dann muss man auch das prüfen (bei Button.Enabled := ...).
Wie bitte prüft das Programm, welcher Benutzer aus der .ini gerade angemeldet ist?
Könnten u.U. auch mehrere Benutzer aktiv sein?

Viele Grüße
Lombi


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:57 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