Entwickler-Ecke

Grafische Benutzeroberflächen (VCL & FireMonkey) - Bilder in TTreeView


LH_Freak - Di 28.12.04 19:12
Titel: Bilder in TTreeView
Ich habe in ein TTreeView Ordner hinzugefügt, und vorher lade ich noch Bilder in eine ImageList. Aber zeigt mir dann bei allen Punkten die selben Bilder an.
Aber als ich versucht hab, den ImageIndex von jedem Ordner zu erhöhen, bringt er mir eine Fehlermeldung.

Mein Quelltext:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
        Avatar_Load.Picture.LoadFromFile(UserArray[int].avatar); // Avatar_load ist ein normales Image
        Avatars.Add(Avatar_load.Picture.Bitmap,Avatar_load.Picture.Bitmap);

        For int2 := 0 to Avatars.Count - 1 do
          UserTree[int].ImageIndex := int2;

        UserAuswahl.Items.Add(Usertree[int],Userarray[int].Nickname);


Bitte helft mir!


AXMD - Di 28.12.04 19:28
Titel: Re: Bilder in TTreeView
LH_Freak hat folgendes geschrieben:
bringt er mir eine Fehlermeldung


Welche Fehlermeldung?

Zudem hast du zwei Arrays (UserTree, UserArray) und "Avatars". Sind die alle gleich groß? Warum zählst du bis Avatars.Count - 1 und schreibst in UserTree?

AXMD


LH_Freak - Di 28.12.04 19:38

Zitat:
Was für eine Fehlermeldung?



Quelltext
1:
2:
Im Projekt Project1.exe ist eine Exception der Klasse EAccessViolation aufgetreten.
Meldung: 'Zugriffsverletzung bei Adresse 00432A76 in Modul 'Project1.exe'. Lesen von Adresse 00000024'. Prozess wurde angehalten. Mit einzelne Anweisung oder Start fortsetzen!


Zitat:

Zudem hast du zwei Arrays (UserTree, UserArray) und "Avatars".



Delphi-Quelltext
1:
2:
3:
4:
5:
var
usertree: array [1..5of TTreeNode;
userarray: array [1..5of TUser // TUser ist ein von mir erstellter Record

Avatars: TImageList;


AXMD - Di 28.12.04 19:41
Titel: Re: Bilder in TTreeView
AXMD hat folgendes geschrieben:
Zudem hast du zwei Arrays (UserTree, UserArray) und "Avatars". Sind die alle gleich groß? Warum zählst du bis Avatars.Count - 1 und schreibst in UserTree?


Diese beiden Fragen hast du nicht beantwortet; die wären interessant...

AXMD


LH_Freak - Di 28.12.04 19:45

Bei Avatar.Count gibt er mir ja 2 zurück, aber da es ja bei 0 zu zählen anfängt, muss ich ja auch eins abziehen, da nur 2 Bilder in der ImageList sind.


Delphi-Quelltext
1:
2:
UserArray: array [1..5] of TUser;
UserTree: array [1..5] of TTreeNode;


AXMD - Di 28.12.04 19:52

:lol: Ich hab den Fehler: du zählst int2 in der Schleife hoch, nimmst aber int für den Index...

AXMD


LH_Freak - Di 28.12.04 19:59

Ne, des stimmt schon, den Int zähl ich davor schon hoch.


AXMD - Di 28.12.04 20:01

Nein, das ist Unsinn. Würde dein Code stimmen, würdest du den Imageindex fünfmal hintereinander ändern. Das ergibt keinen Sinn ;)

AXMD


LH_Freak - Di 28.12.04 20:04

Hier der komplette quelltext:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
if FileExists(Ort + '\' + 'users.dat'then
  begin
    UserINI := TInifile.Create(Ort + '\'+'users.dat');
    UserAnz := UserINI.ReadInteger('Main','AnzahlUser',0);
      For int := 1 to UserAnz do begin
        UserArray[int].Nickname := UserINI.ReadString('User' + IntToSt(int), 'Nickname''Test');
        UserArray[int].pw := UserINI.ReadString('user' + IntToStr(int),'PW','Test');
        userarray[int].avatar := UserINI.ReadString('User' + IntTostr(int),'Avatar','Test');

        Avatar_Load.Picture.LoadFromFile(UserArray[int].avatar);
        Avatars.Add(Avatar_load.Picture.Bitmap,Avatar_load.Picture.Bitmap);

        For int2 := 0 to Avatars.Count - 1 do
          UserTree[int].ImageIndex := int2;

        UserAuswahl.Items.Add(Usertree[int],Userarray[int].Nickname);
        Caption := IntTostr(Usertree[int].ImageIndex) + IntToStr(avatars.Count);
      end;


  end;


AXMD - Di 28.12.04 20:12

Aha, jetzt stimmt deine Zeile :gruebel:



LH_Freak hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
For int2 := 0 to Avatars.Count - 1 do
          UserTree[int2].ImageIndex := int2;





LH_Freak hat folgendes geschrieben:

Delphi-Quelltext
1:
2:
For int2 := 0 to Avatars.Count - 1 do
          UserTree[int].ImageIndex := int2;



AXMD


LH_Freak - Di 28.12.04 20:26

Nein, ich Hab's vorhin nur ausprobiert, und vergessen zu ändern.
Ging aber trotzdem net!