TreeView

0

Piszę przeglądarkę do programów.
Chcę w TreeView umieścić listę programów w odpowiednich kategoriach:
np.
[code]
+-Muzyka
| |-Winamp (url, foto, opis)
|
+-Grafika
| |-ACDSee (url, foto, opis)
| |-Photoshop (url, foto, opis)
+-Gry
| |-GTA VC (url, foto, opis)
| |-MOH (url, foto, opis)
|
+-Użytki
|-WinRAR (url, foto, opis)
|-Total Commander (url, foto, opis)
[/code]

W jaki sposób się za to zabrać? Czy jest możliwość żeby to zrobić w pliku INI?

0

Ale co chcesz zrobić? .. bo jeśli tylko wczytaj katalogi i pliki to robisz rekurencją (w algorytmach masz napisane), później takie drzewko najłatwiej zapisać do strumienia (cały TreeView...)

0

Po kliknięciu np. na WinAmp ma się zmienić obrazek, opis programu i klikając na przycisk "Otwórz program" ma się otworzyć ten konkretny Winamp. Wszystko powinno być tak zrobione żebym mógł konkretne pozycje to drzewa dopisywać bez ponownej kompilacju (np. do pliku INI). Mam już takie coś napisane na ListBox'ie:

procedure TForm1.FormCreate(Sender: TObject);
var
  Ini : TIniFile;
begin
  Ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'files.ini');
  try
    Ini.ReadSections(ListBox2.Items); 
  finally
    Ini.Free;
end;
end;


procedure TForm1.ListBox2Click(Sender: TObject);
begin
 Ini := TIniFile.Create(ExtractFilePath(Application.ExeName)+'files.ini');
 Memo1.Lines.Clear;
 sciezka := ExtractFilePath(Application.ExeName)+Ini.ReadString(ListBox2.Items[ListBox2.ItemIndex], 'url','def');
 foto := ExtractFilePath(Application.ExeName)+Ini.ReadString(ListBox2.Items[ListBox2.ItemIndex], 'foto','def');
 Memo1.Lines.Add(Ini.ReadString(ListBox2.Items[ListBox2.ItemIndex], 'opis','def'));
 Image1.Picture.LoadFromFile(foto);
end;

ale chcę to przerobić na TreeView.

0

Niestety nie za bardzo rozumie o co Ci chodzi .. - chyba mam dzisiaj jakąś pomroczność jasną.. :)

Podaj jakiś przykład...

0

Chodzi o TTreeView + F1

0

W uproszczeniu chodzi o to żeby wczytać drzewo z pliku (np. INI lub XML) i po kliknięciu któregoś elementu drzewa ma się zmienić:

  1. caption w 'label' (wczytywany również z pliku)
  2. obraz w 'image'
0

Lepiej na xml. Poczytaj o TXMLDocument i rekurencji (łatwo za jej pomocą wcisnąć cały xml do triwiu).

0

Też tak myślałem że na XML będzie najprościej ale niestety na tym za bardzo się nie znam... w helpie jest o tym niewiele, na google też nic nie mogę znaleźć. może ma ktoś jakieś źródła programu, linki, tytuły?
A może lepiej by było to zrobić na jakiś 2 plikach INI...?
Jeśli ktoś się na tym zna, albo ma jakiś pomysł to bardzo bym prosił o konkrety.

0

No można to zrobić jeszcze na najzwyklejszych plikach tekstowych i tablicach. Aby wczytać drzewo do TreeView wystarczy zrobić taki plik
Item1
[spacja]Sub st.1
[spacja][spacja]Sub st.2
[spcaja]Sub2 st.1
Item2
itd.itd.
Każdy kolejny item (TTreeNode) ma o jeden większy AbsoluteIndex.
Teraz po wczytaniu lini,które wyglądają tak np. Caption;Plik_obrazu, wpisujesz sobie do kolejnej komórki tabeli i modyfikujesz caption itema.
Sposób może kiepski, ale łatwy w programowaniu i nie trudny.

0

Własnie ma ktos jakies zródło z treeview gdzie wykorzystane sa recordy (tzn danej gałezi przypisany jest record poleceniem addobject ) i zapisaniem tego do xml bo siedziałem troche nad tym ale za cieki jestem widac i nie udało mi sie tego rozwiazac:(.

0

W helpie niewiele jest? Tam jest wszystko o tym!


procedure OutputXMLNode(Node:IXMLNode);
var
I:Integer;
begin
Form1.Output.Lines.Add(Node.LocalName);
for I:=0 to Node.ChildNodes.Count-1 do
OutputXMLNode(Node.ChildNodes.Get(I));
end;

begin
if not OpenDialog.Execute then
Exit;
XML.LoadFromFile(OpenDialog.FileName);
XML.Active:=True;
OutputXMLNode(XML.DocumentElement);
end;

Tylko przerób sobie na treeview.

0

Ja to rozwiązałem na strumieniach
najpierw jednak wejdzcie na strone:
http://planeta-delphi.com/modules.php?op=modload&name=News&file=article&sid=52&mode=thread&order=0&thold=0

jest tam fajny artykół o treeview jak podpiac dane do danego elementu treeview

mozemy stworzyc typ:
typr
pogolnedane=^togolnedane
togolnedane=record
nazwa_projektu:string[30];
dane_klienta[strin[15];
dane_projktanta[string[5];
end;

pózniej deklarujey

var

opis:pogolnedane;

i dodaqjemy np po guzikem do treeview

begin
opis.nazwa_projektu:='lalasl';
opis.dane_klienta:='kot';
treeview1.Items.AddObject(nil, ‘opis ogolny,opis);
end;

teraz zabawa z stumieniami tylko tu mam mały problem bo musze przepisac wczesniejszy opis (nie wiem jak to zrobic inaczej) tzn wyciagnac z zadeklarowanego typu record

tez pod guzikiem:)
var
S : TFileStream;
opis1:togolnedane;record który zapiszemy do plku
end;
begin
opis1.nazwa_projektu:=opis.nazwa_projektu;//i to mnie w....qu al
opis1.dane_klienta:=opis.dane_klienta;//i to mnie w....qu
S := TFileStream.Create('C:\plik.txt', fmCreate);
S.WriteBuffer(opis1, SizeOf(opis1));
S.Free;

zaspany

ps sorry ze tak kulawo napisane ale neta w domu nie posiadam takze wszystko z głowy:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1