Autor Beitrag
mhxcm
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 54



BeitragVerfasst: Di 19.02.08 10:06 
Morgääääääähhhhnnnnn....

Habe folgendes Problemschen. Ich habe eine Benutzersteuerung in der bis zu 5 Benutzer angelegt werden können. Wenn ich jetzt 5 Benutzer angelegt hab (stehen in ner ini) und sagen wir mal Benutzer 3 lösche, möchte ich das ich einen neuen Benutzer anlegen kann, der automatisch zu Benutzer 3 wird (da ja die Sektionen 1,2,4,5 belegt sind). Egal was ich auch probiere, er legt mir, wenn noch nichts in der ini steht 5 gleiche Benutzer an, wenn ich nur einen anlegen will.

Quellcode:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure THauptmenue.btnbenutzerClick(Sender: TObject);
begin
     ini := Tinifile.Create('C:\\Programme\stress.ini');
         try
            ini.ReadSections(Hauptmenue.ListBox1.Items);
         finally
            ini.free;
     end;

     if application.messagebox('Wollen Sie einen neuen Benutzer anlegen?','ACHTUNG!!!',IDOK) = IDOK then
     begin
          var_j :=(Hauptmenue.ListBox1.Items.Count) ; //Hier lese ich aus, wieviele Benutzer ich schon habe


Das steht in meinem Hauptmenü, zum auslesen wieviele Benutzer schon vorhanden sind

ausblenden volle Höhe Delphi-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:
34:
35:
36:
procedure Tbenutzer.btnokbenutzerClick(Sender: TObject);
var i : integer;
begin
     //hauptmenue.lblname.caption := edtname.text;
     //hauptmenue.lblvorname.caption := edtvorname.text;
     //hauptmenue.lblspielername.caption := edtspielname.text;




     if var_j < 5 then
        begin
             var_j:=var_j + 1;
                                   // <-- hier muss halt noch was hin, hab aber schon soviel probiert
             begin
             
                         ini := TiniFile.Create('C:\\Programme\stress.ini');
                         if ini.SectionExists('Benutzer'+inttostr(var_j)) then
                            ini.free

                         else
                             try
                             ini.WriteString('Benutzer'+inttostr(var_j),'Name',edtname.text);
                             ini.WriteString('Benutzer'+inttostr(var_j),'Vorname',edtvorname.text);
                             ini.WriteString('Benutzer'+inttostr(var_j),'Spielname',edtspielname.text);
                             finally
                             ini.free;
                             end;
                         ini2 := TiniFile.Create('C:\\Programme\zähler.ini');
                              try
                              ini2.WriteInteger('Sektion','Zähler',var_j) ;
                              finally
                              ini2.free
                              end;

                    end;


Will halt das er selbständig erkännt, aha, ich hab noch keinen also lege ich nur den ersten an, oder aha, ich hab die Benutzer 1,2,3,5 also kann ich noch einen mit Identität 4 anlegen.

Kann jemand helfen???

mfg Markus

_________________
1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101") ;)
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Di 19.02.08 10:43 
Ich sehe keine Schleife, in der du alle Einträge durchgehst.
Außerdem kannst du nicht einfach die Anzahl speichern, sondern du musst entweder speichern, wo ggf. noch ein Benutzer hin kann oder jedes Mal, wenn notwendig, selbst ermitteln wo noch was frei ist.

Ich empfehle die zweite Variante.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 19.02.08 10:49 
Moin!

Bau deine INI so auf, dann ist das einfacher: :idea:
ausblenden Quelltext
1:
2:
3:
4:
5:
[Benutzer]
Count=3
User1=Heinz
User2=Willi
User3=Karl

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
mhxcm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 54



BeitragVerfasst: Di 19.02.08 10:54 
@Narses: Meine INI sieht so aus
ausblenden Delphi-Quelltext
1:
2:
3:
4:
[Benutzer1]
Name=Lustig
Vorname=Peter
Spielname=Bauwagen


Hab halt zu den verschiedenen Benutzern noch eindeutige Erkennungszeichen. Da soll später auch noch versch. Einstellungen zu den Benutzern gespeichert werden. Weiß nicht ob das dann mit deiner Variante der INI Datei funktioniert! Zumindest wüsste ich jetzt nicht wie???!

Trotzdem thx for the idea

_________________
1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101") ;)
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 19.02.08 11:29 
Moin!
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[Benutzer]
Count=2
Name1=Lustig
Vorname1=Peter
Spielname1=Bauwagen
Name2=Lachhaft
Vorname2=Ludger
Spielname2=Trecker

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
mhxcm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 54



BeitragVerfasst: Di 19.02.08 11:50 
Ja, hast recht, ist mir im Nachhinein auch eingefallen. Habe es mittlerweile mal vorerst so gelöst:


user profile iconmhxcm hat folgendes geschrieben:
ausblenden volle Höhe Delphi-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:
34:
35:
36:
37:
38:
procedure Tbenutzer.btnokbenutzerClick(Sender: TObject);
var i : integer;
begin
     //hauptmenue.lblname.caption := edtname.text;
     //hauptmenue.lblvorname.caption := edtvorname.text;
     //hauptmenue.lblspielername.caption := edtspielname.text;




     if var_j < 5 then
        begin
             var_j:=var_j + 1;
             for i:= 1 to 5 do
             begin
             
                         ini := TiniFile.Create('C:\\Programme\stress.ini');
                         if ini.SectionExists('Benutzer'+inttostr(i)) then
                            ini.free

                         else
                         break; // <-- dadurch stoppt er bei freiem benutzer (i)
                         end; 
                             try
                             ini.WriteString('Benutzer'+inttostr(i),'Name',edtname.text);
                             ini.WriteString('Benutzer'+inttostr(i),'Vorname',edtvorname.text);
                             ini.WriteString('Benutzer'+inttostr(i),'Spielname',edtspielname.text);
                             finally
                             ini.free;
                             end;
                         ini2 := TiniFile.Create('C:\\Programme\zähler.ini');
                              try
                              ini2.WriteInteger('Sektion','Zähler',var_j) ;
                              finally
                              ini2.free
                              end;

                    end;




Aber werde deine INI Variante noch im Hinterkopf behalten... thx für die Antworten

mfg Markus

_________________
1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101") ;)
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Di 19.02.08 11:59 
Du erhöhst var_j genau einmal. Wozu?
Dann schreibst du es auch noch in die zähler.ini-Datei. Bist du dir sicher, dass du var_j nicht in der For-Schleife erhöhen willst? (Aber bitte nur dann, wenn der Benutzerplatz belegt ist, sonst wunderst du dich wieder... =) )

Edit: Außerdem reicht es, die ini2 nach der For-Schleife zu ändern.

LG,
Xong
mhxcm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 54



BeitragVerfasst: Di 19.02.08 12:18 
Danke für den Hinweis :zustimm:

ausblenden Delphi-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:
procedure Tbenutzer.btnokbenutzerClick(Sender: TObject);
var i : integer;
begin
   
             for i:= 1  to 5 do
             begin
                         ini := TiniFile.Create('C:\\Programme\stress.ini');
                         if ini.SectionExists('Benutzer'+inttostr(i)) then
                            ini.free

                         else
                         break;
                         end;
                         if i > 5 then
                         MessageBox(0,'Die höchstzulässige Anzahl an Benutzern wurde erreicht! Bitte löschen Sie einen Benutzer zuerst, um ein neues Profil anzulegen!!! MFG','fehler',ID_OK)

                         else
                             try
                             ini.WriteString('Benutzer'+inttostr(i),'Name',edtname.text);
                             ini.WriteString('Benutzer'+inttostr(i),'Vorname',edtvorname.text);
                             ini.WriteString('Benutzer'+inttostr(i),'Spielname',edtspielname.text);
                             finally
                             ini.free;
                             end ;
                      
     benutzer.visible := false;
     hauptmenue.visible := true;
     end;


Ich brauche nun die zähler.ini gar nicht mehr.... aber wäre die nicht sowieso, nachdem die Schleife unterbrochen wird erst beschrieben worden??? Oder gibt es auch nen STOP befehl, der dann wirklich die komplette Schleife Stopt und mit den folgenden Befehlen weiterarbeitet?

mfg Markus

_________________
1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101") ;)
Xong
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 113

WIN 2000
Borland Developer Studio 2006
BeitragVerfasst: Di 19.02.08 12:28 
user profile iconmhxcm hat folgendes geschrieben:
Danke für den Hinweis :zustimm:
ausblenden Delphi-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:
procedure Tbenutzer.btnokbenutzerClick(Sender: TObject);
var i : integer;
begin
   
             for i:= 1  to 5 do
             begin
               ini := TiniFile.Create('C:\\Programme\stress.ini');
               if ini.SectionExists('Benutzer'+inttostr(i)) then
                 ini.free
               else
                 break;
             end;

             if i > 5 then // Wird nie erreicht, da i maximal 5 wird.
               MessageBox(0,'Die höchstzulässige Anzahl an Benutzern wurde erreicht! Bitte löschen Sie einen Benutzer zuerst, um ein neues Profil anzulegen!!! MFG','fehler',ID_OK)
             else
               try
                 ini.WriteString('Benutzer'+inttostr(i),'Name',edtname.text);
                 ini.WriteString('Benutzer'+inttostr(i),'Vorname',edtvorname.text);
                 ini.WriteString('Benutzer'+inttostr(i),'Spielname',edtspielname.text);
               finally
                 ini.free;
               end;
                      
               benutzer.visible := false;
               hauptmenue.visible := true;
end;

Beachte meinen Kommentar. ^^
Ich hab´s auch ein bisschen besser eingerückt...

user profile iconmhxcm hat folgendes geschrieben:
Ich brauche nun die zähler.ini gar nicht mehr.... aber wäre die nicht sowieso, nachdem die Schleife unterbrochen wird erst beschrieben worden??? Oder gibt es auch nen STOP befehl, der dann wirklich die komplette Schleife Stopt und mit den folgenden Befehlen weiterarbeitet?

Nä! Die wurde ständig neu beschrieben. Ist zwar kein Fehler, aber eben nicht notwendig.
Aber wenn du die Datei sowieso nicht mehr brauchst, ist ja alles in Butter! =)

Moderiert von user profile iconNarses: Quote-Tag repariert
mhxcm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 54



BeitragVerfasst: Di 19.02.08 12:34 
ok, hab dann das ">" durch ein "=" ersetzt... eingerückt hätte ich noch ;)! Also ruft "break" einen Abbruch der Schleife hervor und der Rest der Befehle wird durchgeführt?



Edit: Aber wenn ich da en " = " hab, läuft er mir auf einen Fehler!!! :(

_________________
1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101") ;)
Blackheart666
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: Di 19.02.08 14:36 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
 var
  Ini:TIniFile;
begin
  inc(i);
  ini := TiniFile.Create(ExtractFilePath(Paramstr(0))+'stress.ini');
  if i > 5 then MessageBox(0,'Die höchstzulässige Anzahl an Benutzern wurde erreicht! Bitte löschen Sie einen Benutzer zuerst, um ein neues Profil anzulegen!!! MFG','fehler',ID_OK);
  if i < 6 then
  begin
  if ini.SectionExists('Benutzer'+inttostr(i)) = false then
    begin
     try
       ini.WriteString('Benutzer'+inttostr(i),'Name',edtname.text);
       ini.WriteString('Benutzer'+inttostr(i),'Vorname',edtvorname.text);
       ini.WriteString('Benutzer'+inttostr(i),'Spielname',edtspielname.text);
     finally
     ini.free;
     end;
  end;
 end;
end;

_________________
Blackheart666
Der Irrsinn ist bei Einzelnen etwas Seltenes, - aber bei Gruppen, Parteien, Völkern, Zeiten die Regel. (Friedrich Nietzsche)
mhxcm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 54



BeitragVerfasst: Di 19.02.08 15:34 
Thanks :zustimm:

_________________
1100101 heißt ich Liebe dich ich möchte bei dir sein! (search Song:"Das Modul - 1100101") ;)